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

Foi útil?

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.

Uma possível solução seria para descrever o layout de sua montagem de vídeo com SMIL , um multimedia linguagem de marcação. Isso requer um editor de texto para escrever o seu documento SMIL e um player de vídeo SMIL (por exemplo, Ambulant , Quicktime ou Realplayer ) para exibi-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top