Convertir ABCDEFG
a ACDFG
consiste essentiellement à couper trois segments de la vidéo, puis à joindre ces trois segments. Si tous les segments sont coupés à partir de la même vidéo et qu'il n'est pas nécessaire de modifier l'encodage de la vidéo (résolution, débit binaire, fréquence d'images, etc.), le ré-encodage n'est pas nécessaire et dégradera la qualité des formats avec perte. Cependant, sans ré-encodage, les positions de coupe ne seront pas exactes mais les images clés les plus proches des moments spécifiés.
Les exemples ci-dessous supposent que vidfull.mp4
es ABCDEFG
où chaque lettre représente un segment de cinq minutes.
Sans ré-encodage, le processus est presque instantané, mais la coupure doit être faite explicitement, où des fichiers temporaires sont créés, et la jonction peut être faite soit avec le protocole de concaténation (c'est-à-dire la concaténation au niveau du fichier), et le protocole .ts
comme format intermédiaire, qui prend en charge la concaténation au niveau des fichiers :
ffmpeg \
-to 5:0 -i vidfull.mp4 \
-ss 10:0 -to 20:0 -i vidfull.mp4 \
-ss 25:0 -i vidfull.mp4 \
-map 0:v -map 0:a -c copy part1.ts \
-map 1:v -map 1:a -c copy part2.ts \
-map 2:v -map 2:a -c copy part3.ts
ffmpeg -i 'concat:part1.ts|part2.ts|part3.ts' -c copy vidcut.ts
ffmpeg -i vidcut.ts -c copy vidcut.mp4
rm -f part{1..3}.ts vidcut.ts
ou avec le démuxeur de concaténation script :
ffmpeg \
-to 5:0 -i vidfull.mp4 \
-ss 10:0 -to 20:0 -i vidfull.mp4 \
-ss 25:0 -i vidfull.mp4 \
-map 0:v -map 0:a -c copy -avoid_negative_ts make_non_negative part1.mp4 \
-map 1:v -map 1:a -c copy -avoid_negative_ts make_non_negative part2.mp4 \
-map 2:v -map 2:a -c copy -avoid_negative_ts make_non_negative part3.mp4
cat <<- eof > script.txt
ffconcat version 1.0
file '/path to/part1.mp4'
file '/path to/part2.mp4'
file '/path to/part3.mp4'
eof
ffmpeg -f concat -safe 0 -i script.txt -c copy vidcut.mp4
rm -f part{1..3}.mp4 script.txt
Avec le réencodage, le processus est lent, mais le découpage et l'assemblage se font en une seule commande en utilisant la même vidéo comme entrée d'un filtre concat complexe plusieurs fois après avoir cherché à différentes positions :
ffmpeg \
-to 5:0 -i vidfull.mp4 \
-ss 10:0 -to 20:0 -i vidfull.mp4 \
-ss 25:0 -i vidfull.mp4 \
-lavfi concat=n=3:a=1 vidcut.mp4
Il n'est pas nécessaire d'étiqueter les blocs d'entrée ou de sortie du filtre concat puisqu'il n'y a pas d'autre filtre que concat dans la chaîne de filtres pour utiliser un flux spécifique d'un bloc spécifique, aucun flux n'est destiné à être exclu de la sortie, et tous les flux des blocs non étiquetés sont ajoutés au premier fichier de sortie automatiquement (le format de sortie doit supporter tous les types de flux pour éviter une erreur fatale). Et, parmi les options du filtre concat, n
est le nombre de segments d'entrée, et doit être fixé à 3
puisqu'il s'agit 2
par défaut, et a
est le nombre de flux audio de sortie, et doit être fixé à 1
puisqu'il s'agit 0
par défaut.