Como incorporar vários arquivos de áudio em um arquivo de vídeo com deslocamento de linha do tempo?

1

Eu tenho um arquivo de vídeo:

screencast.mpg (100sec)

E vários arquivos de áudio (nome do arquivo indica deslocamento):

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

Como posso combinar esses arquivos juntos:

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

Eu quero escrever um script para fazer esse trabalho automaticamente.
Eu tentei a opção ffmpeg -itsoffset , mas falhei.

    
por kev 08.04.2012 / 15:35

1 resposta

1

O código a seguir supõe que seus arquivos .wav são 4800 Hz e stereo .
Ele constrói segmentos de silêncio, com base nos valores acima.
Produz um único .wav . que pode ser alterado com o vídeo.

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

Para transformar o vídeo e o áudio juntos, essa ou algumas variantes de codificação devem fazê-lo:

ffmpeg -i "100sec.mpg" \
       -i "100sec.wav" \
          -vcodec copy \
 -y "100sec.muxed.mpg"
    
por 08.04.2012 / 23:43

Tags