Como posso costurar 2 arquivos de vídeo usando o ffmpeg?

3

Eu criei alguns vídeos de lapso de tempo 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 criar um único vídeo mais longo (todos os vídeos de entrada têm exatamente o mesmo formato). Eu já tentei usar:

cat video1.MP4 video2.MP4 > stitch.MP4

mas a saída acaba sendo igual a video1.MP4

Eu não quero transcodificar nem alterar nenhum parâmetro do vídeo, apenas quero uma costura de ponta a ponta, como se esses vídeos estivessem em uma lista de reprodução.

Obrigado!

    
por tomm89 04.02.2011 / 01:58

3 respostas

3

Com uma versão recente do ffmpeg, você pode usar o demuxer de 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 ele usa -c copy , isso será completamente sem perdas.

    
por 20.01.2013 / 23:44
1

Eu sei que você disse com o ffmpeg, mas eu tive a sorte de usar o mp4box apenas para costurar arquivos. Você pode baixá-lo aqui.

link

Aqui está o exemplo da linha de comando:

mp4box -cat <file> -cat <file> dest.mp4
    
por 22.01.2013 / 23:06
1

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 torno de video1.mp4, para que o player não entre em video2.mp4. Supondo que os vídeos são o mesmo bitrate / 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 todo o tempo lapsos ao mesmo tempo em um vídeo) como se o codec fosse com perdas você induziria loss de geração .

    
por 04.02.2011 / 02:32