iLe*_*ing 16 handbrake ffmpeg video-encoding
我有一堆适用于手刹的命令行设置,但有时在某些视频上(我不知道为什么)手刹会抛出“内存不足异常”。我想知道我是否可以找到相同的选项键并使用 FFmpeg 来完成,但这似乎并不容易。
FFmpeg 有时要么没有这些选项,要么默认执行某些操作。例如,我不知道如何使用 FFmpeg 进行自定义变形。对我来说非常重要的是,生成的视频将与使用手刹完成的视频一样好。这是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
Run Code Online (Sandbox Code Playgroud)
如何将其转换为 FFmpeg 命令?
slh*_*hck 23
Handbrake 使用 x264 编码器进行视频转换。有一个站点概述了所有 x264 选项及其 FFmpeg 对应项。但是,这些选项有点过时,其中一些选项不再起作用或可能已重命名。对于大多数细节选项,您应该使用 x264 配置文件 - 但我们会到达那里。
许多基本的手刹选项(例如帧速率)并非特定于 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
这将编码模式设置为VBV,它针对流场景,而不仅仅是恒定比特率或恒定质量。恒定质量也称为CRF,这是 x264 的默认设置——它在 Handbrake 中称为“Rate Factor”。虽然 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
,superfast
,veryfast
,faster
,fast
,medium
来slow
,slower
和veryslow
。选择你觉得舒服的任何东西。
所以,总而言之,长版本:
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
Run Code Online (Sandbox Code Playgroud)
或者我会使用的简短代码(删除了 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
Run Code Online (Sandbox Code Playgroud)
更改为用于通用转换的恒定质量编码,使用它并将-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
Run Code Online (Sandbox Code Playgroud)