![FFmpeg:使用從 Mediainfo 複製的編碼選項時發生錯誤](https://rvso.com/image/1585758/FFmpeg%EF%BC%9A%E4%BD%BF%E7%94%A8%E5%BE%9E%20Mediainfo%20%E8%A4%87%E8%A3%BD%E7%9A%84%E7%B7%A8%E7%A2%BC%E9%81%B8%E9%A0%85%E6%99%82%E7%99%BC%E7%94%9F%E9%8C%AF%E8%AA%A4.png)
這是我的命令列:
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_param_parse()
ffmpeg 使用的 x264 函數。
事實證明,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 的預設之一進行匹配可能會更容易。