Инструмент командной строки Video для вывода мозаичного видео

Я ищу видеоинструмент командной строки, работающий на linux, с возможностью написания сценариев, и он может дать выходное видео с мозаичным видео внутри. Проблема в том, что мозаичные видеоролики должны меняться внутри выходных данных. Представьте себе мозаичное видео 4*4, но входных видео больше, чем 16, поэтому, например, каждые 10 секунд мне приходится менять плитку в мозаике на другое видео.

Я нашел инструмент командной строки VLC и avisynth, которые могут генерировать мозаичный вывод, но, как я вижу, они не поддерживают изменяющиеся видео, описанные выше.

Кто-нибудь знает другие варианты?

Заранее спасибо!

2 ответа

Решение

AviSynth может присоединяться к видео, поэтому вы можете изменить источник видео в любое время в сценарии.

Например, в следующем примере верхнее левое видео четырех входов изменится на другое видео через 6 секунд:

v11 = AviSource("SomeSampleVideo.avi", false). \
  Crop(0, 0, 320, 240).AssumeFPS(25).ConvertToRGB32.Trim(0, 150).FadeOut(25, $FF0000)

v12 = AviSource("AnotherSampleVideo.avi", false). \
  Crop(40, 10, 320, 240).AssumeFPS(25).ConvertToRGB32.FadeIn(25, $FF0000)

v1 = v11 + v12

v2 = ImageReader("SomeSampleBitmap.bmp").Crop(20, 10, 320, 240).ConvertToRGB32
v3 = AviSource("YetAnotherVideo.avi", false).Crop(30, 30, 320, 240).ConvertToRGB32
v4 = v1.Subtract(v2)

return StackVertical(StackHorizontal(v1, v2), StackHorizontal(v3, v4))


Вполне возможно, что я неправильно понял требования, хотя..

Обходным путем может быть запуск видео через поток UDP, созданный с помощью VLC, например:

    vlc -vvv $YOUR_INPUT_VIDEO_AS_A_VARIABLE --sout='#transcode{vcodec=h264, vb=768, fps=25.0, width=1920, height=1080, scale=1, acodec=aac, ab=128, samplerate=32000}:standard{access=udp, mux=ts, dst=239.0.0.1}'

Затем включите этот поток udp в свою мозаику VLC, например:

   setup video1 input udp://@239.0.0.1

Позже я представляю, что вы можете написать скрипт, который вызывается с переменной, которая является путем к вашему новому видео ($YOUR_INPUT_VIDEO_AS_A_VARIABLE), в конечном счете убивая предыдущий экземпляр VLC и перезапуская его с новым видео, отправляя его по тому же адресу udp. В вашем случае вам нужно принять во внимание порты, например, отправив видео с 1 по 239.0.0.1:1234; видео с 2 по 239.0.0.1:1236; видео с 3 по 239.0.0.1:1238 - и так далее.

UDP не заботится, если ничего не отправлено, поэтому я думаю, что у вас будет короткий период, когда видео не воспроизводится (время, необходимое для уничтожения старого экземпляра VLC и потоковой передачи нового видео).

Опять же, это обходной путь. Так что, возможно, это поможет, иначе забудь об этом.

Другие вопросы по тегам