Usando trim
e concat
- arquivos de origem com diferentes codecs
Para isso, verifique se seus arquivos individuais têm a mesma resolução e, idealmente, a mesma taxa de quadros e subamostragem de croma, etc. Isso evitará erros ou falhas durante a concatenação.
Você pode fazer tudo de uma só vez sem dividir o arquivo, usando os filtros trim
e concat
:
ffmpeg -i edv_g24.mp4 -i short-video.mp4 -filter_complex "\
[0:v]trim=0:10,setpts=PTS-STARTPTS[v0]; \
[1:v]trim=0:5,setpts=PTS-STARTPTS[v1]; \
[0:v]trim=15:30,setpts=PTS-STARTPTS[v2]; \
[v0][v1][v2]concat=n=3:v=1:a=0[out]" \
-map "[out]" output.mp4
Aqui, trim
é usado para especificar as partes individuais dos fluxos de vídeo de entrada ( 0:v
, 1:v
) que você deseja concatenar mais tarde. Estas peças são nomeados v0
através de v2
. (O setpts
filtro redefine os carimbos de data e hora dessas partes individuais para 0, o que é necessário para a concatenação). Mais tarde, concatenamos as três partes.
Se você deseja cortar de um determinado registro de data e hora para o final, use em trim=start=15
vez de especificar o intervalo.
Se seus arquivos tiverem áudio, você deverá aparar esses fluxos separadamente:
ffmpeg -i edv_g24_2.mp4 -i short-video.mp4 -filter_complex "\
[0:v]trim=0:10,setpts=PTS-STARTPTS[v0]; \
[0:a]atrim=0:10,asetpts=PTS-STARTPTS[a0]; \
[1:v]trim=0:5,setpts=PTS-STARTPTS[v1]; \
[1:a]atrim=0:5,asetpts=PTS-STARTPTS[v1]; \
[0:v]trim=15:30,setpts=PTS-STARTPTS[v2]; \
[0:a]atrim=15:30,asetpts=PTS-STARTPTS[a2]; \
[v0][a0][v1][a1][v2][a2]concat=n=3:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" output.mp4
Observe que vídeo e áudio serão recodificados neste caso - certifique-se de especificar metas de qualidade de saída apropriadas (por exemplo, -crf
para x264, x265 ou libvpx-vp9). Você pode ler mais sobre isso no Wiki do FFmpeg, por exemplo, para VP9 ou H.264 .
Usando segmentos individuais
Se você deseja dividir os clipes e montá-los posteriormente:
ffmpeg -i edv_g24.mp4 -ss 0 -to 10 -c copy part1.mp4
ffmpeg -i edv_g24.mp4 -ss 10 -to 15 -c copy part2.mp4
ffmpeg -i edv_g24.mp4 -ss 15 -c copy part3.mp4
ffmpeg -i part1.mp4 -i short-video.mp4 -i part3.mp4 -filter_complex \
"[0:v][1:v][2:v]concat=n=3:v=1:a=0[outv]" \
-map "[outv]" -t 30 output.mp4
Se os arquivos tiverem áudio, use a mesma abordagem acima:
ffmpeg -i part1.mp4 -i short-video.mp4 -i part3.mp4 -filter_complex \
"[0:v][0:a][1:v][1:a][2:v][2:a]concat=n=3:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" -t 30 output.mp4
Isso irá recodificar novamente o fluxo de vídeo. É um pouco mais direto, mas, caso contrário, deve ser equivalente ao método acima.
Usando o concat
desmuxer
Em princípio, você também pode tentar concatenar os fluxos de bits sem recodificá-los, usando o desmuxador concat. Crie um arquivo chamado concat.txt
e adicione as seguintes entradas (correspondentes aos videoclipes criados acima):
file 'part1.mp4'
file 'short-video.mp4'
file 'part3.mp4'
Em seguida, concatene esses arquivos individuais:
ffmpeg -f concat -i concat.txt -c copy output.avi
No entanto, isso exige que seus clipes tenham o mesmo codec, resolução, taxa de quadros etc. - para que não funcione com todos os tipos de fontes heterogêneas.
Usando concat
protocolo
O tipo acima de concatenação no nível de arquivo também pode ser alcançado usando o concat
protocolo, com o mesmo tipo de restrições acima (o mesmo codec, resolução etc.):
ffmpeg -i "concat:part1.avi|part2.avi|part3.avi" -c copy output.mp4
Para mais informações sobre concatenação, leia a respectiva página Wiki do FFmpeg .