Comment remplacer un flux audio dans un fichier vidéo par plusieurs flux audio?

19

Je veux remplacer le deuxième flux audio (0: 2) dans un fichier vidéo qui a deux flux audio et lui donner une étiquette si possible. Comment pourrais-je m'y prendre? Toutes les commandes ffmpeg que j'ai trouvées ne me permettent pas de conserver le deuxième flux audio.

Anonyme
la source

Réponses:

22

Utilisez l' -mapoption pour choisir vos flux. La sélection de flux par défaut ne choisira qu'un seul de chaque type de flux, c'est pourquoi -mapil faut l'utiliser.

Remplacer le deuxième flux audio

entrez la description de l'image ici

ffmpeg -i video.mkv -i audio.mp3 -map 0:v -map 0:a:0 -map 1:a \
-metadata:s:a:0 language=eng -metadata:s:a:1 language=sme -codec copy \
-shortest output.mkv
  • 0:v- Le 0fait référence à la première entrée qui est video.mkv. Le vmoyen "sélectionner le type de flux vidéo".

  • 0:a:0- Le 0fait référence à la première entrée qui est video.mkv. Le amoyen "sélectionner le type de flux audio". Le dernier 0fait référence au premier flux audio de cette entrée. Si seulement 0:aest utilisé, tous les flux vidéo seront mappés.

  • 1:a- Le 1fait référence à la deuxième entrée qui est audio.mp3. Le amoyen "sélectionner le type de flux audio".

  • -codec copysera copie flux (re-MUX) au lieu de coder. Si vous avez besoin d'un codec audio spécifique, vous devez spécifier -c:v copy(pour conserver la vidéo) puis, par exemple, -c:a libmp3lamepour ré-encoder le flux audio en MP3.

  • -shortest mettra fin à la sortie lorsque l'entrée la plus courte se terminera.

Combinez deux flux audio en un seul

entrez la description de l'image ici

ffmpeg -i vid.mkv -i aud.mp3 -filter_complex "[0:a][1:a]amerge=inputs=2[a]" \
-map 0:v -map "[a]" -c:v copy -c:a aac -strict experimental -b:a 192k -ac 2 \
-shortest out.mp4
  • Le filtrage nécessite un ré-encodage, et le amergefiltre est utilisé ici, donc le son ne peut pas être copié en flux dans cet exemple.
llogan
la source
ne fonctionnait pas du tout pour moi.
Rudolf Olah
@omouse "n'a pas fonctionné" est difficile à fournir. Vous devez utiliser un lien pastebin pour afficher votre commande et la sortie complète de la console.
llogan
Mon problème est le -codec copy, mais j'ai corrigé cela (version différente de ffmpeg), l'autre problème que j'avais avec le -map, il se plaignait du mauvais nombre de flux.
Rudolf Olah
1
Je viens de l'utiliser -map 0:v -map 1:a. Je suppose que cela signifie prendre la vidéo du premier fichier (video.mkv) puis prendre l'audio du deuxième fichier (audio.mp4) pour créer le fichier output.mkv ... Je ne sais pas à quoi cela -map 0:a:0sert. Je l'ai exclu et j'obtiens les résultats que je voulais.
Dim
2
@ aaronk6 La question d'origine demandait un moyen de mapper plusieurs flux audio à la sortie. L'exemple prend le premier flux audio de la première entrée et le ou les flux audio de la deuxième entrée et les mappe à la sortie. Il semble que certains supposent que l'exemple crée une sortie avec un seul flux audio et sont ensuite confus.
llogan