Wie binden Sie mehrere Audiodateien mit Timeline-Offset in eine Videodatei ein?

625
kev

Ich habe eine Videodatei:

screencast.mpg (100sec) 

Und mehrere Audiodateien (Dateiname gibt Offset an):

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

Wie kann ich diese Dateien zusammenfassen:

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

Ich möchte ein Skript schreiben, um diesen Job automatisch auszuführen.
Ich habe ffmpeg -itsoffsetOption ausprobiert, aber gescheitert.

1

1 Antwort auf die Frage

1
Peter.O

Im folgenden Code wird davon ausgegangen, dass Ihre .wavDateien 4800 Hzund sind stereo.
Es baut Segmente der Stille auf, basierend auf den obigen Werten.
Es produziert eine Single .wav. das kann mit dem Video gemuxt werden.

nrChannels=2 sampleRate=48000  rawSilence() { local nrSeconds=$1 local sampleRate=$2 local nrChannels=$ 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 

Um Video und Audio zusammen zu muxen, sollte diese oder eine Kodierungsvariante dies tun:

ffmpeg -i "100sec.mpg" \ -i "100sec.wav" \ -vcodec copy \ -y "100sec.muxed.mpg"