web-dev-qa-db-fra.com

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

Je souhaite remplacer le deuxième flux audio (0: 2) dans un fichier vidéo comportant deux flux audio et lui attribuer 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.

18
Anonymous

Utilisez l'option -map 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 -map doit être utilisé.

Remplacer le deuxième flux audio

enter image description here

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 0 fait référence à la première entrée qui est video.mkv. La v signifie "sélectionner le type de flux vidéo".

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

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

  • -codec copy va transmettre la copie (re-mux) au lieu de la 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 libmp3lame pour réencoder le flux audio au format MP3.

  • -shortest mettra fin à la sortie lorsque la plus courte des entrées sera terminée.

Combinez deux flux audio en un seul

enter image description here

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 recodage, et le filtre amerge est utilisé ici. Par conséquent, l'audio ne peut pas être copié en flux dans cet exemple.
21
llogan