Ist es möglich, Audio und Video während der Überlagerungszeit anzuhalten? Ist es nach der Pause des Audios möglich, während dieser Zeitspanne eine neue Audiospur hinzuzufügen? Die verbleibende Zeit, die das Original-Audio abgespielt werden muss.
Zum Beispiel,
Ich verwende ffmpeg, um mehrere Bilder in einem Video mit dem unten genannten Befehl zu überlagern.
ffmpeg -i 2.mp4 -i Handschuhe.png -i Socken.png -filter_complex "[1:v]Skala=320:240 [ovrl]; [0:v][ovrl]Overlay=y=Hh:Enable='Between(t,3,8)'[v1];[2:v]Skala=320:240 [ovrl1];[v1][ovrl1]Overlay=y=Hh:Enable='Between(t,15,20)'[v2]" -map "[v2]" -map 0:a -c:a Kopiere Ausgabevideo.mp4
Jetzt muss ich das Video und den Ton zwischen 3 und 8 Sekunden anhalten, während dieser 3 bis 8 Sekunden einen neuen Ton abspielen und für die verbleibende Zeit mit dem alten Ton fortfahren.
Helfen Sie mir bitte dabei.
Antwort1
Um Audio und Video anzuhalten, können Sie entweder loop
die Streams oder den PTS versetzen.
Streams in Schleife
loop=loop={len_frames}:size=1:start={pos_frames},setpts=N/FRAME_RATE/TB
Hier {len_frames}
ist die Länge der Schleife in Frames und {pos_frames}
die Position der Pause in Frames. Sie können diese Zahlen berechnen, indem Sie die Framerate des Videos ermitteln und diese mit der gewählten Länge und dem Zeitstempel in Sekunden multiplizieren.
Gleiches gilt für den Audioteil, für den Sie aloop
bzw. asetpts
und die Abtastrate in Hz verwenden müssen. Darüber hinaus müssen Sie den Ton durch Einstellen von stummschalten volume=0
.
Die geloopten Video- und Audio-Streams sind länger als die Originale und Sie können dann die Überlagerung darauf anzeigen.
Da solche Befehle recht komplex zu erstellen sind, habe ich einePython-Programmdas einen „Puffer“-Indikator einfügt, während Video und Audio angehalten werden. Sie können überprüfen, wie die Loop-Befehle generiert werdenHier.
Offset für PTS
Siehe Gyan'sAntwort hier, das im Wesentlichen Folgendes tut:
setpts='PTS+gte(T\,{start_time})*({shift}/TB)'
kombiniert mit -vsync vfr
, wobei {start_time}
die Zeit ist, zu der die Frames versetzt werden und {shift}
die Verschiebung angewendet wird.
Audio verschieben
Was die Wiedergabe des Audios während eines bestimmten Zeitintervalls betrifft, können Sieverwenden Sie die -itsoffset
Eingabeoptionum seinen Beginn auszugleichen.
Oder Sie versetzen den PTS des Audiostreams mithilfe des asetpts
Filters um einen festen Betrag.