FFmpeg ajoute un fond audio à la vidéo mais ne coupe pas complètement le son original


7

La fusion est en cours, mais je ne veux pas supprimer l'audio d'origine de la vidéo. Je veux superposer l'audio en arrière-plan.

Y a-t-il un moyen d'obtenir ce comportement? J'utilise cette commande pour fusionner l'audio dans une vidéo:

$ ffmpeg -i adele.mp3 -i Ruby\ on\ Rails\ 101-\ What\ is\ Ruby\ on\ Rails_.mp4 -c:v libx264 -c copy -aspect 16:9 -r 30 test.mp4
ffmpeg version N-60332-ga0d5204 Copyright (c) 2000-2014 the FFmpeg developers
  built on Feb  4 2014 21:31:51 with Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
  configuration: --prefix=/usr/local --enable-gpl --enable-nonfree --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid
  libavutil      52. 63.100 / 52. 63.100
  libavcodec     55. 49.101 / 55. 49.101
  libavformat    55. 29.101 / 55. 29.101
  libavdevice    55.  7.100 / 55.  7.100
  libavfilter     4.  1.102 /  4.  1.102
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 17.104 /  0. 17.104
  libpostproc    52.  3.100 / 52.  3.100
Input #0, mp3, from 'adele.mp3':
  Metadata:
    title           : Chasing Pavements
    artist          : Adele
    track           : 3
    album           : 19 (Deluxe Edition)
    date            : 2008
  Duration: 00:03:30.55, start: 0.025056, bitrate: 160 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 159 kb/s
    Stream #0:1: Video: mjpeg, yuvj420p(pc), 600x600 [SAR 72:72 DAR 1:1], 90k tbr, 90k tbn, 90k tbc
    Metadata:
      title           : 
      comment         : Other
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from 'Ruby on Rails 101- What is Ruby on Rails_.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2013-12-21 07:56:20
  Duration: 00:05:42.40, start: 0.000000, bitrate: 1214 kb/s
    Stream #1:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 1020 kb/s, 30 fps, 30 tbr, 60 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #1:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 191 kb/s (default)
    Metadata:
      creation_time   : 2013-12-21 07:56:23
      handler_name    : IsoMedia File Produced by Google, 5-11-2011
Overriding aspect ratio with stream copy may produce invalid files
Output #0, mp4, to 'test.mp4':
  Metadata:
    title           : Chasing Pavements
    artist          : Adele
    track           : 3
    album           : 19 (Deluxe Edition)
    date            : 2008
    encoder         : Lavf55.29.101
    Stream #0:0(und): Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 1020 kb/s, 30 fps, 15360 tbn, 30 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1: Audio: mp3 (i[0][0][0] / 0x0069), 44100 Hz, stereo, 159 kb/s
Stream mapping:
  Stream #1:0 -> #0:0 (copy)
  Stream #0:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=10272 fps=2793 q=-1.0 Lsize=   46908kB time=00:05:42.40 bitrate=1122.3kbits/s    
video:42642kB audio:4102kB subtitle:0 data:0 global headers:0kB muxing overhead 0.351255

Réponses:


4

Vous pouvez utiliser le amerge et pan filtres audio:

ffmpeg -i audio.mp3 -i video.mp4 -filter_complex \
"[0:a][1:a]amerge,pan=stereo:c0<c0+c2:c1<c1+c3[out]" \
-map 1:v -map "[out]" -c:v copy -c:a libfdk_aac -shortest output.mp4

Cela prendra le flux audio de la première entrée ( audio.mp3 ) et le flux audio de la deuxième entrée ( video.mp4 ). amerge va les combiner dans un flux de 4 canaux, puis pan combinera les 4 canaux en un flux stéréo. L'étiquette du lien de sortie s'appelle [out] (vous pouvez utiliser presque n'importe quel nom arbitraire).

ensuite -map 1:v sélectionne la vidéo de la deuxième entrée en tant que source vidéo pour le fichier de sortie, et -map "[out]" sélectionne l'audio de la filtre graphique comme source audio pour le fichier de sortie.

La vidéo est flux copié avec -c:v copydonc, il n'est pas ré-encodé. Les filtres nécessitent un ré-encodage, donc -c:a libfdk_aac est utilisé dans cet exemple pour ré-encoder en audio AAC.

le -shortest L'option mettra fin au fichier de sortie chaque fois que l'entrée la plus courte se terminera, ce qui est utile si une entrée est plus courte que l'autre.


Merci @LordNeckbeard, ils ont fusionné comme prévu, mais je suis curieux de savoir si un avertissement ou une notification se trouve à la fin de la sortie de la console. Voir: pastebin.com/sDAhyu9F Ça dit Error while decoding stream #1:1: Cannot allocate memory.65 bitrate=1146.5kbits/s Last message repeated 37 times et aussi ce journal: Input channel layouts overlap: output layout will be determined by the number of distinct input channels et 2 autres journaux au-dessus.
emfolorncynosure

-1

-i 1.mp3 -i res.mp4 -filter_complex [0: a] [1: a] s'affiche, panoramique = stéréo: c0


1
Peut-être expliquer cela un peu?
xenoid
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.