Je peux joindre avec succès plusieurs fichiers à l'aide de la commande suivante:
ffmpeg -f concat -i input.txt -codec copy output.mp4
Le seul problème avec cette commande est que vous devez lire les chemins de fichiers à partir du fichier texte appelé input.txt avec le contenu suivant:
file 'C:\Users\fabio\Downloads\Super\Sharks\01.mp4'
file 'C:\Users\fabio\Downloads\Super\Sharks\02.mp4'
file 'C:\Users\fabio\Downloads\Super\Sharks\03.mp4'
Existe-t-il un moyen d'atteindre le même objectif sans avoir à lire les chemins de fichiers à partir d'un fichier? J'ai essayé ce qui suit sans succès:
ffmpeg -f concat -i file "C:\a\b\01.mp4" file "C:\a\b\02.mp4" -codec copy output.mp4
ffmpeg -f concat -i "C:\a\b\01.mp4" "C:\a\b\02.mp4" -codec copy output.mp4
Dois-je utiliser une commande différente?
Comme mentionné dans les commentaires, Stack Overflow contient une excellente description des options de concaténation disponibles, ainsi qu'une discussion sur la méthode à utiliser en fonction des types de fichiers que vous utilisez:
Comment concaténer deux fichiers MP4 en utilisant FFmpeg?
Vous devriez pouvoir utiliser la méthode concat protocol pour combiner les fichiers:
ffmpeg -i "concat:input1.mp4|input2.mp4|input3.mp4" -c copy output.mp4
De plus, le manuel de FFmpeg décrit une méthode spécifique aux fichiers MP4 afin de les concaténer sans perte, mais nécessite la création de fichiers temporaires (ou de canaux nommés):
ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts
ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts
ffmpeg -i "concat:intermediate1.ts|intermediate2.ts" -c copy -bsf:a aac_adtstoasc output.mp4
Non, il semble n'y avoir aucun moyen d'utiliser le démultiplexeur ffmpeg concat sur une seule ligne de commande sans aucun piratage. Vous devez créer le fichier texte d'entrée avec la liste des fichiers. Je pensais que c'était étrange moi-même, peut-être que quelqu'un ajouterait cela aussi à FFMpeg à une date ultérieure.
La réponse acceptée à cette question utilise le protocole de concat, pas le démultiplicateur de concat, comme demandé par l'OP.
Vous pouvez remplacer fichier par liste en affichant liste à stdout
et en lisant la liste à partir de stdin
par ffmpeg:
(echo file 'a.mp4' & echo file 'b.mp4') | ffmpeg -protocol_whitelist file,pipe -f concat -safe 0 -i pipe: -vcodec copy -acodec copy "result.mp4"