几年前,当 VP8 编解码器问世时,我使用 Ubuntu 上的一个程序将我的所有文件转换为 WebM,这样文件大小就减少了一半。22 分钟的剧集从 300MB 减少到了 150MB 以下。
我认为可能是 Miro Video Converter,但他们现在只提供源 tarball,而且说明没有说明如何编译它。我愿意拼命想要一个可以运行的 .deb 文件。
现在我尝试使用 WinFF、QWinFF、Videomass、FFmpeg 来实现,但都无法达到这种效果……不仅单个文件的转换需要几个小时,而且生成的文件甚至比原始 mp4 还要大……它们也只有 640x480。比特率大约是 1500。
我做错了什么?我似乎无法在 Linux 上找到任何视频转换器来减小我的超大未压缩 MP4 和 AVI 文件的大小。只是参数的问题吗?我做错了什么吗?有没有视频转换器可以做得更好?
如果必须的话,我愿意使用命令行来执行此操作,但我知道我提到的几个只是 FFmpeg 的前端。
编辑:示例 - 输入视频采用 mpeg4 aac 编解码器,2k 比特率,127k 音频,44k 采样率,24 FPS。使用 ffmpeg 转换为 VPx vorbis,音频相同,比特率 1.5k,帧率相同,尺寸相同。生成的文件更大吗?
答案1
A标准FFmpeg 转换为 webm 应该类似于以下 2 遍示例。我已经将其设置为单身的可以按原样复制和粘贴的代码块:
ffmpeg -i input.file \
-c:v libvpx-vp9 -b:v 0 -crf 30 -pass 1 -an \
-deadline best -row-mt 1 \
-f null /dev/null && \
ffmpeg -i input.file \
-c:v libvpx-vp9 -b:v 0 -crf 30 -pass 2 \
-deadline best -row-mt 1 \
-c:a libopus -b:a 96k -ac 2 \
output.webm
对其中一些选项的一些解释性说明,重点是质量/文件大小问题:
-crf 30
:设置范围为 0 - 63,值越低,质量越好(文件大小也越大)。尝试一下,但 30 通常是一个不错的选择。-deadline best
:选择是实时 | 良好 | 最佳其中“best”表示最慢(质量好),“best”表示默认,“realtime”表示最快但质量最低。-row-mt 1
:这将启用基于行的多线程,并允许使用合适的多线程 CPU 进行更快的编码。-c:a libopus
:我看到您提到过,这是一个比 Vorbis 更好的选择,并且在较低比特率(和较小文件大小)下具有更好的播放效果。
通过操作这些选项,有望为您提供所需的更小的输出文件,同时仍保持合理的质量。
请记住,使用 VP9 进行编码总是慢得令人痛苦……
参考:
- FFmpeg 和 VP9 编码指南这个答案完全源自 FFmpeg Trac 上的规范解释。