Вот моя командная строка:
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для примера с двумя проходами и дополнительной информации о предустановках и CRF.
решение2
Ошибки, такие как:
[libx264 @ 000001ded1a53d60] Error parsing option 'mixed_ref = 1'.
поступают напрямую из функции x264 x264_param_parse()
, которую использует ffmpeg.
Оказывается, x264 сообщает об ошибках в параметрах иначе, чем он ожидает при их установке. Вы можете сопоставить эти два параметра, используя исходный код x264:
- Вы можете определить, какие внутренние переменные напечатаны вфункция x264_param2string() в кодовой базе x264.
- Вы можете проверить, какие параметры 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.