Неправильные настройки кодирования FFMPEG x265 для некоторых источников

Неправильные настройки кодирования FFMPEG x265 для некоторых источников

Я пытаюсь закодировать файл с помощью этой командной строки:

ffmpeg -i "source.mp4" -c:v libx265 -preset slow -crf 23.8 -vf scale=1920:-1:flags=lanczos -x265-params ref=6:bframes=5:no-sao=1:no-strong-intra-smoothing=1:cutree=0:aq-mode=3:deblock=-1,-1:rskip=0:rc-lookahead=80:subme=1:numa-pools=16:frame-threads=4 -c:a copy -movflags faststart output.mp4

Некоторые файлы возвращаются с очень разными настройками кодировки. Даже CRF неверный в Mediainfo. Я вижу предупреждение, когда это происходит, которое гласит:

[mp4 @ 00000148a5247040] track 1: codec frame size is not set

Я поискал в Google, и никто не упоминал, что это предупреждение вызывает проблему.

Я использую довольно свежую сборку: ffmpeg version 2021-10-03-git-2761a7403b-full_build-www.gyan.dev Copyright (c) 2000-2021 the FFmpeg developers собранную с помощью gcc 10.3.0 (Rev5, собранную проектом MSYS2).

SOURCE MEDIAINFO:

    Video
    ID : 1
    Format : AVC
    Format/Info : Advanced Video Codec
    Format profile : [email protected]
    Format settings : CABAC / 4 Ref Frames
    Format settings, CABAC : Yes
    Format settings, Reference frames : 4 frames
    Codec ID : avc1
    Codec ID/Info : Advanced Video Coding
    Duration : 32 min 43 s
    Bit rate : 20.5 Mb/s
    Width : 3 840 pixels
    Height : 2 160 pixels
    Display aspect ratio : 16:9
    Frame rate mode : Constant
    Frame rate : 25.000 FPS
    Color space : YUV
    Chroma subsampling : 4:2:0
    Bit depth : 8 bits
    Scan type : Progressive
    Bits/(Pixel*Frame) : 0.099
    Stream size : 4.69 GiB (100%)
    Writing library : x264 core 157 r2969 d4099dd
    Encoding settings : cabac=1 / ref=3 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=7 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=0 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=12 / lookahead_threads=2 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=8 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=2 / keyint=50 / keyint_min=5 / scenecut=40 / intra_refresh=0 / rc_lookahead=40 / rc=crf / mbtree=1 / crf=25.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00
    Language : English
    Codec configuration box : avcC

X265 OUTPUT MEDIAINFO:

    Video
    ID : 1
    Format : HEVC
    Format/Info : High Efficiency Video Coding
    Format profile : Main@L4@Main
    Codec ID : hev1
    Codec ID/Info : High Efficiency Video Coding
    Duration : 32 min 43 s
    Bit rate : 5 186 kb/s
    Width : 1 920 pixels
    Height : 1 080 pixels
    Display aspect ratio : 16:9
    Frame rate mode : Constant
    Frame rate : 25.000 FPS
    Color space : YUV
    Chroma subsampling : 4:2:0 (Type 0)
    Bit depth : 8 bits
    Scan type : Progressive
    Bits/(Pixel*Frame) : 0.100
    Stream size : 1.19 GiB (100%)
    Encoding settings : cabac=1 / ref=3 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=7 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=0 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=12 / lookahead_threads=2 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=8 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=2 / keyint=50 / keyint_min=5 / scenecut=40 / intra_refresh=0 / rc_lookahead=40 / rc=crf / mbtree=1 / crf=25.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00
    Language : English
    Color range : Limited
    Codec configuration box : hvcC

Настройки выходного кодирования, похоже, соответствуют исходному, а не моим настройкам кодировщика. Некоторые файлы кодируются нормально с точно такими же настройками, но не имеют предупреждающего сообщения «размер кадра кодека не установлен». Я менял настройки довольно много раз, и тот же результат для проблемных файлов. Если бы это произошло только один раз, я бы подумал, что проблема с источником, но это произошло с 2 из последних 4 файлов, которые я кодировал, так что я, должно быть, что-то упускаю. Это может быть просто неправильные метаданные в выходных данных, но я не знаю наверняка. Это не происходит в Handbrake, я пробовал другую сборку FFMPEG, та же проблема.

решение1

Это связано с изменением в августе 2021 года, когда libx265 будет передавать любые данные SEI в кадрах входного сигнала pre-encode в закодированные пакеты. Это включает настройки кодирования, если таковые были сохранены, из источника.изменятьбыло мотивировано необходимостью поддержки передачи других типов данных SEI.

Это влияет только на сохраненную строку. Параметры кодировщика задаются пользователем.

Откройтетикет об ошибкес необходимой информацией.

Связанный контент