Как я могу выложить видео мозаикой / создать видеомонтаж?

У меня есть четыре видео, которые я хотел бы выложить плиткой 2x2, чтобы сделать новое видео. Есть ли способ сделать это легко, желательно бесплатно и под Linux? Я готов программировать умеренное количество, возможно, для взаимодействия с какой-нибудь библиотекой, но не желаю сам писать целую программу обработки видео. Вы можете предположить, что входящие и выходные видео имеют наиболее удобный из распространенных форматов.

Замечательно подошел бы аналог команды gm montage (для изображений).


person A. Rex    schedule 22.02.2009    source источник


Ответы (4)


В настоящее время я сам использую GStreamer для аналогичного проекта (запись лекций). Вероятно, вы ищете видеомиксер. Посмотрите этот пример: Конвейер gstreamer для видео с 4-сторонним разделением экрана (сценарий находится здесь).

GStreamer отлично работает и в Windows. Если вам интересно, вы можете ознакомиться с GStreamer WinBuilds.

Пример
Вот базовый сценарий, который у меня работает в Windows (в нем нет обратной косой черты, потому что я использую gst_parse_launch вызов из кода C для анализа описания конвейера):

  v0. ! queue
      ! decodebin
      ! ffmpegcolorspace
      ! videoscale
      ! video/x-raw-yuv,width=320,height=240
      ! videobox right=-320 bottom=-240
      ! ffmpegcolorspace
      ! vmix.sink_0
  v1. ! queue   
      ! decodebin
      ! ffmpegcolorspace
      ! videoscale
      ! video/x-raw-yuv,width=320,height=240
      ! videobox bottom=-240
      ! ffmpegcolorspace
      ! vmix.sink_1
  v2. ! queue   
      ! decodebin
      ! ffmpegcolorspace
      ! videoscale
      ! video/x-raw-yuv,width=320,height=240
      ! videobox right=-240
      ! ffmpegcolorspace
      ! vmix.sink_2
  v3. ! queue   
      ! decodebin
      ! ffmpegcolorspace
      ! videoscale
      ! video/x-raw-yuv,width=320,height=240
      ! ffmpegcolorspace
      ! vmix.sink_3
  vmix. ! queue 
        ! ffmpegcolorspace
        ! dshowvideosink
  filesrc location="c:/test.mpg" name="v0"
  filesrc location="c:/test.mpg" name="v1"
  filesrc location="c:/test.mpg" name="v2"
  filesrc location="c:/test.mpg" name="v3"
  videomixer name=vmix
             sink_0::xpos=0   sink_0::ypos=0   sink_0::zorder=0
             sink_1::xpos=320 sink_1::ypos=0   sink_1::zorder=1
             sink_2::xpos=0   sink_2::ypos=240 sink_2::zorder=2
             sink_3::xpos=320 sink_3::ypos=240 sink_3::zorder=3
person StackedCrooked    schedule 07.01.2010
comment
Выглядит отлично, но у меня это не сработало. Однако другой конвейер, с которым он связался, ДЕЙСТВИТЕЛЬНО работает, хотя, как утверждается, неэффективно и не имеет звука. Это определенно лучше, чем то, что у меня есть. Спасибо! А пока я попытаюсь выяснить, почему у Рэя не работает. - person A. Rex; 10.01.2010
comment
Я выложил более простой пример. Если вам нужен звук, вам нужно будет выбрать, из какого видео вы хотите использовать звук. Затем вам нужно будет использовать именованный элемент decodebin для этого видео и подключить его к аудиоконвертеру - ›audioresample -› audiosink. Если вам нужна дополнительная помощь, не стесняйтесь спрашивать. - person StackedCrooked; 10.01.2010
comment
Хорошо, отлично сработало! Re audio: мне это не так уж и нужно, но если у вас есть способ микшировать весь звук, это было бы неплохо. По поводу Windows: как говорится в моем вопросе, я использую Linux. Я предполагаю, что поэтому dshowvideosink у меня не работает, но я просто изменил его на filesink. - person A. Rex; 11.01.2010
comment
В любом случае, я думаю, что это был лучший ответ, потому что он включал полные инструкции, а не просто указатель на язык, который в принципе должен быть в состоянии выполнить задачу. Спасибо за вашу помощь! - person A. Rex; 11.01.2010
comment
Отлично :) Кстати, вы можете использовать autovideosink вместо dshowvideosink в Linux. Вам также может потребоваться добавить элемент мультиплексора перед файловой ссылкой, чтобы скорость воспроизведения была правильной. - person StackedCrooked; 11.01.2010

Следующая команда ffmpeg сделает именно то, что хотел вопрошающий:

ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 -i input4.mp4 -filter_complex \
'[0:v]pad=iw*2:ih*2:0:0[int2];[int2][1:v]overlay=0:H/2[int3];[int3][2:v]overlay=W/2:0[int4];[int4][3:v]overlay=W/2:H/2[out]' \
-map [out] -c:v libx264 -crf 23 -preset veryfast output.mp4

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

Если видео имеют разное разрешение, команда потребует некоторых изменений.

person evilsoup    schedule 17.01.2013
comment
работает как шарм: D отлично работает и с avconv (те же аргументы), если ffmpeg недоступен - person rmanna; 15.02.2016

Это похоже на проблему, для решения которой был разработан AviSynth.

AviSynth - это, по сути, язык сценариев для управления видеопотоками. Текстовый файл описывает операции, которые вы хотите применить к одному или нескольким входным видеопотокам. Текстовый файл передается механизму AviSynth, который предоставляет виртуальный файл .AVI, который управляет исходными потоками по одному кадру за раз, когда вы их выбираете.

Объедините AviSynth с отдельным инструментом, который читает из виртуального файла .AVI и записывает в новый файл, чтобы сохранить изменения.

person John Knoeller    schedule 06.01.2010
comment
Спасибо за вашу помощь. Поскольку мне нужно было выбрать ответ, за который наградить награду, я выбрал тот, который содержит наиболее полные инструкции. Тем не менее, я надеюсь, что вы сможете получить несколько голосов за вашу помощь. - person A. Rex; 11.01.2010
comment
Сожалеем, что вы не смогли его установить. Он просто работал, когда я установил его пару лет назад. Во всяком случае, я так запомнил;) - person John Knoeller; 11.01.2010

Одно из возможных решений - описать макет вашего видеомонтажа с помощью SMIL, языка разметки мультимедиа. Для этого требуется текстовый редактор для написания вашего документа SMIL и видеоплеер SMIL (например, Ambulant, Quicktime или Realplayer ) для его отображения.

person mouviciel    schedule 23.02.2009