Warum macht ffmpeg dieses Video nicht kürzer?

Warum macht ffmpeg dieses Video nicht kürzer?

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 ffprobees 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.

verwandte Informationen