使用 ffmpeg/avconv 将视频转换为 WebM

使用 ffmpeg/avconv 将视频转换为 WebM

尽管尝试优化我的家庭视频的大小我使用 Xubuntu 上的 Pitivi 将其中一些转换为 WebM 进行测试。大小差异很大。生成的 webm 文件只有原始文件的 10% 左右,而图片质量对我来说几乎相同。

我也尝试使用 进行转换,avconv以便编写脚本,但生成的文件看起来非常糟糕。查看 Pitivi 中的渲染设置后,我尝试了一些参数:avconv -i $1 -q 5 -qmin 0 -qmax 63 ${1%.*}.webm,但质量仍然很糟糕,所以似乎我遗漏了/使用了一些错误的参数。有人知道将 h264 电影转换为 webm 并获得与 Pitivi 相同的质量时应使用哪些正确的参数吗?

这些是 Pitivi 中的设置: 创建 Pitivi 项目 渲染至 webm(html5 视频) 编解码器配置

答案1

笔记:此信息基于 FFmpeg WikiVP9 编码。请参阅该文章了解更多信息——它将不断维护和扩展。为了获得最佳效果,您应该使用最新版本ffmpeg从他们的网站下载(静态构建就足够了;它包含libvps-vp9编码器)。

可变比特率

VBR 编码可为您提供最佳的整体质量,因为编码器可以自由选择为每帧分配多少位。除非您正在准备用于恒定比特率流式传输的视频,否则请选择此模式。

选项 1:恒定质量编码

通常,如果您不想针对特定的文件大小,则应让比特率自由变化,因为这将带来最高的质量。您可以通过将比特率设置为 0 并将恒定速率因子 (慢性肾衰竭)达到目标质量水平:

ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 output.webm

CRF 值的范围是 0-63。值越低表示质量越好。建议值的范围是 15-35,对于 1080p 高清视频,建议值为 31。Google 有一个指南更多相关信息

选项 2:使用目标比特率进行两次编码

如果您希望文件具有特定的目标比特率或文件大小,则需要指定速率并使用两遍编码(这将确保最佳质量分布)。这里我们选择 5 MBit/s,这对于 1080p 内容来说应该足够了。

ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 5M -pass 1 -f webm /dev/null && \
ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 5M -pass 2 output.webm

Windows 用户需要使用NUL来代替/dev/null,以及^来代替\

恒定比特率

首先,libvpx提供恒定比特率和可变比特率编码模式应尽可能避免使用恒定比特率(除非您针对特定文件大小或流媒体场景),因为每个文件大小的平均质量会更差。不过,如果没有其他方法适合您,您可以尝试设置恒定比特率,例如 1 MBit/s:

ffmpeg -i input.mp4 -c:v libvpx-vp9 -minrate 5M -maxrate 5M -b:v 5M output.webm

查看输出并根据您的喜好(或文件大小限制)增加或减少比特率。例如,您可以使用500K5M等。

您必须指定-minrate-maxrate比特率-b:v,以便编码器使用 CBR。它们都必须具有相同的值 — 否则它会选择不同的目标比特率并进行 VBR 编码,但质量较差。

声音的

目前 VP9 编码的首选音频编解码器是 Opus。FFmpeg 将默认选择必要的编码器及其选项。如果您想明确设置-c:a libopus,也可以这样做。请参阅libopus文档以获得更多选项。

相关内容