web-dev-qa-db-fra.com

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

J'essaie d'ajouter du son à une vidéo à l'aide de ffmpeg, mais pour une raison quelconque, lorsque je lis le fichier résultant, il ne produit aucun son. J'ai aussi essayé de le faire avec un fichier audio aac, en laissant de côté -acodec copy et en lui donnant un fichier wav.

Voici la sortie complète:

C:\Users\SM-Audio\Desktop>ffmpeg -i PrintingCDs.mp4 -i AudioPrintCDs.mp3 -acodec
 copy -vcodec copy PrintCDs1.mp4
ffmpeg version N-48886-g5ce023b Copyright (c) 2000-2013 the FFmpeg developers
  built on Jan 14 2013 19:16:33 with 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
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'PrintingCDs.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2013-05-01 13:35:52
  Duration: 00:02:35.57, start: 0.000000, bitrate: 585 kb/s
    Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 1024x
768 [SAR 1:1 DAR 4:3], 457 kb/s, 10 fps, 10 tbr, 30k tbn, 30 tbc
    Metadata:
      creation_time   : 2013-05-01 13:35:53
      handler_name    : Mainconcept MP4 Video Media Handler
    Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 22050 Hz, mono, fltp, 126
kb/s
    Metadata:
      creation_time   : 2013-05-01 13:35:53
      handler_name    : Mainconcept MP4 Sound Media Handler
[mp3 @ 003dd6c0] max_analyze_duration 5000000 reached at 5015510 microseconds
Input #1, mp3, from 'AudioPrintCDs.mp3':
  Metadata:
    encoder         : Lavf54.59.107
  Duration: 00:02:36.21, start: 0.000000, bitrate: 64 kb/s
    Stream #1:0: Audio: mp3, 44100 Hz, mono, s16p, 64 kb/s
File 'PrintCDs1.mp4' already exists. Overwrite ? [y/N] y
Output #0, mp4, to 'PrintCDs1.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    encoder         : Lavf54.59.107
    Stream #0:0(eng): Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1024x768 [S
AR 1:1 DAR 4:3], q=2-31, 457 kb/s, 10 fps, 30k tbn, 30k tbc
    Metadata:
      creation_time   : 2013-05-01 13:35:53
      handler_name    : Mainconcept MP4 Video Media Handler
    Stream #0:1(eng): Audio: aac ([64][0][0][0] / 0x0040), 22050 Hz, mono, 126 k
b/s
    Metadata:
      creation_time   : 2013-05-01 13:35:53
      handler_name    : Mainconcept MP4 Sound Media Handler
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame= 1555 fps=0.0 q=-1.0 Lsize=   11133kB time=00:02:35.57 bitrate= 586.2kbits
/s
video:8674kB audio:2408kB subtitle:0 global headers:0kB muxing overhead 0.459569
%
19
Arlen Beiler

Par défaut, FFmpeg ne prend qu'un flux audio et vidéo. Dans votre cas, cela ne provient que 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 mappage d’ordre déterminent quels flux de l’entrée sont mappé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 aide à lever l'ambiguïté. Plus d'informations sur la cartographie peuvent être trouvées sur le FFmpeg Wiki .
  • Si votre flux audio est plus long que le fichier vidéo, ou inversement, vous pouvez utiliser l'option -shortest pour que ffmpeg arrête la conversion lorsque la plus courte des deux se 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 d'un fichier audio WAV à un fichier vidéo existant, il serait préférable de compresser d'abord ce son. 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 ne copions que le flux vidéo (-c:v copy), et réencodons le flux audio avec l'encodeur AAC intégré de ffmpeg (-c:a aac) à 192 kBit/s.

  • Si votre format de sortie ne prend pas en charge un codec particulier (par exemple, lorsque vous ajoutez WAV à MP4, ou AAC à AVI, etc.), un nouveau codage est également requis.
39
slhck

Pour ajouter les fichiers vidéo de différents paramètres de codage, utilisez la commande ci-dessous:

ffmpeg -i Gaslamp_4k_1.mp4 -i Grey.mp4 -filter_complex "[0:v:0] [1:v:0] concat=n=2:v=1 [v]" -map "[v]" output.mp4
0
Ashutosh Singla