2012-09-11 117 views
27

我正在嘗試使用ffmpeg將無聲音頻軌道添加到MOV文件。在ffmpeg中添加無聲音頻

我創建了一個比視頻更長的靜音音軌,並打算在ffmpeg中使用-shortest選項。

使用SOX v14.3.1,我跑這來生成一個wav文件:

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. 

我的基本ffmpeg的命令如下:

ffmpeg -shortest \ 
-i silence.wav -acodec pcm_s16le \ 
-i vid_no_sound.mov -vcodec copy vid_with_sound.mov 

這樣做的結果是:

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 

我試着按照建議添加-strict -2,雖然我不確定把它放在命令的哪裏線。

我花了兩個小時嘗試不同的事情,閱讀ffmpeg文檔,但我仍然堅持。

如何添加靜音音軌到mov文件?

回答

59

anullsrc音頻濾波器

您可以使用ffmpeg創建靜音頻與視頻中的一個步驟結合起來。這個例子將使用anullsrc音頻過濾器,以生成立體聲音頻靜音與44100採樣率:

ffmpeg -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -i video.mov \ 
    -shortest -c:v copy -c:a aac output.mov 
  • channel_layout=stereo:sample_rate=44100是默認的,但我把它就像一個如何使用這些選項的例子。

忽略現有的音頻

如果您的視頻輸入文件有要忽略然後使用-map選項覆蓋默認stream selection行爲音頻:

ffmpeg -f lavfi -i anullsrc -i video.mov -shortest -c:v copy -c:a aac \ 
    -map 0:a -map 1:v output.mov 
  • -map 0:a -map 1:v可譯爲作爲:從第一個輸入(0)使用音頻(a),並從第二個輸入(1)使用vid eo(v)。

  • 這些例子stream copy視頻所以它不會重新編碼(如 「複製和粘貼」)。

  • 總是建議使用最近的ffmpeg。鏈接到最近的版本在FFmpeg Download頁面,或者您可以參考一步一步guide to compile ffmpeg

  • 如果您的ffmpeg已舊,那麼您需要使用-strict experimental來使用-c:a aac

+1

'/ dev/zero'也不能在'avconv'中工作,但是'-f lavfi'好像不行。不要忘記'-shortest'標誌,否則它將永遠坐在那裏編碼沉默。 – z0r

+0

這是明確的解釋。 – Amerrnath

+0

如果我只想添加沉默音頻不可用那麼該怎麼辦?例如在錄製桌面音頻時? – Ahmad

1

訂單事宜。我已經嘗試了上述襪命令及以下ffmpeg的命令和它的作品

ffmpeg -shortest -i silence.wav -acodec pcm_s16le -i out.mov -vcodec copy -strict -2 vid_with_sound.mov 
+1

哪裏爲了此事,什麼是錯貨,不會造成什麼問題? – binki

+0

ffmpeg命令行參數順序問題。否則 – av501

11

萬一別人通過「搜索引擎」結束了這裏,這裏是爲latest ffmpeg的命令,用MP4作品(H264/AVC):

ffmpeg -f lavfi -i aevalsrc=0 -i input.mp4 -vcodec copy -acodec aac -map 0:0 -map 1:0 -shortest -strict experimental -y out.mp4 
+0

非常感謝! –

+0

如果當我想添加音頻不可用的無聲音頻時該怎麼辦? – Ahmad

2

從圖像中創建視頻或轉換將圖像轉化爲視頻,然後使用ffmpeg添加較小的音頻。

您可以在ffmpeg中使用anullsrc音頻源過濾器。例如,使5.1聲道,48000赫茲的採樣速率,從圖像10秒無聲視頻文件:

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:輸入圖像文件

-i anullsrc:添加無聲音頻

-t 10:320::視頻分辨率寬度= 420和高度= 320

-y:Overw的秒

規模= 480號儀式現有輸出文件

output.mp4:輸出文件