我有一堆适用于 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
。选择您觉得合适的任何名称。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
或者我会使用的简短版本(使用 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