quarta-feira, 10 de setembro de 2014

Dividir tela do vídeo usando FFMPEG | Split Screen Using FFMPEG

Exemplo 1: Colocar dois vídeos lado a lado.

Assuma que temos 2 vídeos, "a.mp4" e "b.mp4", com a mesma resolução 720x480 pixels. E desejamos colocá-los lado a lado em um único vídeo "out.mp4" de 720x480 pixels. Pode-se usar o seguinte comando:
 $ ffmpeg -i a.mp4 -vf "scale=360:480 [inScale]; \
   color=c=black@1.0:s=720x480:r=29.75:d=9.0 [bg];\
   movie=b.mp4, scale=360:480 [vid2]; \
   [bg] [vid2] overlay=360:0 [basis1]; \
   [basis1] [inScale] overlay=0:0" out.mp4

A expressão entre parênteses é a descrição do filtro (filtergraph). A partir dessa expressão é possível montar um diagrama de blocos, para entendermos melhor como ele funciona.


O vídeo "a.mp4" é reescalado para metade da largura (causará distorção) e o resultado fica no nó [inScale]. No nó [bg], é criado um fundo preto de tamanho 720x480, com taxa de frame de 29.75 e duração de 9 segundos. No nó [vid2], é introduzido o vídeo "b.mp4" e reescalado. Agora o nó [vid2] é sobreposto ao nó [bg] na posição 360:0. O resultado está no nó [basis1], onde o nó [inScale] será sobreposto na posição 0:0. E o resultado será salvo no arquivo "out.mp4".

Exemplo 2: Colocar um vídeo em cima do outro .

Da mesma forma que o exemplo 1, porém com algumas modificações.

 $ ffmpeg -i a.mp4 -vf "scale=720:240 [inScale]; \
   color=c=black@1.0:s=720x480:r=29.75:d=9.0 [bg];\
   movie=b.mp4, scale=720:240 [vid2]; \
   [bg] [vid2] overlay=0:240 [basis1]; \
   [basis1] [inScale] overlay=0:0" out.mp4

A diferença está ao reescalar os vídeos "a.mp4" e "b.mp4", e na posição de sopreposição do segundo vídeo.

Exemplo 3: Dividir a tela para quatro vídeos.

Agora assuma que temos 4 vídeos, "a.mp4", "b.mp4", "c.mp4" e "d.mp4", com a mesma resolução 720x480 pixels. E desejamos colocá-los em duas linhas e duas colunas em um único vídeo "out.mp4" de 720x480 pixels. Pode-se usar o seguinte comando:

 $ ffmpeg -i a.mp4  -vf "scale=360:240 [inScale]; \
   color=c=black@1.0:s=720x480:r=29.75:d=9.0 [bg];\
   movie=b.mp4, scale=360:240 [vid2]; \
   movie=c.mp4, scale=360:240 [vid3]; \
   movie=d.mp4, scale=360:240 [vid4]; \
   [bg] [vid2] overlay=360:0 [basis1]; \
   [basis1] [vid3] overlay=0:240 [basis2]; \
   [basis2] [vid4] overlay=360:240 [basis3]; \
   [basis3] [inScale] overlay=0:0" out.mp4

O princípio é o mesmo dos exemplos anteriores, só que desta vez com mais dois blocos de sobreposição. Neste exemplo não ocorre distorção nas imagens (mantem a proporção do aspecto). A seguir tem o vídeo resultante do exemplo 3:


Como pode-se observar, existe uma infinidade de variações que pode ser feita com esses filtros do ffmpeg, basta usar a imaginação. ;) Espero ter ajudado.


Fontes: