Ich versuche, die Geschwindigkeit eines Videos zu verdoppeln.
Ich verwende die Befehle:
ffmpeg -i output.mp4 -filter:v "setpts=0.5*PTS" output2.mp4
Und
ffmpeg -i output.mp4 -vf "setpts=0.5*PTS" output3.mp4
was ich überall im Internet als Standardmethode finde.
Allerdings haben alle meine Dateien die gleiche Länge:
joe@joe-Amd-Am4-Home-Office:~$ for file in *.mp4; do duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$file"); echo "$file: $duration seconds"; done
output2.mp4: 373.014000 seconds
output3.mp4: 373.014000 seconds
output.mp4: 373.014000 seconds
Was ist los und wie beschleunige ich das Video richtig? Ich verwende Ubuntu.
Antwort1
Meine erste Vermutung wäre, dass der PTS-Ansatz, dokumentiertHier, funktioniert „durch Änderung des Präsentationszeitstempels (PTS) jedes Videobildes“, wasSpielerrespektieren und beschleunigen würde. Aber vielleicht ändert das nichts an dergemeldetLänge des Videos wie ffprobe
es aussieht.
Aber das Herumspielen mit einer zufälligen Test-MP4, die ich habe, zeigt, dass das Video zwar beschleunigt ist, der Ton jedoch nicht. Das würde erklären, warum ich auch für jedes Video über denselben Zeitstempel sehe ffprobe
. Dies stimmt mit einem Hinweis aus der oben verlinkten Dokumentation überein:
Beachten Sie, dass in den folgenden Beispielen der Audiostream nicht geändert wird und daher idealerweise mit deaktiviert werden sollte
-an
.
Eine weitere Antwort aufSuperuserbietet den folgenden komplexen Filter zur Beschleunigung von Video und Audio:
ffmpeg -i input.mkv -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mkv
Und das funktioniert bei mir und zeigt die Hälfte der Länge über an ffprobe
.