2017-10-03 7 views
0

Dernièrement, j'ai dû travailler un peu avec FFMPEG, et parfois j'ai eu du mal à comprendre quelles commandes/filtres je devais utiliser pour atteindre mes objectifs, ce poste ne sert qu'à partager les connaissances J'ai acquis dans le processus, en particulier dans le processus de manipulation d'un fichier audio et de l'insérer sur une vidéo. J'ai eu besoin de remplacer l'audio d'une vidéo avec un nouveau fichier audio, à un emplacement spécifique, et avec une durée spécifique, de préférence avoir un fondu sur l'audio quand il s'est terminé, ci-dessous est la solution à mon problème et son explication.Insertion d'audio découpé dans une vidéo avec FFMPEG

Je dois aussi mentionner, une partie des connaissances requises pour cette acquisition a été en étudiant la réponse fournie par rajib dans ce post, si grand merci à lui aswell!

Répondre

1

Ceci est la commande complète, à condition d'un fichier vidéo d'entrée, du nom vinput.mp4, et un fichier audio, nommé ainput.wav:

ffmpeg -y -i vinput.mp4 -i ainput.wav -filter_complex "\ 
[1:a]aloop=-1:2e+09[aloop];\ 
[aloop]aformat=channel_layouts=mono,atrim=end=2[atrim];\ 
[atrim]adelay=2000[afinal];\ 
[afinal]afade=t=out:st=3.5:d=0.5[afinal]" \ 
-shortest -map "[afinal]" -map 0:v output.mp4 

est Ci-dessous l'explication de chaque étape:

[1:a]aloop=-1:2e+09[aloop] 

boucle mon audio un nombre infini de fois (-1), et répéter le nombre maximum de cadres possibles (2e + 09) (je n'ai pas trouvé un moyen t dire la commande de ju st répéter l'audio en pleine ...


[aloop]aformat=channel_layouts=mono,atrim=end=2[atrim] 

Cela prend l'audio en boucle de l'instruction précédente (aLoop) et les garnitures principalement pour durer seulement 2 secondes.


[atrim]adelay=2000[afinal] 

Cela retardera le début de l'audio en 2000 millisecondes (2 secondes), ce qui en fait commencer à jouer à la deuxième seconde de la vidéo.


[afinal]afade=t=out:st=3.5:d=0.5[afinal] 

Cela va disparaître notre audio, à partir du fondu le 4 secondes de la vidéo, et de faire la fadeout dernière pendant 0,5 seconde, meanind le son disparaîtra de la deuxième 3,5 à 4.


-shortest 

Comme nous avons un flux audio qui est répété indéfiniment, nous devons dire à ffmpeg quand arrêter l'encodage, ceci est fait par le tag, qui dit à ffmpeg que nous attendons que le résultat final dure aussi longtemps que l'entrée la plus courte reçu (dans le cas, l'entrée vidéo).


-map "[afinal]" -map 0:v 

Comme Samuel Williams gentiment indiqué dans his answer, cette option indique ffmpeg quels flux nous voulons copier sur la sortie générée, dans ce cas, nous voulons avoir à la fois l'audio final (final) et le flux vidéo source (0: v).

0

Voir https://stackoverflow.com/a/12943003/6917520

L'option -map indique ffmpeg quels flux que vous voulez. Pour copier la vidéo à partir input_0.mp4 et audio de input_1.mp4:

$ ffmpeg -i input_0.mp4 -i input_1.mp4 -c copy -map 0:0 -map 1:1 -shortest out.mp4

+0

Merci Samuel, oublié d'expliquer cette partie! Merci de partager :) –

+0

Devrais-je ajouter ceci à la réponse originale pour compiler toutes les informations au même endroit? –

+0

Bien sûr! Assurez-vous de me créditer, et reliez ma réponse. –