Соответствие заданному c мультимедийному формату с помощью ffmpeg / avconv - PullRequest
0 голосов
/ 04 мая 2020

Мне нужно закодировать видео из 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, на случай, если это поможет.

...