adding silent audio in ffmpeg
Solution 1
anullsrc audio filter
You can use ffmpeg
to create the silent audio and combine it with a video in one step. This example will use the anullsrc audio filter to generate stereo silent audio with a sample rate of 44100:
ffmpeg -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -i video.mov -c:v copy -c:a aac -shortest output.mov
-
channel_layout=stereo:sample_rate=44100
is the default, but I included it just as an example of how to use these options.
Ignoring existing audio
If your video input file has audio that you want to ignore then use the -map
option to override the default stream selection behavior:
ffmpeg -f lavfi -i anullsrc -i video.mov -c:v copy -c:a aac -map 0:a -map 1:v -shortest output.mp4
-
-map 0:a -map 1:v
can be translated as: from the first input (0
) use the audio (a
), and from the second input (1
) use the video (v
).
Notes
These examples will stream copy the video so it does not get re-encoded (like a "copy and paste").
It is always recommended to use a recent
ffmpeg
. Links to recent builds are on the FFmpeg Download page or you can refer to a step-by-step guide to compileffmpeg
.
Solution 2
Here's a command for the latest ffmpeg, works with MP4 (H264/AVC):
ffmpeg -f lavfi -i aevalsrc=0 -i input.mp4 -c:v copy -c:a aac -map 0 -map 1:v -shortest output.mp4
Solution 3
Create video from image or convert image into video then add slient audio using ffmpeg.
You can use the anullsrc audio source filter in ffmpeg. Example to make a 5.1 channel, 48000 Hz sample rate, 10 seconds silent video file from image:
ffmpeg -loop 1 -i img002.jpg -f lavfi -i anullsrc=channel_layout=5.1:sample_rate=48000 -t 10 -c:v libx264 -t 10 -pix_fmt yuv420p -vf scale=480:320 -y output.mp4
img002.jpg: Input image file
-i anullsrc: Add silent audio
-t 10: Number of seconds
scale=480:320: Video resolution width=420 and height=320
-y: Overwrite existing output file
output.mp4: Output file
Solution 4
Order matters. I have tried the sox command above and the ffmpeg command below and it works
ffmpeg -shortest -i silence.wav -acodec pcm_s16le -i out.mov -vcodec copy -strict -2 vid_with_sound.mov
jon
Updated on December 17, 2021Comments
-
jon over 2 years
I'm trying to use ffmpeg to add a silent audio track to a MOV file.
I created a silent audio track longer than the video, and intend to use the -shortest option with ffmpeg.
Using SoX v14.3.1, I run this to generate a wav file:
sox -n -r 44100 -b 16 -c 2 -L silence.wav trim 0.0 60.000 # -n = Sox's null file # -r = sample rate # -b = bits per sample # -c = num of channels # -L = little endian # filename # trim - is an effect, args start and length.
My basic ffmpeg command looks like this:
ffmpeg -shortest \ -i silence.wav -acodec pcm_s16le \ -i vid_no_sound.mov -vcodec copy vid_with_sound.mov
The result of this is:
ffmpeg version 0.11.1 Copyright (c) 2000-2012 the FFmpeg developers built on Aug 27 2012 13:11:25 with gcc 4.4.5 configuration: --extra-cflags=-static --prefix=/root/ffmpeg_build/src/ffmpeg-0.11.1 --enable-bzlib --enable-gnutls --enable-libfreetype --enable-libmp3lame --enable-libdc1394 --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-openssl --enable-zlib --enable-gpl --enable-nonfree --enable-version3 libavutil 51. 54.100 / 51. 54.100 libavcodec 54. 23.100 / 54. 23.100 libavformat 54. 6.100 / 54. 6.100 libavdevice 54. 0.100 / 54. 0.100 libavfilter 2. 77.100 / 2. 77.100 libswscale 2. 1.100 / 2. 1.100 libswresample 0. 15.100 / 0. 15.100 libpostproc 52. 0.100 / 52. 0.100 [wav @ 0x29ab2e0] max_analyze_duration 5000000 reached at 5015510 Guessed Channel Layout for Input Stream #0.0 : stereo Input #0, wav, from 'silence.wav': Duration: 00:01:00.00, bitrate: 1411 kb/s Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s Input #1, mov,mp4,m4a,3gp,3g2,mj2, from 'vid_no_sound.mov': Metadata: major_brand : qt minor_version : 537199360 compatible_brands: qt creation_time : 2012-07-25 13:41:44 Duration: 00:00:14.50, start: 0.000000, bitrate: 27457 kb/s Stream #1:0(eng): Video: qtrle (rle / 0x20656C72), rgb24, 1920x1080, 27450 kb/s, SAR 1920:1920 DAR 16:9, 24 fps, 24 tbr, 24 tbn, 24 tbc Metadata: creation_time : 2012-07-25 13:41:44 handler_name : Apple Alias Data Handler Stream #1:1(eng): Data: none (tmcd / 0x64636D74) Metadata: creation_time : 2012-07-25 13:42:06 handler_name : Apple Alias Data Handler timecode : 00:00:00:00 File 'vid_with_sound.mov' already exists. Overwrite ? [y/N] y auto-inserting filter 'auto-inserted resampler 0' between the filter 'src' and the filter 'aformat' [aresample @ 0x2ab3b00] chl:stereo fmt:s16 r:44100Hz -> chl:stereo fmt:flt r:44100Hz [NULL @ 0x2994320] Codec is experimental but experimental codecs are not enabled, try -strict -2 Output #0, mov, to 'vid_with_sound.mov': Stream #0:0(eng): Video: qtrle (rle / 0x20656C72), rgb24, 1920x1080 [SAR 1920:1920 DAR 16:9], q=2-31, 27450 kb/s, 24 fps, 90k tbn, 24 tbc Metadata: creation_time : 2012-07-25 13:41:44 handler_name : Apple Alias Data Handler Stream #0:1: Audio: none, 44100 Hz, stereo, flt, 128 kb/s Stream mapping: Stream #1:0 -> #0:0 (copy) Stream #0:0 -> #0:1 (pcm_s16le -> aac) Error while opening encoder for output stream #0:1 - maybe incorrect parameters such as bit_rate, rate, width or height
I have tried adding the
-strict -2
as suggested, although I am not sure where to put it in the command line.I've spent two hours trying different things and reading ffmpeg documentation, but I'm still stuck.
How do I add a silent audio track to a mov file?