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


13

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

FFmpeg有时没有这些选项,或者默认情况下没有内容。例如,我不知道如何使用FFmpeg进行自定义变形。对我来说,非常重要的一点是,所产生的视频要与手刹一样好。这是手刹线:

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命令?

Answers:


20

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。(手刹--cfr只是设置一个恒定的帧速率。此处不需要)。

  • --arate 44.1

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

  • --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

    这就将编码模式设置为VBV,它针对流方案,而不仅仅是恒定的比特率或恒定的质量。恒定质量也称为CRF,它是x264的默认值–在“手刹”中称为“比率因子”。虽然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预设选择了一组选项,这些选项将编码速度与压缩效率进行了权衡。他们方便地从命名ultrafastsuperfastveryfastfasterfastmediumslowslowerveryslow。选择您认为合适的任何东西。

因此,总结一下,长版:

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

哈哈@slhck,就在我为答案做最后润饰时,您可以提出一个更好的答案。
evilsoup
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.