60 votes

Ajouter de l'audio à la vidéo en utilisant FFmpeg

Je cherche à ajouter du son à une vidéo en utilisant FFmpeg, mais pour une raison quelconque, lorsque je lis le fichier résultant, il n'a pas de son. J'ai également essayé de le faire avec un fichier audio aac, ainsi que sans -acodec copie en lui donnant un fichier wav.

Voici la sortie complète:

C:\Users\SM-Audio\Desktop>ffmpeg -i PrintingCDs.mp4 -i AudioPrintCDs.mp3 -acodec
 copie -vcodec copy PrintCDs1.mp4
ffmpeg version N-48886-g5ce023b Copyright (c) 2000-2013 the FFmpeg developers
  construit le 14 janv. 2013 19:16:33 avec gcc 4.7.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
le-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libg
sm --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --e
nable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --e
nable-libspeex --enable-libtheora --enable-libtwolame --enable-libvo-aacenc --en
able-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable
-libxavs --enable-libxvid --enable-zlib --enable-filter=frei0r
  libavutil      52. 14.100 / 52. 14.100
  libavcodec     54. 89.100 / 54. 89.100
  libavformat    54. 59.107 / 54. 59.107
  libavdevice    54.  3.102 / 54.  3.102
  libavfilter     3. 32.100 /  3. 32.100
  libswscale      2.  1.103 /  2.  1.103
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
... (truncated for brevity) ...

105voto

slhck Points 209720

Par défaut, FFmpeg ne prendra qu'un flux audio et un flux vidéo. Dans votre cas, cela provient uniquement du premier fichier.

Vous devez mapper correctement les flux:

ffmpeg -i input.mp4 -i input.mp3 -c copy -map 0:v:0 -map 1:a:0 output.mp4

Quelques notes:

  • Les options de mapping par ordre déterminent quels flux de l'entrée sont appliqués à la sortie.

  • 0:v:0 est le premier flux vidéo du premier fichier et 1:a:0 est le premier flux audio du deuxième fichier. Les v/a ne sont pas strictement nécessaires, mais dans le cas où vos fichiers d'entrée contiennent plusieurs flux, cela permet de les différencier. Plus d'informations sur le mapping peuvent être trouvées sur le Wiki FFmpeg.

  • Si votre flux audio est plus long que le fichier vidéo, ou vice-versa, vous pouvez utiliser l'option -shortest pour que ffmpeg arrête la conversion lorsque le plus court des deux termine.

  • -c copy copie les flux audio et vidéo. Cela signifie que le processus sera rapide et la qualité sera la même. Mais lors de l'ajout, par exemple, d'un audio WAV à un fichier vidéo existant, il serait préférable de compresser cet audio en premier. Par exemple:

    ffmpeg -i input.mp4 -i input.wav -c:v copy -map 0:v:0 -map 1:a:0 -c:a aac -b:a 192k output.mp4

    Ici, nous copions uniquement le flux vidéo (-c:v copy), et ré-encode le flux audio avec l'encodeur AAC intégré à ffmpeg (-c:a aac) à 192 kbit/s.

  • Si votre format de sortie ne prend pas en charge un codec particulier (par exemple, lors de l'ajout de WAV à MP4, ou AAC à AVI, etc.), il est également nécessaire de ré-encoder.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X