Мне нужно закодировать видео из stati c изображений таким образом, чтобы формат соответствовал другому, чтобы я мог объединить видеопотоки вместе.
Вот mediainfo
файла Я пытаюсь сопоставить:
Video
Format : AVC
Format/Info : Advanced Video Codec
Format profile : Baseline@L3.1
Format settings, CABAC : No
Format settings, ReFrames : 1 frame
Codec ID : 7
Duration : 2mn 46s
Bit rate : 1 614 Kbps
Width : 1 280 pixels
Height : 720 pixels
Display aspect ratio : 16:9
Frame rate mode : Variable
Standard : NTSC
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Stream size : 32.0 MiB (87%)
Color primaries : BT.601 PAL
Transfer characteristics : BT.601
Matrix coefficients : BT.601
Пока что я смог придумать следующее:
avconv -f image2 -framerate 1.2 -i loop_%d.tif -c:v libx264 -preset veryslow -profile:v baseline -level:v 31 -b:v 1614K -refs 1 loop.flv
Это заставляет меня:
Video
Format : AVC
Format/Info : Advanced Video Codec
Format profile : Baseline@L3.1
Format settings, CABAC : No
Format settings, ReFrames : 1 frame
Codec ID : 7
Duration : 2s 917ms
Bit rate : 1 614 Kbps
Width : 1 280 pixels
Height : 720 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 1.200 fps
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 1.459
Stream size : 575 KiB
Writing library : x264 core 142 r2431 a5831aa
Encoding settings : cabac=0 / ref=1 / deblock=1:0:0 / analyse=0x1:0x131 / me=umh / subme=10 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=0 / me_range=24 / chroma_me=1 / trellis=2 / 8x8dct=0 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=6 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=0 / weightp=0 / keyint=250 / keyint_min=1 / scenecut=40 / intra_refresh=0 / rc_lookahead=60 / rc=abr / mbtree=1 / bitrate=1614 / ratetol=1.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00
Что, к сожалению, все еще недостаточно хорошо, поскольку VL C Media Player сильно падает (просто закрывается), регистрируя main error: Failed to compensate for the format changes, removing all filters; main error: Failed to create video converter
, как только происходит слияние потоков. Я попытался объединить другой поток, который имеет точно такую же кодировку, и он работает нормально. Я также стараюсь соединять только ключевые кадры, и я включаю NALU, содержащий AVCDecoderConfigRecord, так что я почти уверен, что я не делаю ничего плохого, тем более, что пара других программ справляются со сваркой. Просто VL C ожидает еще более близкого совпадения.
Вот что я пробовал:
- Добавление
-vsync 2
для получения режима переменной частоты кадров. Ничего не меняет. - Добавление
-color_primaries bt470bg -color_trc gamma28 -colorspace bt470bg
, чтобы попытаться получить настройки BT.601 PAL (несколько сайтов упоминали об этом). Ничего не меняет. - Добавление
-s ntsc
для установки стандарта NTS C. Это также меняет разрешение на 720x480 (не ОК), а указание -s 1280x720
дополнительно избавляет от тега NTS C.
Если кто-то знает, какие флаги мне нужно указать, чтобы получить ближе, это было бы супер-полезно! Поток, который я пытаюсь сопоставить, кодируется на устройстве Android (это живой поток), поэтому я предполагаю, что он построен с использованием стандартной платформы Android MediaCoder, на случай, если это поможет.