如何將多個音訊檔案嵌入到一個具有時間軸偏移的視訊檔案中?

如何將多個音訊檔案嵌入到一個具有時間軸偏移的視訊檔案中?

我有一個視頻檔:

screencast.mpg (100sec)

以及幾個音訊檔案(檔案名稱表示偏移量):

10.wav (10sec)
30.wav (5sec)
45.wav (8sec)

我怎麼才能將這些文件組合在一起:

V:||||||||||||||||||||||||||||||||||||||||||||||||||
A:    .....     ...     ....

我想編寫一個腳本來自動完成這項工作。
我嘗試過ffmpeg -itsoffset選項,但失敗了。

答案1

以下程式碼假設您的.wav檔案是4800 Hzstereo
它根據上述值建立沉默片段。
它產生一個單一的.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"

相關內容