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
emfolorncynosure
la source

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.

llogan
la source
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

YER
la source
1
Peut-être expliquer cela un peu?
xenoid