【问题标题】:Why does FFMPEG always make large WebM files?为什么 FFMPEG 总是制作大的 WebM 文件?
【发布时间】:2013-03-23 14:47:42
【问题描述】:

我正在尝试将我的电影编码为 WebM:

ffmpeg -i input.MOV -codec:v libvpx -quality good -cpu-used 0 -b:v 10k
-qmin 10 -qmax 42 -maxrate 10k -bufsize 20k -threads 8 -vf scale=-1:1080
-codec:a libvorbis -b:a 192k
output.webm

我想以几种不同的比特率(视频和音频相结合)进行编码:

  • 2192 kbps
  • 1692 kbps
  • 1000 kbps

问题是,无论我输入哪种比特率,我总是得到一个比特率高于 1900 kbps 的文件。 (上面的代码示例为 1914 kbps。)

我做错了什么?

【问题讨论】:

    标签: encoding ffmpeg webm


    【解决方案1】:

    libvpx 在码率控制和质量设置方面有点复杂。请参阅vpx Encoding GuideVP8 Encode Parameter Guide 了解更多信息。我花了一个小时挖掘源代码来理解它。

    如果要设置恒定比特率,则必须将 b:vmaxrateminrate 设置为相同的值,例如像这样(请注意,为简洁起见,我在此处省略了音频选项):

    ffmpeg -i input.mov -c:v libvpx -b:v 1900K -maxrate 1900K -minrate 1900K output.webm
    

    如果您想使用可变质量并且只指定比特率的上限,那么您需要同时设置b:vcrf。如果您省略crf,则指定的比特率将被视为平均值。只有crf,编码器才会将b:v的含义更改为最大允许速率。

    ffmpeg -i input.mov -c:v libvpx -b:v 1900K -crf 10 output.webm
    

    CRF 的值 10 是一个很好的起点,但libvpx 可能会在qmin ≤ q ≤ qmax 的范围内改变每帧的质量,您也可以根据需要指定。将qmin 的下限设置为 10 对我来说似乎有点高,但本质上无论如何你都必须进行一些试验和错误,因为如果最大比特率太低,你会不断饱和。

    【讨论】:

    • 非常感谢您的宝贵时间! :) 正如您在第一个示例中所说,忽略质量就可以了。它现在就像一个魅力。
    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 2017-03-26
    相关资源
    最近更新 更多