Wie erstellt man eine variable Zeitskala?

Wie erstellt man eine variable Zeitskala?

Ich habe ein Video, bei dem ich die Zeitskala eines Videos basierend auf aus einer Datei eingelesenen Verhältnissen ändern möchte.

Ich habe herausgefunden, dass ich den setptsFilter verwenden könnte, um die Geschwindigkeit für ein ganzes Video zu verdoppeln setpts=2*PTS. Ich möchte jedoch den Maßstab im Laufe der Zeit ändern, damit das Video

  • Beginnen Sie mit 1x Geschwindigkeit
  • Bei der Marke von 5,7564 Sekunden würde es auf die 1,4-fache Geschwindigkeit umschalten
  • Bei der 10,2571-Sekunden-Marke würde es auf 0,983333x Geschwindigkeit umschalten
  • Bei der Marke von 15,6251 Sekunden würde es für den Rest des Videos auf einfache Geschwindigkeit umschalten.

Mir ist klar geworden, dass ich wahrscheinlich eine Skriptdatei erstellen muss, die gelesen werden kann, -filter_script:vaber ich weiß nicht, was ich verwenden muss, um das gewünschte Verhalten zu erzielen.

Mein erster naiver Ansatz war

setpts='
if(lt(T,5.7564),
    1*PTS,      
if(lt(T,10.2571),
    1.4*PTS,
if(lt(T,15.6251),
    0.983333*PTS,
    1*PTS
))))'

aber das führt dazu, dass das Video an den Schnittpunkten herumspringt und Teile des Videos übersprungen oder wiederholt werden können. Ich verstehe jetzt, warum das passiert, aber ich weiß nicht, was ich stattdessen tun soll.

Der beste Weg wäre wahrscheinlich, das Video in vier Segmente zu schneiden und setpts=#*PTSpro Segment nur eins zu verwenden, aber ich weiß nicht, wie man dafür ein Skript erstellt.

Antwort1

Wie Sie erwähnt haben, wäre ein Ansatz, die Eingabe in vier separate Segmente zu kürzen, den Setpts-Filter auf zwei davon anzuwenden und schließlich alle zu verketten. Hier ist der Befehl dafür:

ffmpeg -i input.mp4 -lavfi "[0:v]trim=0:5.7564[firstpart];[0:v]trim=start=5.7564:10.2571,setpts=PTS-STARTPTS[secondpart];[0:v]trim=10.2571:15.6251,setpts=PTS-STARTPTS[thirdpart];[0:v]trim=15.6251,setpts=PTS-STARTPTS[forthpart];[secondpart]setpts=PTS/1.4[second];[thirdpart]setpts=PTS/0.983333[third];[firstpart][second][third][forthpart]concat=n=4:v=1:unsafe=1[out]" -map '[out]' output.mp4

verwandte Informationen