Utilisation de trim
et concat
- fichiers source avec différents codecs
Pour cela, assurez-vous que vos fichiers individuels ont la même résolution, et idéalement le même sous-échantillonnage de fréquence d'images et de chrominance, etc. Cela évitera des erreurs ou des problèmes pendant la concaténation.
Vous pouvez tout faire en une seule fois sans diviser le fichier, en utilisant les filtres trim
et 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
Ici, trim
est utilisé pour spécifier les parties individuelles des flux vidéo d'entrée ( 0:v
, 1:v
) que vous souhaitez ultérieurement concaténer. Ces pièces sont nommées v0
par v2
. (Le setpts
filtre réinitialise les horodatages de ces parties individuelles à 0, ce qui est requis pour la concaténation). Plus tard, nous concaténons les trois parties.
Si vous souhaitez découper à partir d'un certain horodatage jusqu'à la fin, utilisez trim=start=15
au lieu de spécifier la plage.
Si vos fichiers ont du son, vous devez couper ces flux séparément:
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
Notez que la vidéo et l'audio seront ré-encodés dans ce cas - assurez-vous de spécifier des cibles de qualité de sortie appropriées (par exemple -crf
pour x264, x265 ou libvpx-vp9). Vous pouvez en savoir plus à ce sujet sur le Wiki FFmpeg, par exemple pour VP9 ou H.264 .
Utilisation de segments individuels
Si vous souhaitez diviser les clips et les réassembler ultérieurement:
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
Si les fichiers ont du son, utilisez la même approche que ci-dessus:
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
Cela réencodera à nouveau le flux vidéo. C'est un peu plus simple, mais sinon, cela devrait être équivalent à la méthode ci-dessus.
Utilisation de concat
demuxer
Vous pouvez en principe également essayer de concaténer les flux binaires sans les recoder, en utilisant le démultiplexeur concat. Créez un fichier appelé concat.txt
et ajoutez les entrées suivantes (correspondant aux clips vidéo créés ci-dessus):
file 'part1.mp4'
file 'short-video.mp4'
file 'part3.mp4'
Ensuite, concaténez ces fichiers individuels:
ffmpeg -f concat -i concat.txt -c copy output.avi
Cela nécessite cependant que vos clips aient le même codec, la même résolution, la même fréquence d'images, etc. - donc cela ne fonctionne pas avec toutes sortes de sources hétérogènes.
Utiliser le concat
protocole
Le type de concaténation de niveau fichier ci-dessus peut également être réalisé en utilisant le concat
protocole, avec le même type de contraintes que ci-dessus (même codec, résolution, etc.):
ffmpeg -i "concat:part1.avi|part2.avi|part3.avi" -c copy output.mp4
Pour plus d'informations sur la concaténation, lisez la page Wiki FFmpeg correspondante .