Множественные боковые видеопотоки в одном файле без перекодирования

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

Я ищу два или более изображения бок о бок (не объединение видео), упакованные в mp4 / avi / mkv.

Я считаю, что контейнер mkv поддерживает такую ​​упаковку, но мне не удалось найти подходящие варианты для ffmpeg или другого инструмента для его хранения таким образом. Что он делает, так это очень медленное перекодирование видео в один большой поток h264.


person Serg Fillipenko    schedule 23.05.2018    source источник
comment
Контейнер MPEG также поддерживает более одного TS (транспортного потока) в одном файле с разными свойствами. Но поздравляю с выбором MKV, он лучше и проще разбирается.   -  person zx485    schedule 23.05.2018


Ответы (2)


Если ваш игрок может с этим справиться, просто заставьте его работать бок о бок. Кодирование или мультиплексирование не требуется.

mpv видеоплеер

введите здесь описание изображения

Пример использования mpv:

mpv --lavfi-complex="[vid1][vid2]hstack[vo];[aid1][aid2]amix[ao]" input1.mp4 --external-file=input2.mp4

В приведенном выше примере предполагается, что каждый вход имеет одинаковую высоту. В противном случае вам придется добавить фильтры scale, scale2ref, pad и / или обрезать. Простой пример использования фильтра обрезки для удаления 20 пикселей с высоты:

mpv --lavfi-complex="[vid1]crop=iw:ih-20[c];[c][vid2]hstack[vo];[aid1][aid2]amix[ao]" input1.mp4 --external-file=input2.mp4

См. документацию по mpv и Фильтры FFmpeg для получения дополнительной информации.

person llogan    schedule 23.05.2018

Просто укажите несколько входов.

ffmpeg -i [input 1] -i [input 2] ... -map 0 -map 1 ... -codec copy -f matroska [output]

Что касается части «из стороны в сторону», то сам игрок должен определять презентацию. Если вы не управляете плеером и вам нужен конкретный макет или презентация, вы должны «записать» все эти видеопотоки в новый и закодировать его как новый единый поток.

person Brad    schedule 23.05.2018
comment
В этом случае вам нужно будет включить параметр -map, чтобы вручную выбрать нужные потоки, например -map 0 -map 1, потому что поведение выбора потока по умолчанию будет выбирать только один поток для каждого типа потока. Кроме того, -f не требуется (но если это необходимо, правильным значением будет matroska, а не mkv). - person llogan; 23.05.2018
comment
@LordNeckbeard Правильные баллы, спасибо. Кроме того, я указываю -f, потому что я обычно выводю в STDOUT как поток. - person Brad; 23.05.2018
comment
-codec copy добавляет второй поток в конец вместо того, чтобы заставлять VLC воспроизводить его параллельно. -map не меняет поведения. - person Serg Fillipenko; 24.05.2018
comment
@SergFillipenko Установка кодека ничего подобного не меняет. Все это помещает два потока в один и тот же вывод. И они должны чередоваться. - person Brad; 24.05.2018