这是我的命令行:
ffmpeg -i i.mp4 -i i.png -c:v libx264 -x264-params cabac=1:ref=8:deblock=1,0,0:analyse=0x3,0x113:me=umh:subme=9:psy_rd=1.0,0.0:mixed_ref=1:me_range=64:chroma_me=1:trellis=2:8x8dct=1:cqm=0:deadzone=21,11:chroma_qp_offset=-2:threads=3:nr=0:decimate=1:mbaff=0:bframes=5:b_pyramid=1:b_adapt=2:b_bias=0:direct=3:wpredb=1:keyint=300:keyint_min=1:scenecut=54:rc=2pass:bitrate=75:ratetol=1.0:qcomp=0.64:qpmin=8:qpmax=51:qpstep=4:cplxblur=20.0:qblur=0.5:ip_ratio=1.40:pb_ratio=1.30:aq=1,1.00 -c:a copy -filter_complex 'overlay' o1.mp4
ffmpeg 说:
[libx264 @ 000001ded1a53d60] Error parsing option 'mixed_ref = 1'.
[libx264 @ 000001ded1a53d60] Error parsing option 'deadzone = 21,11'.
[libx264 @ 000001ded1a53d60] Error parsing option 'decimate = 1'.
[libx264 @ 000001ded1a53d60] Error parsing option 'mbaff = 0'.
[libx264 @ 000001ded1a53d60] Error parsing option 'direct = 3'.
[libx264 @ 000001ded1a53d60] Error parsing option 'wpredb = 1'.
[libx264 @ 000001ded1a53d60] Error parsing option 'rc = 2pass'.
[libx264 @ 000001ded1a53d60] Error parsing option 'ip_ratio = 1.40'.
[libx264 @ 000001ded1a53d60] Error parsing option 'pb_ratio = 1.30'.
[libx264 @ 000001ded1a53d60] Error parsing option 'aq = 1,1.00'.
[libx264 @ 000001ded1a53d60] can't open file '0'
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
我应该怎么办?
答案1
无需声明数十个选项。这就是 x264 编码预设的用途。您的输出表明慢点使用了预设:
ffmpeg -i i.mp4 -i i.png -filter_complex 'overlay' -c:v libx264 -preset slower -c:a copy o1.mp4
我可以通过参考来判断使用了哪个预设
x264 --fullhelp
。这将使用 CRF 作为速率控制方法。您的输出使用了 2 遍模式。除非您需要针对特定的输出文件大小(您可能不需要),否则只需使用 CRF。请参阅FFmpeg 维基:H.264获得 2 次通过的示例以及有关预设和 CRF 的更多信息。
答案2
错误如下:
[libx264 @ 000001ded1a53d60] Error parsing option 'mixed_ref = 1'.
直接来自x264的x264_param_parse()
函数,ffmpeg使用该函数。
事实证明,x264 报告的失败选项与设置时预期的不同。您可以使用 x264 的源代码将两者关联起来:
- 您可以分辨出打印了哪些内部变量x264 代码库中的 x264_param2string() 函数。
- 您可以检查 x264 在设置这些变量时需要哪些选项功能
param_parse()
。
我查找了一些不匹配的情况,结果发现这就是你需要使用的:
╔══════════════════╦═══════════════════════════════════════════╗
║ printed value ║ setting ║
╠══════════════════╬═══════════════════════════════════════════╣
║ mixed_ref ║ mixed-refs ║
║ deadzone = X,Y ║ deadzone-inter=X:deadzone-intra=Y ║
║ decimate ║ dct-decimate ║
║ direct = 0/1/2/3 ║ direct="none"/"spatial"/"temporal"/"auto" ║
║ rc ║ implied by qp, abr, crf, 2-pass mode... ║
║ ... ║ ║
╚══════════════════╩═══════════════════════════════════════════╝
尤其是“rc”表明,没有足够多的精确相关性来轻松进行逆向工程。这就是为什么尝试将值与 x264 的预设之一匹配可能更容易。