Bild in Video einblenden und Video und Audio während des angegebenen Intervalls anhalten

Bild in Video einblenden und Video und Audio während des angegebenen Intervalls anhalten

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 loopdie 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 aloopbzw. asetptsund 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 -itsoffsetEingabeoptionum seinen Beginn auszugleichen.

Oder Sie versetzen den PTS des Audiostreams mithilfe des asetptsFilters um einen festen Betrag.

verwandte Informationen