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


18

尝试优化家庭视频的大小时,我在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视频) 编解码器配置

Answers:


53

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

可变比特率

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

选项1:恒定质量编码

通常,如果您不想指定特定的文件大小,则应让比特率自由变化,因为这将带来最高的质量。您可以通过将比特率设置为0并将恒定速率因子(CRF)设置为目标质量级别来实现:

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文档


4
目前,这是在整个Internet上编码VP8的唯一最佳指南。做得好,我希望我能再投票一次!
evilsoup

@evilsoup谢谢。我仍在对其进行调整,稍后将在FFmpeg Wiki上添加一个新页面。
slhck

这确实是一个绝妙的答案!现在,我明白了为什么我的视频总是总是质量不高,因为我实际上总是使用默认的256 kBit / s。非常感谢你!
jeroen

原始mp4和转换后的webm之间的大小差异是多少?
瑞士2014年

1
@Dan我刚刚更新了指南-注意到它有点过时了。很高兴您发现它很有用。
slhck
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.