Problème de fusion vidéo FFMPEG


2

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.


Avez-vous essayé de jouer le intermediate_all.mpg?

1
Ya mais ça a joué, mais la durée n'est pas correcte
Elby

Cela pourrait être la cause. Avez-vous essayé de concaténer les vidéos avec ffmpeg lui-même?

Comment pouvons-nous concaténer les vidéos avec ffmpeg?
Elby

Dunno. Pourquoi ne pas google ça! :)

Réponses:


3

Une cattelle 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.txtcontenant les éléments suivants:

file '/path/to/input1.flv'
file '/path/to/input2.flv'
file '/path/to/input3.flv'
file '/path/to/input4.flv'

Ensuite, utilisez la commande suivante:

ffmpeg -f concat -i inputs.txt -c copy output.flv

Si cela ne fonctionne pas ou si vous souhaitez combiner des vidéos de différents types, vous pouvez utiliser le

Filtre concat

ffmpeg -i input1.flv -i input2.flv -i input3.flv -i input4.flv \
-filter_complex '[0:0] [0:1] [1:0] [1:1] [2:0] [2:1] [3:0] [3:1] concat=n=4:v=1:a=1 [v] [a]' \
-map '[v]' -map '[a]' -c:v libx264 -crf 22 -preset veryfast -c:a libfdk_aac -vbr 3 -afterburner 1 output.mp4

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.

'[0:0] [0:1] [1:0] [1:1] [2:0] [2:1] [3:0] [3:1] 

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).

concat=n=4:v=1:a=1 [v] [a]'

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.

-map '[v]' -map '[a]'

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 .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.