FFMPEG results in a silent video when trying to combine video and audio tracks

1.3k views Asked by At

I'm using the following command to combine a video and an audio track.

ffmpeg -y -i /var/www/temp/merged.mp4 -i /var/www/temp/combined.mp3 -strict -2 /var/www/temp/videoExtouiulbjryzxlehjj2.mp4

Edit:

Here is the output from the first command

ffmpeg version 2.5.10-0ubuntu0.15.04.1 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.9.2 (Ubuntu 4.9.2-10ubuntu13)
  configuration: --prefix=/usr --extra-version=0ubuntu0.15.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --shlibdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --enable-shared --disable-stripping --enable-avresample --enable-avisynth --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libshine --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libwavpack --enable-libwebp --enable-libxvid --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzvbi --enable-libzmq --enable-frei0r --enable-libvpx --enable-libx264 --enable-libsoxr --enable-gnutls --enable-openal --enable-libopencv --enable-librtmp --enable-libx265
  libavutil      54. 15.100 / 54. 15.100
  libavcodec     56. 13.100 / 56. 13.100
  libavformat    56. 15.102 / 56. 15.102
  libavdevice    56.  3.100 / 56.  3.100
  libavfilter     5.  2.103 /  5.  2.103
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/var/www/temp/merged.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.15.102
  Duration: 00:02:31.80, start: 0.000000, bitrate: 2384 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 2381 kb/s, 25.43 fps, 29.97 tbr, 11988 tbn, 59.94 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 0 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
Input #1, mp3, from '/var/www/temp/audioTrack.mp3':
  Metadata:
    encoder         : Lavf56.15.102
  Duration: 00:02:08.94, start: 0.011995, bitrate: 128 kb/s
    Stream #1:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s
    Metadata:
      encoder         : Lavf
[libx264 @ 0x1e903a0] using SAR=1/1
[libx264 @ 0x1e903a0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX AVX2 FMA3 LZCNT BMI2
[libx264 @ 0x1e903a0] profile High, level 4.0
[libx264 @ 0x1e903a0] 264 - core 142 r2495 6a301b6 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to '/var/www/temp/videoExtvzxvphotsyfpcbkd.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.15.102
    Stream #0:0(und): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=-1--1, 29.97 fps, 30k tbn, 29.97 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      encoder         : Lavc56.13.100 libx264
    Stream #0:1(und): Audio: mp3 (libmp3lame) (i[0][0][0] / 0x0069), 48000 Hz, stereo, fltp (default)
    Metadata:
      handler_name    : SoundHandler
      encoder         : Lavc56.13.100 libmp3lame
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (aac (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
frame=   31 fps=0.0 q=0.0 size=       0kB time=00:00:01.05 bitrate=   0.4kbits/s dup=1 drop=0frame=   46 fps= 41 q=0.0 size=       0kB time=00:00:01.56 bitrate=   0.2kbits/s dup=1 drop=0frame=   52 fps= 32 q=29.0 size=     149kB time=00:00:01.75 bitrate= 698.4kbits/s dup=1 drop=frame=   64 fps= 28 q=29.0 size=     258kB time=00:00:02.16 bitrate= 977.2kbits/s dup=1 drop=frame=   74 fps= 26 q=29.0 size=     389kB   
video:39673kB audio:211kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.143487%
[libx264 @ 0x1e903a0] frame I:27    Avg QP:18.78  size: 58834
[libx264 @ 0x1e903a0] frame P:2202  Avg QP:23.67  size: 14187
[libx264 @ 0x1e903a0] frame B:2323  Avg QP:25.75  size:  3356
[libx264 @ 0x1e903a0] consecutive B-frames: 24.7% 18.7%  9.0% 47.5%
[libx264 @ 0x1e903a0] mb I  I16..4: 18.8% 74.7%  6.5%
[libx264 @ 0x1e903a0] mb P  I16..4:  2.1%  5.0%  0.3%  P16..4: 22.2%  6.0%  1.9%  0.0%  0.0%    skip:62.5%
[libx264 @ 0x1e903a0] mb B  I16..4:  0.1%  0.3%  0.0%  B16..8: 19.9%  1.0%  0.1%  direct: 0.3%  skip:78.3%  L0:42.3% L1:55.3% BI: 2.4%
[libx264 @ 0x1e903a0] 8x8 transform intra:68.2% inter:86.5%
[libx264 @ 0x1e903a0] coded y,uvDC,uvAC intra: 35.8% 52.3% 4.5% inter: 5.2% 7.4% 0.0%
[libx264 @ 0x1e903a0] i16 v,h,dc,p: 28% 23%  8% 40%
[libx264 @ 0x1e903a0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 27% 20% 22%  3%  6%  6%  7%  5%  4%
[libx264 @ 0x1e903a0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 32% 21% 14%  4%  8%  7%  7%  4%  3%
[libx264 @ 0x1e903a0] i8c dc,h,v,p: 56% 18% 20%  6%
[libx264 @ 0x1e903a0] Weighted P-Frames: Y:0.9% UV:0.2%
[libx264 @ 0x1e903a0] ref P L0: 73.4% 13.0% 10.0%  3.6%  0.0%
[libx264 @ 0x1e903a0] ref B L0: 92.2%  6.7%  1.1%
[libx264 @ 0x1e903a0] ref B L1: 96.6%  3.4%
[libx264 @ 0x1e903a0] kb/s:2139.74

End Edit

I know this should work since the exact line does work for other files. But the result with these is a silent video.

I checked the audio file being used and it seemed fine when played. but I did get a weird warning when creating it. Basically I have 2 audio tracks, one is overlay music and the other is talking. I create the combined audio with this command.

ffmpeg -y -i /var/www/temp/audioTrack.mp3 -i /var/www/temp/musicTrack.mp3 -filter_complex amerge -c:a libmp3lame -q:a 4 /var/www/temp/combined.mp3

Here is the output from the second command.

ffmpeg version 2.5.10-0ubuntu0.15.04.1 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.9.2 (Ubuntu 4.9.2-10ubuntu13)
  configuration: --prefix=/usr --extra-version=0ubuntu0.15.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --shlibdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --enable-shared --disable-stripping --enable-avresample --enable-avisynth --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libshine --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libwavpack --enable-libwebp --enable-libxvid --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzvbi --enable-libzmq --enable-frei0r --enable-libvpx --enable-libx264 --enable-libsoxr --enable-gnutls --enable-openal --enable-libopencv --enable-librtmp --enable-libx265
  libavutil      54. 15.100 / 54. 15.100
  libavcodec     56. 13.100 / 56. 13.100
  libavformat    56. 15.102 / 56. 15.102
  libavdevice    56.  3.100 / 56.  3.100
  libavfilter     5.  2.103 /  5.  2.103
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mp3, from '/var/www/temp/audioTrack.mp3':
  Metadata:
    encoder         : Lavf56.15.102
  Duration: 00:02:08.89, start: 0.025057, bitrate: 128 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s
    Metadata:
      encoder         : Lavc56.13
Input #1, mp3, from '/var/www/temp/musicTrack.mp3':
  Metadata:
    encoder         : Lavf56.15.102
  Duration: 00:02:08.89, start: 0.025057, bitrate: 128 kb/s
    Stream #1:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s
    Metadata:
      encoder         : Lavc56.13
[Parsed_amerge_0 @ 0x15e3760] No channel layout for input 1
[Parsed_amerge_0 @ 0x15e3760] Input channel layouts overlap: output layout will be determined by the number of distinct input channels
Output #0, mp3, to '/var/www/temp/combined.mp3':
  Metadata:
    TSSE            : Lavf56.15.102
    Stream #0:0: Audio: mp3 (libmp3lame), 44100 Hz, stereo, s16p (default)
    Metadata:
      encoder         : Lavc56.13.100 libmp3lame
Stream mapping:
  Stream #0:0 (mp3) -> amerge:in0
  Stream #1:0 (mp3) -> amerge:in1
  amerge -> Stream #0:0 (libmp3lame)
Press [q] to stop, [?] for help
[libmp3lame @ 0x1601000] Trying to remove 1152 samples, but the queue is empty
size=    2001kB time=00:02:08.88 bitrate= 127.2kbits/s    
video:0kB audio:2001kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.012350%

Of note is these sections (I believe).

[Parsed_amerge_0 @ 0x15e3760] No channel layout for input 1
[Parsed_amerge_0 @ 0x15e3760] Input channel layouts overlap: output layout will be determined by the number of distinct input channels

and

[libmp3lame @ 0x1601000] Trying to remove 1152 samples, but the queue is empty

As I said the output audio file sounds correct.

The Music and Audio tracks are created with AudioSegment in python from the pydub library. I've used this before with no issues. The code for this is as follows.

sound = AudioSegment.from_mp3(audio)
introSilence = AudioSegment.silent(duration=introLength)
creditsSilence = AudioSegment.silent(duration=creditsLength)
increasedAudio = sound + 12
talking = introSilence + increasedAudio + creditsSilence
talking.export(audioTrack, format="mp3")
mus = AudioSegment.from_mp3(music)
introMusic = mus[ : introLength]
videoMusic = mus[introLength - crossFade : introLength + videoLength + crossFade]
creditsMusic = mus[totalLength - creditsLength : totalLength]
lowerMusic = videoMusic - 6
totalMusic = introMusic.append(lowerMusic, crossfade=crossFade).append(creditsMusic, crossfade=crossFade).fade_out(fadeOut)
totalMusic.export(musicTrack, format="mp3")

Here is the output of ffprobe on the 2 audio files.

for audioTrack

ffprobe version 2.5.10-0ubuntu0.15.04.1 Copyright (c) 2007-2016 the FFmpeg developers
  built with gcc 4.9.2 (Ubuntu 4.9.2-10ubuntu13)
  configuration: --prefix=/usr --extra-version=0ubuntu0.15.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --shlibdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --enable-shared --disable-stripping --enable-avresample --enable-avisynth --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libshine --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libwavpack --enable-libwebp --enable-libxvid --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzvbi --enable-libzmq --enable-frei0r --enable-libvpx --enable-libx264 --enable-libsoxr --enable-gnutls --enable-openal --enable-libopencv --enable-librtmp --enable-libx265
  libavutil      54. 15.100 / 54. 15.100
  libavcodec     56. 13.100 / 56. 13.100
  libavformat    56. 15.102 / 56. 15.102
  libavdevice    56.  3.100 / 56.  3.100
  libavfilter     5.  2.103 /  5.  2.103
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mp3, from 'temp/audioTrack.mp3':
  Metadata:
    encoder         : Lavf56.15.102
  Duration: 00:02:08.89, start: 0.025057, bitrate: 128 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s
    Metadata:
      encoder         : Lavc56.13

and for musicTrack

ffprobe version 2.5.10-0ubuntu0.15.04.1 Copyright (c) 2007-2016 the FFmpeg developers
  built with gcc 4.9.2 (Ubuntu 4.9.2-10ubuntu13)
  configuration: --prefix=/usr --extra-version=0ubuntu0.15.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --shlibdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --enable-shared --disable-stripping --enable-avresample --enable-avisynth --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libshine --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libwavpack --enable-libwebp --enable-libxvid --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzvbi --enable-libzmq --enable-frei0r --enable-libvpx --enable-libx264 --enable-libsoxr --enable-gnutls --enable-openal --enable-libopencv --enable-librtmp --enable-libx265
  libavutil      54. 15.100 / 54. 15.100
  libavcodec     56. 13.100 / 56. 13.100
  libavformat    56. 15.102 / 56. 15.102
  libavdevice    56.  3.100 / 56.  3.100
  libavfilter     5.  2.103 /  5.  2.103
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mp3, from 'temp/musicTrack.mp3':
  Metadata:
    encoder         : Lavf56.15.102
  Duration: 00:02:08.89, start: 0.025057, bitrate: 128 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s
    Metadata:
      encoder         : Lavc56.13

I can't see any issues with these.

For completeness here is the ffprobe result for the combined audio track.

ffprobe version 2.5.10-0ubuntu0.15.04.1 Copyright (c) 2007-2016 the FFmpeg developers
  built with gcc 4.9.2 (Ubuntu 4.9.2-10ubuntu13)
  configuration: --prefix=/usr --extra-version=0ubuntu0.15.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --shlibdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --enable-shared --disable-stripping --enable-avresample --enable-avisynth --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libshine --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libwavpack --enable-libwebp --enable-libxvid --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzvbi --enable-libzmq --enable-frei0r --enable-libvpx --enable-libx264 --enable-libsoxr --enable-gnutls --enable-openal --enable-libopencv --enable-librtmp --enable-libx265
  libavutil      54. 15.100 / 54. 15.100
  libavcodec     56. 13.100 / 56. 13.100
  libavformat    56. 15.102 / 56. 15.102
  libavdevice    56.  3.100 / 56.  3.100
  libavfilter     5.  2.103 /  5.  2.103
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mp3, from 'temp/combined.mp3':
  Metadata:
    encoder         : Lavf56.15.102
  Duration: 00:02:08.91, start: 0.025057, bitrate: 127 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 127 kb/s
    Metadata:
      encoder         : Lavc56.13

Any help would be much appreciated.

Thanks,

Stu.

1

There are 1 answers

1
slhck On BEST ANSWER

You aren't mapping any of your second file's streams to the output. If you look at the stream mapping:

Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (aac (native) -> mp3 (libmp3lame))

You can see that only streams from input file 0 are mapped to the output. You need to explicitly map the audio stream from the second file:

ffmpeg -y -i merged.mp4 -i combined.mp3 -c:a aac -map 0:v -map 1:a output.mp4

Note that there is no need for -strict -2 with recent ffmpeg versions.