Como posso azulejo vídeos / criar uma montagem de vídeo?
Pergunta
Eu tenho quatro vídeos que gostaria de telha de uma forma 2x2 para fazer um novo vídeo. Existe uma maneira que eu posso fazer isso facilmente, de preferência livre e no Linux? Estou disposto a programar uma quantidade moderada, talvez, a fim de interagir com alguma biblioteca, mas sem vontade de escrever todo um programa de processamento de vídeo de mim. Você pode presumir que os vídeos de entrada e saída são em tudo o que comumente ocorrem formato é mais conveniente.
Um análogo do href="http://www.graphicsmagick.org/1.2/www/montage.html" rel="nofollow noreferrer"> comando gm montagem
Solução
Atualmente, estou usando GStreamer para um projeto semelhante (palestra de captura) eu mesmo. Você provavelmente está procurando o videomixer elemento noreferrer nofollow. Confira este exemplo: vídeo 4-way gasoduto gstreamer tela dividida (script está localizado aqui ).
GStreamer funciona perfeitamente bem no Windows também. Você pode querer verificar o GStreamer WinBuilds se você estiver interessado.
Exemplo
Aqui está um script básico que funciona para mim no Windows (ele não tem as barras invertidas porque eu uso o gst_parse_launch chamada de código C para analisar a descrição do gasoduto):
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
Outras dicas
O seguinte comando ffmpeg vai fazer exatamente o que se pretendia:
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
Em primeiro lugar, o filtro de almofada dobra o tamanho do primeiro vídeo de entrada, deixando o vídeo original no canto superior esquerdo. A sobreposição de série filtros em seguida, coloque as outras entradas sobre o estofamento preto adicionado pelo filtro de almofada.
Se os vídeos são de diferentes resoluções, o comando vai exigir alguma modificação.
Isso soa como o tipo de problema que AviSynth foi projetado para resolver.
AviSynth é essencialmente uma linguagem de script para manipular fluxos de vídeo. Um arquivo de texto descreve que as operações que deseja aplicar a um ou mais fluxos de vídeo de entrada. O arquivo de texto é entregue ao motor AviSynth, que fornece um arquivo .AVI virtual que manipula os fluxos-fonte de um quadro de cada vez que você pegá-los.
Combine AviSynth com uma ferramenta separada que lê o arquivo .AVI virtual e escreve para um novo arquivo para salvar as alterações.