如何将 HandbrakeCLI 选项转换为 FFmpeg 选项?

如何将 HandbrakeCLI 选项转换为 FFmpeg 选项?

我有一堆适用于 Handbrake 的命令行设置,但有时在某些视频上(我不知道为什么)Handbrake 会抛出“内存不足异常”。我想知道我是否可以找到相同的选项键并使用 FFmpeg 执行此操作,但这似乎不太容易做到。

FFmpeg 有时没有这些选项,或者默认执行某些操作。例如,我不知道如何使用 FFmpeg 进行自定义变形。对我来说,最终的视频效果与使用 Handbrake 制作的视频一样好非常重要。以下是 Handbrake 的行:

HandBrakeCLI.exe --input "d:\input.mpg" --output "d:\output.mp4" --rate 29.97 --cfr --arate 44.1 --format mp4 --width 1920 --height 1080 --custom-anamorphic --display-width 1920 --keep-display-aspect --modulus 8 --crop 0:0:0:0 --encoder x264 --vb 5200 --aencoder faac --ab 128 --mixdown stereo -x bitrate=5200:vbv-bufsize=5200:vbv-maxrate=5200:level=42:bframes=2:min-keyint=60:keyint=60:ref=4:me=umh:merange=64:subme=7:8x8dct:cabac=1  -v3 -2 -a none

我如何将其转换为 FFmpeg 命令?

答案1

Handbrake 使用 x264 编码器进行视频转换。有一个网站概述了所有 x264 选项及其 FFmpeg 对应项。但是,这些选项有些过时了,其中一些选项不再起作用或可能已被重命名。您应该使用 x264 配置文件来实现大多数详细选项 — 但我们会做到的。

许多基本的 Handbrake 选项(例如帧速率)并不是 x264 独有的,它们分散在FFmpeg 在线文档

在我们开始之前,请检查您是否使用了最新版本的 FFmpeg。他们的下载网站为所有主流操作系统提供静态构建。

我们走吧:

  • --input "d:\input.mpg" --output "d:\output.mp4"

    FFmpeg 的语法是ffmpeg -i input.mpg … d:\output.mp4

  • --rate 29.97

    使用 指定视频帧速率-r 29.97。(Handbrake--cfr仅设置恒定帧速率。这里不需要)。

  • --arate 44.1

    设置音频采样率-ar 44100(以赫兹为单位)。

  • --format mp4

    不需要,因为 FFmpeg 知道您想要 MP4。

  • --width 1920 --height 1080 --custom-anamorphic --display-width 1920 --keep-display-aspect --modulus 8 --crop 0:0:0:0

    除了将尺寸设置为 1920×1080 之外,这不会执行任何操作。在 FFmpeg 中,使用 执行此操作-s:v 1920x1080,或者如果您想使用过滤器,则使用-filter:v "scale=1920:1080"

  • --encoder x264 --vb 5200

    将编码器设置为-c:v libx264并将比特率设置为恒定值-b:v 5200K。请注意,我们还没有进行质量设置。

  • --aencoder faac --ab 128 --mixdown stereo

    与上面类似,使用-c:a libfaac -b:a 128K -ac 2。请注意,FFmpeg 不再支持 FAAC;相反,请使用内置的 FFmpeg 编码器-c:a aac -b:a 128K

  • -x bitrate=5200:vbv-bufsize=5200:vbv-maxrate=5200

    这将编码模式设置为血管内皮功能它针对的是流媒体场景,而不仅仅是恒定比特率或恒定质量。恒定质量也称为慢性肾衰竭,x264 的默认设置——在 Handbrake 中称为“速率因子”。虽然 CRF 通常可为您提供最佳质量的编码,但 VBV 模式可为您提供更适合在线流式传输或某些功能有限的设备的文件。

    要设置 VBV,请使用ffmpeg 中的-maxrate 5200K-bufsize 5200K选项。

    要设置 CRF,请-crf 23在 ffmpeg 中使用。

  • level=42

    使用-level 42。这是H.264级别

  • bframes=2:min-keyint=60:keyint=60:ref=4

    用 设置B帧的数量-bf 2。用 设置最小关键帧间隔-keyint_min 60,用 设置最大间隔-g 60。用 设置参考图片的数量-refs 4

  • me=umh:merange=64:subme=7:8x8dct:cabac=1

    这些是您可以在 ffmpeg 中额外设置的选项-x264-params me=umh:merange=64:subme=7:8x8dct:cabac=1- 就像任何其他未直接映射到 ffmpeg 选项的 x264 编码器设置一样。

    如果您很懒,不关心细节,或者如果事情不起作用,这里有“TL;DR”版本:使用-preset:v medium(或省略,因为中等预设是默认设置)。x264 预设选择了一组选项,以编码速度换取压缩效率。它们的名字很方便,从、、 、 、 到 和ultrafast。选择您觉得合适的任何名称。superfastveryfastfasterfastmediumslowslowerveryslow

因此,总结一下,长版本如下:

ffmpeg -i input.mpg -c:v libx264 -r 29.97 -s:v 1920x1080 -b:v 5200K -maxrate 5200K -bufsize 5200K -level 42 -bf 2 -keyint_min 60 -g 60 -refs 4 -x264-params me=umh:merange=64:subme=7:8x8dct:cabac=1 -c:a aac -b:a 128K -ar 44100 d:\output.mp4

或者我会使用的简短版本(使用 VBV 编码并删除了一些详细选项):

ffmpeg -i input.mpg -c:v libx264 -r 29.97 -s:v 1920x1080 -b:v 5200K -maxrate 5200K -bufsize 5200K -c:a aac -b:a 128K -ar 44100 d:\output.mp4

更改为恒定质量编码以进行通用转换,使用此编码并将-crf参数从 18 更改为 28,其中越低表示质量越好,23 为默认值:

ffmpeg -i input.mpg -c:v libx264 -r 29.97 -s:v 1920x1080 -crf 23 -c:a aac -b:a 128K -ar 44100 d:\output.mp4

相关内容