Je veux concaténer 2 ou plusieurs vidéos, en utilisant FFMPG, mais après avoir rejoint des vidéos, il a un problème de synchronisation audio / vidéo, j'ai utilisé le code suivant pour cela.
ffmpeg -i input1.flv -qscale:v 1 intermediate1.mpg
ffmpeg -i input2.flv -qscale:v 1 intermediate2.mpg
ffmpeg -i input3.flv -qscale:v 1 intermediate3.mpg
ffmpeg -i input4.flv -qscale:v 1 intermediate4.mpg
cat intermediate1.mpg intermediate2.mpg intermediate3.mpg intermediate4.mpg > intermediate_all.mpg
ffmpeg -i intermediate_all.mpg -qscale:v 2 output.avi
La piste audio dans le fichier output.avi précède la piste vidéo.
ffmpeg
ubuntu-12.04
Elby
la source
la source
intermediate_all.mpg
?Réponses:
Une
cat
telle utilisation peut causer des problèmes imprévisibles. Heureusement, il existe deux méthodes très utiles pour concaténer des fichiers avec ffmpeg.concat démultiplexeur
Si toutes vos entrées sont du même type de fichier (mêmes codecs, etc.), vous pouvez utiliser le démultiplexeur concat. C’est probablement la réponse la plus utile à votre question, car elle est compatible avec -c copy (et devrait donc être sans perte, et prendre un temps presque trivial à compléter).
Tout d’abord, créez un fichier appelé
inputs.txt
contenant les éléments suivants:Ensuite, utilisez la commande suivante:
Si cela ne fonctionne pas ou si vous souhaitez combiner des vidéos de différents types, vous pouvez utiliser le
Filtre concat
Cet exemple utilise mes paramètres de codage préférés, changez évidemment la dernière ligne pour utiliser ce que vous voulez.
Je vais séparer la section -filter_complex, pour que ce soit plus facile à suivre.
Ce fragment indique à ffmpeg quels flux envoyer au filtre de concaténation; dans ce cas, les flux 0 et 1 de l’entrée 0 (ffmpeg commence à compter à partir de 0, c’est-à-dire les premier et deuxième flux du premier fichier d’entrée, input1.flv dans cet exemple), et les flux 0 et 1 de chaque entrée jusqu’au quatrième (entrée 3 selon ffmpeg, qui commence à compter à partir de 0).
C'est le filtre concat lui-même. n = 4 indique au filtre qu'il y a quatre fichiers d'entrée; v = 1 lui dit qu'il y aura un flux vidéo; a = 1 lui dit qu'il y aura un flux audio (je sais que j'ai dit que ffmpeg commence à compter à partir de 0, mais apparemment, l'auteur de ce filtre a décidé de le faire à la place).
[v] et [a] sont des noms pour les flux de sortie, permettant au reste de la ligne ffmpeg d'utiliser la sortie du filtre de concaténation. Je pense qu'ils peuvent avoir des noms arbitraires; Le format vidéo et le format audio sont probablement déterminés par leurs positions relatives, mais je ne l'ai pas testé.
Notez que les guillemets simples '' autour de toute la section de filtre sont obligatoires.
Cela indique à ffmpeg d'utiliser les résultats du filtre de concat plutôt que les flux directement à partir des fichiers d'entrée.
Notez que les filtres sont incompatibles avec la copie de flux. vous ne pouvez pas utiliser -c copy avec cette méthode. Je pense également qu'il ne peut pas gérer les sous-titres souples, bien que je ne l'aie pas testé: rien dans la documentation ne l'indique, mais la documentation de ffmpeg est souvent incomplète ou obscurcie, ce qui n'est pas sûr.
Cela peut concaténer des fichiers encodés dans différents formats (j'ai testé avec un MP4 h264 / aac et un WEBM vpx / vorbis qui fonctionnait parfaitement), même s'ils doivent avoir la même taille d'image et la même profondeur audio (et éventuellement d'autres éléments).
Voir aussi ici .
la source