
我有一個視頻檔:
screencast.mpg (100sec)
以及幾個音訊檔案(檔案名稱表示偏移量):
10.wav (10sec)
30.wav (5sec)
45.wav (8sec)
我怎麼才能將這些文件組合在一起:
V:||||||||||||||||||||||||||||||||||||||||||||||||||
A: ..... ... ....
我想編寫一個腳本來自動完成這項工作。
我嘗試過ffmpeg -itsoffset
選項,但失敗了。
答案1
以下程式碼假設您的.wav
檔案是4800 Hz
和stereo
。
它根據上述值建立沉默片段。
它產生一個單一的.wav
.可以與影片混合。
nrChannels=2
sampleRate=48000
rawSilence() {
local nrSeconds=$1
local sampleRate=$2
local nrChannels=${3:-2}
ffmpeg -acodec pcm_s16le \
-ar $sampleRate \
-ac $nrChannels \
-f s16le \
-i <(dd if=/dev/zero bs=$((sampleRate*2*nrChannels)) count=$nrSeconds) \
-f s16le -
}
{
rawSilence 10 $sampleRate $nrChannels
cat "10.wav" |ffmpeg -f wav -i - -f s16le -
rawSilence 10 $sampleRate $nrChannels
cat "30.wav" |ffmpeg -f wav -i - -f s16le -
rawSilence 10 $sampleRate $nrChannels
cat "45.wav" |ffmpeg -f wav -i - -f s16le -
rawSilence 47 $sampleRate $nrChannels
} |
ffmpeg -acodec pcm_s16le \
-ar $sampleRate \
-ac $nrChannels \
-f s16le \
-i - \
-f wav -y 100sec.wav
要將視訊和音訊混合在一起,可以使用此或某些編碼變體來實現:
ffmpeg -i "100sec.mpg" \
-i "100sec.wav" \
-vcodec copy \
-y "100sec.muxed.mpg"