A melhor maneira de fazer isso atualmente é com o demuxer de concat . Primeiro, crie um arquivo chamado inputs.txt
formatado da seguinte forma:
file '/path/to/input1.mp4'
file '/path/to/input2.mp4'
file '/path/to/input3.mp4'
Então, simplesmente execute este comando ffmpeg:
ffmpeg -f concat -i inputs.txt -c copy output.mp4
Veja também concatenação em ffmpeg
FAQ .
Estou mantendo o seguinte aqui para o benefício de qualquer pessoa que use versões mais antigas do ffmpeg.
As versões mais recentes do ffmpeg podem fazer isso: você terá que remontar os arquivos em fluxos de transporte mpeg primeiro (razoavelmente leve ao processador, já que ele está apenas alterando o formato do contêiner):
ffmpeg -i input.mp4 -map 0 -c copy -f mpegts -bsf h264_mp4toannexb middle.ts
Se isso gerar um erro sobre o h264, talvez seja necessário usar:
ffmpeg -i input.mp4 -map 0 -c copy -f mpegts -bsf h264_mp4toannexb middle.ts
Você terá que fazer isso separadamente com cada arquivo de entrada. Para concatenar os arquivos juntos, use:
ffmpeg -i "concat:middle1.ts|middle2.ts|middle3.ts" -c copy output.mp4
Se isso gerar um erro sobre o aac, talvez seja necessário usar
ffmpeg -i "concat:middle1.ts|middle2.ts|middle3.ts" -c copy -absf aac_adtstoasc output.mp4
Se o seu sistema suporta pipes nomeados, você pode fazer isso sem criar arquivos intermediários.
mkfifo temp0 temp1
Você terá que fazer o seguinte em três terminais virtuais separados:
ffmpeg -i input0.mp4 -map 0 -c copy -f mpegts -bsf h264_mp4toannexb -y temp0
ffmpeg -i input1.mp4 -map 0 -c copy -f mpegts -bsf h264_mp4toannexb -y temp1
ffmpeg -f mpegts -i "concat:temp0|temp1" -c copy -absf aac_adtstoasc output.mp4
Se o output.mp4 já existir, o terceiro ffmpeg perguntará se você deseja sobrescrevê-lo, mas ele fará isso após ter acessado os FIFOs , e isso fará com que o primeiro ffmpegs perto. Portanto, certifique-se de escolher um nome não usado para o seu arquivo de saída.
Isso pode não funcionar se seus arquivos de entrada forem diferentes - acredito que as diferenças na taxa de bits sejam aceitáveis, mas o tamanho do quadro, a taxa de quadros, etc., precisam corresponder.