ffmpeg 视频压缩瞎几把指北

  • Date: 2025.01.14 17:33
  • Author: 夕雾实验室
  • Website: ImJoy Dot Net

前言

上来刚想写一句我们为什么要压缩视频 压缩视频的意义是什么,寻思了一下感觉好像跟死板教材一样有大病

但是本质上目的就是为了降本增效,性价比=体积/画质,接触这玩意是从硬盘满了又不愿意删开始的

在牢夕的实践中,大幅牺牲不影响视觉观感,小幅牺牲影响的画质,换取体积腰斩甚至十分之一,是非常划算的

反之牢夕是不提倡无损压缩的,性价比太低,吃性能压半天还不如保留原档呢

这篇文章不想仔细讲各个功能具体都怎么用,只想讲讲你应该用什么,为什么,不用其他的理由又是什么

因为曾经入坑时就有过这些疑问,现在作为答卷交给自己

最后,免责声明:本文充满娱乐性质,如果你有更深入的研究或者更易懂的文章可以让我康康

什么值得压

不要白费功夫

h264 的,码率极高的(比如某些相机直出,静态场景 50Mbps)

什么不值得压:已知明确二压过的,或者码率 < 10M 的(不绝对,灵活处理)

理论

体积 + 画质性价比压缩速度 + 兼容性 这俩互斥!

但是这会还不是你想选就能选的,先看看口袋里有没有半毛钱自己的显卡是什么

如果你的显卡很水,而处理器性能也不满足 GeekBench V6 的单核 1000 分,那就关了吧()

软件还是硬件

硬编快,软编好,Intel 又快又好

首先推荐 Intel 核显独显,如果有的话就可以直接用了,因为这是唯一一家支持按质量比例采样而不是按照平均码率的

如果没有,就需要考虑是软还是硬了

绝大多数情况下,同年份的硬件加速通常是快于 CPU 软编的,但是压缩比也是不如软编的,看取舍

根据分辨率大小和编码复杂程度,跑软编很可能达不到视频的 3x 速度,而硬编可能就能达到 10x 甚至更高,但代价是体积会增加 30%

没有明确的谁好谁坏,只能说是自行权衡 时间 电费 硬盘空间

Hardware encoders typically generate output of significantly lower quality than good software encoders like x264, but are generally faster and do not use much CPU resource. (That is, they require a higher bitrate to make output with the same perceptual quality, or they make output with a lower perceptual quality at the same bitrate.)

硬件编码器通常生成的输出质量远低于像 x264 这样的优秀软件编码器,但通常速度更快,并且不占用太多 CPU 资源。(也就是说,它们需要更高的比特率才能产生相同的主观质量输出,或者以相同的比特率产生较低的主观质量输出。)

HWAccelIntro – FFmpeg

尬吹 Intel

硬件上来说,Intel 对编码工作非常上心,从很多年前核显性能很差,只能追求视频解码那会开始。Chiphell 上有人实测同样硬编 av1,Arc A380 质量速度薄纱 RTX4070,同时价格也赢麻了

软件上来说,Intel 向 Ffmpeg 提交的代码质量都很高,推送也很积极;反观 AMD 很多代码质量不佳,经常被 Ffmpeg 不予收录()

此外 Intel + Netflix 推出了一个用处理器向量指令集,高效软编码的库 svt,因为 AVX 这类指令 AMD 也有,所以也可以使用(AMD: 又在黑,远程施法的时候记得离电脑远点)

编码格式

年轻人,你掉的是 h264 hevc(h265) vvc(h266) 还是 vp9 av1

既然你这么诚实,我把这些选项都扔给你好了,慢慢纠结吧(什么以怨报德)

是这样的,压缩比越高的编码越先进,越先进的编码算法就越复杂,处理越复杂的编码就会需要更高的性能开销,或者有越新的硬件支持

抛开别的老登阴间格式不提,总共分为两路:由老牌标准化组织牵头 硬件厂商为成员居多 有授权费的 h26 系,和谷歌牵头 流媒体厂商为成员居多 开源免费的 vp/av1

最常见的 h264 就不提了,兼容性挺好,但压缩比不是很高,甚至可以用浪费来形容(你猜为什么水果手机很早就引入了 hevc,可以了解到苹果自第一部双摄手机 iPhone 7 就开始了,而其发布时间为 2016 年 9 月)

但牢夕其实很歧视 hevc,虽然压缩比相对 h264 有很大提升,然后对于稍微老一些的显卡编解码支持很好(nVidia GTX A卡不知道 核显 AMD Intel 近五年来的产品)。但因为授权费问题,浏览器支持几乎没了,在线播放除了微软系可以手动上插件开,别的都团灭。感觉不如极端一点 av1 一步到位(压缩比 hevc < av1,而且因为开源免费,较新浏览器都选择了后者)。

如果你狠抓极高的压缩比,比较推荐 av1,但是独显不新过 Nvidia RTX40xxIntel Arc Axxx 或者 核显 Intel Core Ultra 都不支持,但是好在使用 svt-av1 编码器软编效率很高,小于等于 1080P,转码至少是能比播放速度快的

vp9 现在少见了,因为 av1 就是原本准备取代它的 vp10,谷歌为了方便更多厂商参与,专门拿出来成立了个开源组织

最后,vvc 因为太新遗憾离场,等三年后再回顾它

如果需要在线播放,根据从老到新 h264 vp9 av1

如果你只想保持一切,然后降低码率,那就保持 h264

如果没那么多如果就好了()

采样模式

简单的东西简单化

手动指定平均码率的那几个(cbr vbr)不够傻瓜,调起来太麻烦,out!

按比例保留画面质量的那几个(软编 crf Intel icq),yes!

别问为什么,问就是视频是 动态场景 动态画面 动态码率,不能动态分配码率 cbr 会造成大量带宽浪费,而动态分配 vbr 又涉及调节什么场景应该分配多少 什么算动态场景什么是静态,上手困难而且不能通杀所有视频

而按比例保留的一视同仁,每个画面都平等的削减质量,这不就主打一个 来鹅城只办三件事:公平,公平,还是他妈的公平!

音频

音频这好像没啥好讲的,懒得压直接 copy,想管管的指定下码率,格式用个最先进的 libopus 就好了,这玩意处理起来很快,几百倍速

Encode/HighQualityAudio – FFmpeg

https://trac.ffmpeg.org/wiki/Encode/HighQualityAudio

封装格式

略略略

如果你要切片网络点播,m3u8 dash hls 可以随便选一个

资料 The Final

ffmpeg 版本迭代迅速,而且很多人(包括我)理解存在出入。所以有任何问题,应该首先参照官方文档,而不是博客

硬件编码文档 HWAccelIntro – FFmpeg https://trac.ffmpeg.org/wiki/HWAccelIntro

av1 https://trac.ffmpeg.org/wiki/Encode/AV1

hevc https://trac.ffmpeg.org/wiki/Encode/H.265

总文档(理论) https://ffmpeg.org/documentation.html

总维基(实践) https://trac.ffmpeg.org/wiki

检查显卡支持的编解码器

硬件支持/英特尔QuickSync媒体框架 / Hardware/QuickSync – FFmpeg https://trac.ffmpeg.org/wiki/Hardware/QuickSync

硬件支持/英伟达显卡 开发者文档 / Video Encode and Decode GPU Support Matrix | NVIDIA Developer

https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-new