garrettlynch garrettlynch - 4 years ago 152
Bash Question

Add black video to video with sound

I'm trying to insert 13 seconds of black video at the start of a video that has sound using ffmpeg like so:

ffmpeg -f lavfi -i "color=c=black:s=720x406:r=25:sar=1/1" -i input.mp4 -filter_complex \
"[0:v] trim=end=13,setpts=PTS-STARTPTS [blackstart]; \
[blackstart] [1:v] concat=n=2:v=1:a=0[out]" \
-map "[out]" -c:a copy output.mp4


However the sound is not being maintained. What am I doing incorrectly? -c:a copy does not seem to work should I be using a [1:a] somewhere?

garrett-retina:~ garrett-macbookretina$ ffmpeg -f lavfi -i "color=c=red:s=720x406:r=25:sar=1/1" -i input.mp4 -filter_complex \
> "[0:v] trim=end=13,setpts=PTS-STARTPTS [blackstart]; \
> [blackstart] [1:v] concat=n=2:v=1:a=0[out]" \
> -map "[out]" -c:a copy output.mp4
ffmpeg version 3.2.2 Copyright (c) 2000-2016 the FFmpeg developers
built with Apple LLVM version 5.0 (clang-500.2.76) (based on LLVM 3.3svn)
configuration: --prefix=/usr/local/Cellar/ffmpeg/3.2.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-vda
libavutil 55. 34.100 / 55. 34.100
libavcodec 57. 64.101 / 57. 64.101
libavformat 57. 56.100 / 57. 56.100
libavdevice 57. 1.100 / 57. 1.100
libavfilter 6. 65.100 / 6. 65.100
libavresample 3. 1. 0 / 3. 1. 0
libswscale 4. 2.100 / 4. 2.100
libswresample 2. 3.100 / 2. 3.100
libpostproc 54. 1.100 / 54. 1.100
Input #0, lavfi, from 'color=c=red:s=720x406:r=25:sar=1/1':
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 720x406 [SAR 1:1 DAR 360:203], 25 tbr, 25 tbn, 25 tbc
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.56.100
Duration: 33:59:47.32, start: 0.000000, bitrate: 179 kb/s
Stream #1:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 720x406 [SAR 1:1 DAR 360:203], 62 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #1:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 16000 Hz, stereo, fltp, 114 kb/s (default)
Metadata:
handler_name : SoundHandler
[libx264 @ 0x7fa344048400] using SAR=1/1
[libx264 @ 0x7fa344048400] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0x7fa344048400] profile High, level 3.0
[libx264 @ 0x7fa344048400] 264 - core 148 r2748 97eaef2 - H.264/MPEG-4 AVC codec - Copyleft 2003-2016 - 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=12 lookahead_threads=2 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 '/Users/garrett-macbookretina/Desktop/Best of Luck With the Wall/exports/test.mp4':
Metadata:
encoder : Lavf57.56.100
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 720x406 [SAR 1:1 DAR 360:203], q=-1--1, 25 fps, 12800 tbn, 25 tbc (default)
Metadata:
encoder : Lavc57.64.101 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
Stream mapping:
Stream #0:0 (rawvideo) -> trim
Stream #1:0 (h264) -> concat:in1:v0
concat -> Stream #0:0 (libx264)
Press [q] to stop, [?] for help
frame=3060008 fps=432 q=-1.0 Lsize= 957795kB time=34:00:00.20 bitrate= 64.1kbits/s speed=17.3x
video:921972kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 3.885564%
[libx264 @ 0x7fa344048400] frame I:16585 Avg QP:13.67 size: 49743
[libx264 @ 0x7fa344048400] frame P:770518 Avg QP:16.48 size: 91
[libx264 @ 0x7fa344048400] frame B:2272905 Avg QP:25.11 size: 22
[libx264 @ 0x7fa344048400] consecutive B-frames: 0.9% 0.1% 0.4% 98.6%
[libx264 @ 0x7fa344048400] mb I I16..4: 10.2% 39.7% 50.1%
[libx264 @ 0x7fa344048400] mb P I16..4: 0.0% 0.0% 0.0% P16..4: 0.7% 0.0% 0.0% 0.0% 0.0% skip:99.1%
[libx264 @ 0x7fa344048400] mb B I16..4: 0.0% 0.0% 0.0% B16..8: 0.2% 0.0% 0.0% direct: 0.0% skip:99.8% L0:46.9% L1:53.1% BI: 0.1%
[libx264 @ 0x7fa344048400] 8x8 transform intra:39.9% inter:52.0%
[libx264 @ 0x7fa344048400] coded y,uvDC,uvAC intra: 86.1% 77.1% 60.4% inter: 0.0% 0.1% 0.0%
[libx264 @ 0x7fa344048400] i16 v,h,dc,p: 66% 10% 13% 11%
[libx264 @ 0x7fa344048400] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 22% 20% 14% 6% 7% 7% 7% 7% 11%
[libx264 @ 0x7fa344048400] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 23% 19% 11% 7% 9% 8% 8% 7% 9%
[libx264 @ 0x7fa344048400] i8c dc,h,v,p: 59% 19% 17% 5%
[libx264 @ 0x7fa344048400] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x7fa344048400] ref P L0: 53.9% 4.0% 16.6% 25.5% 0.0%
[libx264 @ 0x7fa344048400] ref B L0: 27.9% 71.6% 0.5%
[libx264 @ 0x7fa344048400] ref B L1: 97.6% 2.4%
[libx264 @ 0x7fa344048400] kb/s:61.71
garrett-retina:~ garrett-macbookretina$

Answer Source

You need to add silent audio as well. One method using anullsrc:

ffmpeg \
-f lavfi -i "color=c=black:s=720x406:r=25:sar=1/1:d=13" \
-f lavfi -t 1 -i anullsrc=cl=stereo:r=16000 \
-i input.mp4 \
-filter_complex \
"[2:v]setpts=PTS-STARTPTS[video]; \
 [0:v][1:a][video][2:a]concat=n=2:v=1:a=1[v][a]" \
 -map "[v]" -map "[a]" output.mp4

The silent audio duration only needs to be shorter than the black video duration; the concat filter will pad the rest automatically.

I'm unable to test this example at the moment, but if it is broken let me know and I can fix it later.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download