如何使用 WebM 正确压缩视频?

如何使用 WebM 正确压缩视频?

几年前,当 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 进行编码总是慢得令人痛苦……

参考:

相关内容