445 votes

Comment puis-je extraire l'audio de la vidéo avec ffmpeg ?

J'ai essayé la commande suivante pour extraire l'audio de la vidéo :

ffmpeg -i Sample.avi -vn -ar 44100 -ac 2 -ab 192k -f mp3 Sample.mp3

mais j'obtiens la sortie suivante :

libavutil     50.15. 1 / 50.15. 1
libavcodec    52.72. 2 / 52.72. 2
libavformat   52.64. 2 / 52.64. 2
libavdevice   52. 2. 0 / 52. 2. 0
libavfilter    1.19. 0 /  1.19. 0
libswscale     0.11. 0 /  0.11. 0
libpostproc   51. 2. 0 / 51. 2. 0
SamplE.avi: Invalid data found when processing input

Est-ce que quelqu'un peut aider, s'il vous plaît?

636voto

Paul Irish Points 17507

Pour extraire le flux audio sans ré-encoder :

ffmpeg -i input-video.avi -vn -acodec copy output-audio.aac
  • -vn signifie pas de vidéo.
  • -acodec copy indique d'utiliser le même flux audio déjà présent.

Lire la sortie pour vérifier le codec utilisé et définir la bonne extension de fichier.

93 votes

Et au lieu d'exécuter ffmpeg une première fois juste pour vérifier quel flux audio il est, utilisez ffprobe input-video.avi

30 votes

Si vous extrayez uniquement l'audio d'un flux vidéo, la durée de l'audio peut être plus courte que la durée de la vidéo. Pour éviter que cela se produise, extrayez à la fois l'audio ET la vidéo avec le même appel à ffmpeg, par exemple "ffmpeg -i vid.avi -map 0:a audio.wav -map 0:v onlyvideo.avi".

3 votes

Ce serait génial d'élargir cette réponse avec une commande qui encapsule également l'AAC brut dans un conteneur M4A.

261voto

Jeremy Thompson Points 14428

Pour encoder un audio MP3 ou MP4 de haute qualité à partir d'un fichier vidéo (par exemple AVI, MP4, MOV, etc) ou d'un fichier audio (par exemple WAV), je trouve qu'il est préférable d'utiliser -q:a 0 pour le débit binaire variable et il est bon de spécifier -map a pour exclure la vidéo/les sous-titres et ne récupérer que l'audio:

ffmpeg -i sample.avi -q:a 0 -map a sample.mp3

Si vous voulez extraire une partie de l'audio d'une vidéo utilisez l'option -ss pour spécifier l'heure de début et l'option -t pour spécifier la durée de l'encodage, par exemple à partir de 3 minutes et 5 secondes pour 45 secondes:

ffmpeg -i sample.avi -ss 00:03:05 -t 00:00:45.0 -q:a 0 -map a sample.mp3
  • Les heures de début et fin doivent être au format HH:MM:SS.xxx ou en secondes.

  • Si vous ne spécifiez pas l'option -t cela ira jusqu'à la fin.

  • Vous pouvez utiliser l'option -to à la place de l'option -t, si vous voulez spécifier la portée, par exemple pour 45 secondes: 00:03:05 + 45 = 00:03:50

Exemple de fonctionnement:

  1. Téléchargez ffmpeg
  2. Ouvrez une Invite de Commandes (Démarrer > Exécuter > CMD) ou sur un Mac/Linux ouvrez un Terminal
  3. cd (commande de changement de répertoire) vers le répertoire avec le fichier ffmeg.exe, comme indiqué.
  4. Exécutez votre commande et attendez le fichier de sortie (ou résolvez les erreurs éventuelles)

Windows enter image description here

Mac/Linux enter image description here enter image description here

7 votes

Voici un guide pour les valeurs -q:a : trac.ffmpeg.org/wiki/Encode/MP3 Zero est le paramètre VBR de plus haute qualité, ce qui entraîne généralement des débits moyens dans la partie supérieure de la plage CBR normale (où 320 kbit/s est le maximum, probablement un peu au-delà du point où la compression sans perte devient plus appropriée).

4 votes

Et que fait -map a ?

2 votes

Attention: ceci re-code l'audio avec une compression avec perte, ce qui dégradera légèrement la qualité. Si l'original est déjà compressé, vous dégraderez la qualité deux fois, ce qui peut être ou non perceptible.

60voto

LordNeckbeard Points 9321

Extraire tous les pistes audio / flux

Cela met tout l'audio dans un seul fichier :

ffmpeg -i input.mov -map 0:a -c copy output.mov
  • -map 0:a sélectionne toutes les pistes audio uniquement. La vidéo et les sous-titres seront exclus.
  • -c copy active le mode de copie de flux. Cela copie l'audio sans le ré-encoder. Retirez -c copy si vous voulez que l'audio soit ré-encodé.
  • Choisissez un format de sortie qui prend en charge votre format audio. Voir comparaison des formats de conteneur vidéo.

Extraire une piste audio / flux spécifique

Exemple pour extraire le flux audio #4 :

ffmpeg -i input.mkv -map 0:a:3 -c copy output.m4a
  • -map 0:a:3 sélectionne seulement la piste audio #4 (ffmpeg commence à compter à partir de 0).
  • -c copy active le mode de copie de flux. Cela copie l'audio sans le ré-encoder. Retirez -c copy si vous voulez que l'audio soit ré-encodé.
  • Choisissez un format de sortie qui prend en charge votre format audio. Voir comparaison des formats de conteneur vidéo.

Extraire et ré-encoder l'audio / changer de format

Similaire aux exemples précédents, mais sans -c copy. Divers exemples :

ffmpeg -i input.mp4 -map 0:a output.mp3
ffmpeg -i input.mkv -map 0:a output.m4a
ffmpeg -i input.avi -map 0:a -c:a aac output.mka
ffmpeg -i input.mp4 output.wav

Extraire toutes les pistes audio individuellement

Cet exemple d'entrée comporte 4 pistes audio. Chaque piste audio sera produite en tant que fichiers individuels.

ffmpeg -i input.mov -map 0:a:0 output0.wav -map 0:a:1 output1.wav -map 0:a:2 output2.wav -map 0:a:3 output3.wav

Ajoutez éventuellement -c copy avant chaque nom de fichier de sortie pour activer le mode de copie de flux.


Extraire un certain canal

Utilisez le filtre channelsplit. Exemple pour obtenir le canal de droite avant (FR) à partir d'une entrée stéréo :

ffmpeg -i stereo.wav -filter_complex "[0:a]channelsplit=channel_layout=stereo:channels=FR[right]" -map "[right]" front_right.wav
  • channel_layout est la disposition des canaux de l'entrée. Elle n'est pas détectée automatiquement donc vous devez fournir le nom de la disposition.
  • channels liste le(s) canal(aux) que vous voulez extraire.
  • Voir ffmpeg -layouts pour les noms de disposition de canal audio (pour channel_layout) et les noms de canal (pour channels).
  • Il n'est pas possible d'utiliser le mode de copie de flux (-c copy) lors du filtrage, donc l'audio doit être ré-encodé.
  • Voir FFmpeg Wiki: Manipulation des canaux audio pour plus d'exemples.

Quelle est la différence entre -map et -vn ?

ffmpeg a un comportement par défaut de sélection des flux qui sélectionnera 1 flux par type de flux (1 vidéo, 1 audio, 1 sous-titre, 1 donnée).

-vn est une option ancienne et obsolète. Elle exclut la vidéo du comportement par défaut de sélection de flux. Donc l'audio, les sous-titres et les données sont toujours automatiquement sélectionnés à moins d'être indiqués de ne pas l'être avec -an, -sn, ou -dn.

-map est plus compliqué mais plus flexible et utile. -map désactive le comportement par défaut de sélection des flux et ffmpeg n'inclura que ce que vous lui indiquez avec l'option -map. -map peut aussi être utilisé pour exclure certains flux ou types de flux. Par exemple, -map 0 -map -0:v inclurait tous les flux sauf toutes les vidéos.

Voir FFmpeg Wiki: Map pour plus d'exemples.


Erreurs

Flux audio invalide. Exactement un flux audio MP3 est requis.

MP3 ne prend en charge qu'un seul flux audio. L'erreur signifie que vous essayez de mettre plus d'un flux audio en MP3. Cela peut aussi signifier que vous essayez de mettre un audio non MP3 en MP3.

Les fichiers WAVE ont exactement un seul flux

Similaire au cas précédent.

Impossible de trouver une balise pour le codec dans le flux #0, codec actuellement non pris en charge dans le conteneurl

Vous essayez de mettre un format audio dans une sortie qui ne le prend pas en charge, comme PCM (WAV) en MP4.

Retirez -c copy, choisissez un format de sortie différent (changez l'extension du nom de fichier), ou choisissez manuellement l'encodeur (tel que -c:a aac).

Voir comparaison des formats de conteneurs vidéo.

Impossible d'écrire l'en-tête pour le fichier de sortie #0 (paramètres de codec incorrects ?) : Argument invalide

C'est une erreur générique inutile. L'erreur réelle et informative devrait précéder immédiatement ce message d'erreur générique.

27voto

Zimba Points 156

Il semble que vous extrayiez l'audio d'un fichier vidéo et que vous le mixiez en un canal stéréo.
Pour simplement extraire l'audio (sans ré-encodage) :

ffmpeg -i in.mp4 -vn -c:a copy out.m4a

Pour extraire l'audio & mixer en stéréo (sans ré-encodage) :

ffmpeg -i in.mp4 -vn -c:a copy -ac 2 out.m4a

Pour générer un fichier mp3, vous devrez ré-encoder l'audio :

ffmpeg -i in.mp4 -vn -ac 2 out.mp3

-c (sélectionner les codecs) & -map (sélectionner les flux) options :

-c:a -> sélectionne le meilleur audio pris en charge (transcodé)
-c:a copy -> meilleur audio pris en charge (copié)
-map 0:a -> tout l'audio du 1er fichier d'entrée (transcodé)
-map 0:0 -> 1er flux du 1er fichier d'entrée (transcodé)
-map 1:a:0 -> 1er flux audio du 2ème fichier d'entrée (transcodé)
-map 1:a:1 -c:a copy -> 2ème flux audio du 2ème fichier d'entrée (copié)

3 votes

Vous ne pouvez pas effectuer un downmix (ou apporter toute autre altération) sans ré-encoder.

0 votes

Cela extrait juste la première piste audio. Comment pourrais-je extraire la 2ème? (Ou toutes, vers des fichiers séparés?)

12voto

Álvaro Points 674

La ligne de commande est correcte et fonctionne sur un fichier vidéo valide. Assurez-vous d'avoir installé la bibliothèque correcte pour travailler avec les fichiers mp3, installez lame ou essayez avec un autre codec audio.

Normalement

ffmpeg -formats

ou

ffmpeg -codecs

devrait vous donner suffisamment d'informations pour en savoir plus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X