![FFmpeg: Erro ao usar opções de codificação copiadas do Mediainfo](https://rvso.com/image/1585758/FFmpeg%3A%20Erro%20ao%20usar%20op%C3%A7%C3%B5es%20de%20codifica%C3%A7%C3%A3o%20copiadas%20do%20Mediainfo.png)
Esta é minha linha de comando:
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
E ffmpeg disse:
[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
O que devo fazer?
Responder1
Não há necessidade de declarar dezenas de opções. É para isso que servem as predefinições de codificação x264. Sua saída indica que oMais devagarpredefinição foi usada:
ffmpeg -i i.mp4 -i i.png -filter_complex 'overlay' -c:v libx264 -preset slower -c:a copy o1.mp4
Eu poderia dizer qual predefinição foi usada consultando
x264 --fullhelp
.Isso usará CRF como método de controle de taxa. Sua saída usou o modo de 2 passagens. A menos que você precise definir um tamanho de arquivo de saída específico (provavelmente não), basta usar CRF. VerWiki FFmpeg: H.264para obter um exemplo de 2 passagens e mais informações sobre predefinições e CRF.
Responder2
Erros como estes:
[libx264 @ 000001ded1a53d60] Error parsing option 'mixed_ref = 1'.
vem diretamente da x264_param_parse()
função do x264, que o ffmpeg usa.
Acontece que o x264 relata as opções com falha de maneira diferente do esperado ao configurá-las. Você pode correlacionar os dois usando o código-fonte do x264:
- Você pode saber quais variáveis internas são impressas ema função x264_param2string() na base de código do x264.
- Você pode verificar quais opções o x264 espera ao definir essas variáveis ema
param_parse()
função.
Pesquisei algumas dessas incompatibilidades e descobri que é isso que você precisa usar:
╔══════════════════╦═══════════════════════════════════════════╗
║ 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... ║
║ ... ║ ║
╚══════════════════╩═══════════════════════════════════════════╝
Especialmente "rc" mostra que não há correlação exata suficiente para tornar isso facilmente passível de engenharia reversa. É por isso que pode ser mais fácil tentar combinar os valores com uma das predefinições do x264.