Я пытаюсь удвоить скорость видео.
Я использую команды:
ffmpeg -i output.mp4 -filter:v "setpts=0.5*PTS" output2.mp4
и
ffmpeg -i output.mp4 -vf "setpts=0.5*PTS" output3.mp4
который я нахожу в Интернете как стандартный метод.
Однако все мои файлы имеют одинаковую длину:
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
Что происходит и как правильно ускорить видео? Я использую Ubuntu.
решение1
Моей первой догадкой было бы то, что подход PTS, задокументированныйздесь, работает «путем изменения временной метки представления (PTS) каждого видеокадра», чтоигрокиуважал бы и ускорял. Но, возможно, это не меняетсообщилипродолжительность видео, как ffprobe
его видят.
Но манипуляции с моим случайным тестовым mp4 показывают, что, хотя видео ускорено, аудио — нет. Что объясняет, почему я тоже вижу одну и ту же временную метку для каждого видео через ffprobe
. Это соответствует примечанию из документации, ссылка на которую приведена выше:
Обратите внимание, что в следующих примерах аудиопоток не изменяется, поэтому в идеале его следует отключить с помощью
-an
.
Другой ответ насуперпользовательпредлагает следующий комплексный фильтр для ускорения как видео, так и аудио:
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
А этот вариант мне подходит, показывая половину длины через ffprobe
.