Почему ffmpeg не делает это видео короче?

Почему ffmpeg не делает это видео короче?

Я пытаюсь удвоить скорость видео.

Я использую команды:

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.

Связанный контент