Criei alguns vídeos de lapso de tempo a partir de fotos, usando este comando:
ffmpeg -i IMG_%03d.JPG -s 1440x1080 -sameq video.MP4
E funcionou muito bem. Agora quero juntar vários desses vídeos de lapso de tempo para fazer um vídeo único e mais longo (todos os vídeos de entrada têm exatamente o mesmo formato). Já tentei usar:
cat video1.MP4 video2.MP4 > stitch.MP4
mas a saída acaba sendo igual a video1.MP4
Não quero transcodificar nem alterar nenhum parâmetro do vídeo, só quero uma costura ponta a ponta, como se esses vídeos estivessem em uma playlist.
Obrigado!
Responder1
Com uma versão recente do ffmpeg, você pode usar o demuxer concat. Crie um arquivo chamado inputs.txt contendo linhas como:
file 'input1.mp4'
file 'input2.mp4'
file 'input3.mp4'
file 'input4.mp4'
Com um shell bash, você pode usar um loop for para criar o arquivo da seguinte forma:
rm inputs.txt
for f in input{1..4}.mp4; do echo "file '$f'" >> inputs.txt; done
Então,
ffmpeg -f concat -i inputs.txt -c copy output.mp4
Como usa -c copy
, isso será completamente sem perdas.
Responder2
A saída não será igual a video1.mp4, mas os cabeçalhos/rodapés do vídeo começarão e terminarão em video1.mp4, para que seu player não entre em video2.mp4. Supondo que os vídeos tenham a mesma taxa de bits/codec, etc.:
cat video1.MP4 video2.MP4 | ffmpeg -y -i - -genpts -vcodec copy -acodec copy stitch.MP4
Tenha em mente que este não é necessariamente o melhor método (seria melhor fazer todos os lapsos de tempo ao mesmo tempo em um vídeo), pois se o codec estiver com perdas você induziráperda de geração.
Responder3
Eu sei que você disse com ffmpeg, mas tive sorte usando o mp4box para simplesmente juntar arquivos. Você pode baixá-lo aqui.
http://gpac.wp.mines-telecom.fr/mp4box/
Aqui está o exemplo da linha de comando:
mp4box -cat <file> -cat <file> dest.mp4