Nas versões mais recente do ffmpeg esta é a nova forma de unir os vídeos onde todos deve ter o mesmo tamanho de tela, mas os codecs de vídeo e áudio podem ser diferente entre os arquivos envolvidos.
Para unir dois vídeos
$ ffmpeg -i sei.mp4 -i aviao.mp4 -filter_complex '[0:0] [0:1] [1:0] [1:1] concat=n=2:v=1:a=1 [a] [v] ' -map '[a]' -map '[v]' -strict -2 unidos.mp4
Para unir três vídeos
$ ffmpeg -i sei.mp4 -i aviao.mp4 -i cenas.mp4 -filter_complex '[0:0] [0:1] [1:0] [1:1] [2:0] [2:1] concat=n=3:v=1:a=1 [a] [v] ' -map '[a]' -map '[v]' -strict -2 unidos3.mp4
Parte da saída final do processo de conversão:
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf55.19.104
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 480x360, q=-1--1, 30k tbn, 29.97 tbc (default)
Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, stereo, fltp, 128 kb/s (default)
Stream mapping:
Stream #0:0 (h264) -> concat:in0:v0
Stream #0:1 (aac) -> concat:in0:a0
Stream #1:0 (h264) -> concat:in1:v0
Stream #1:1 (aac) -> concat:in1:a0
Stream #2:0 (h264) -> concat:in2:v0
Stream #2:1 (aac) -> concat:in2:a0
concat:out:v0 -> Stream #0:0 (libx264)
concat:out:a0 -> Stream #0:1 (aac)
Os arquivos são unidos na ordem especificada e as três linhas em vermelho representa cada um dos vídeos especificados na parte do codec de vídeo e abaixo da mesma o codec de áudio do vídeo correspondente e as duas últimas linhas concat são o codec de vídeo e áudio do arquivo de saída que contém os 3 vídeos unidos.
Onde na linha final de comando a opção -strict -2 é para a parte do codec de áudio aac do formato mp4 pois em algumas versões do ffmpeg o mesmo é experimental, e sem esta opção não funciona para criar no formato mp4 padrão com áudio aac.
Caso deseja ver um log do ffmpeg sob a conversão coloque a opção -report antes do nome do arquivo de saída, onde será criado um arquivo de log no mesmo diretório da execução do comando ffmpeg.
Precedimento realizado com ffmpeg version 2.1.5
Criando um script para facilitar o uso
Para unir dois arquivos coloque a seguinte linha abaixo sendo o nome do script juntar2 com permissão 755 salvo em /usr/local/bin.
ffmpeg -i $1 -i $2 -filter_complex '[0:0] [0:1] [1:0] [1:1] concat=n=2:v=1:a=1 [a] [v] ' -map '[a]' -map '[v]' -strict -2 unidos.mp4
Forma de uso:
$ juntar2 video1 video2
Nota:
Para unir três arquivos você deve criar outro script utilizando a linha de comando do ffmpeg para 3 arquivos neste caso.
Obrigado amigo, sua dica funcionou comigo e me ajudou bastante. Abraço!
ResponderExcluirparabens
ResponderExcluirAqui deu Input link in1:v0 parameters (size 352x640, SAR 0:1) do not match the corresponding output link in0:v0 parameters (640x352, SAR 0:1) mas os dois videos tem a mesma resolucao, 640x352. Alguma sugestao?
ResponderExcluir