4

Я пытаюсь использовать эффект замедленного движения в моих видео. Допустим, у меня есть видео продолжительностью 2 минуты, и я хочу использовать этот эффект от 20 до 30 секунд.

Я нашел эту команду из блога:

ffmpeg -i input.mp4 -vf "setpts=(<speed>/1)*PTS" output.mp4

Но я не знаю, как реализовать продолжительность.

1 ответ1

7

Фильтр setpts не имеет функции редактирования временной шкалы, как некоторые другие фильтры (ffmpeg -filters чтобы узнать, какие из них).

Это означает, что вам придется делать медленное видео и объединять его с обычным видео или выполнять какую-то необычную фильтрацию.

Пример: только видео

Использование фильтров trim, setpts и concat :

Ввод в этом примере имеет продолжительность 60 секунд. 0-10 будет нормальной скоростью, 10-30 будет на 50% медленнее, а 30-й будет нормальной скоростью, что приведет к выходному сигналу длительностью ~ 80 секунд:

ffmpeg -i input.mkv -filter_complex \
"[0:v]trim=0:10,setpts=PTS-STARTPTS[v1]; \
 [0:v]trim=10:30,setpts=PTS-STARTPTS[v2]; \
 [0:v]trim=start=30,setpts=PTS-STARTPTS[v3]; \
 [v2]setpts=PTS/0.5[slowv]; \
 [v1][slowv][v3]concat=n=3:v=1:a=0[out]" \
-map "[out]" output.mp4

Пример: со звуком

ffmpeg -i input.mkv -filter_complex \
"[0:v]trim=0:10,setpts=PTS-STARTPTS[v1]; \
 [0:v]trim=10:30,setpts=PTS-STARTPTS[v2]; \
 [0:v]trim=start=30,setpts=PTS-STARTPTS[v3]; \
 [0:a]atrim=0:10,asetpts=PTS-STARTPTS[a1]; \
 [0:a]atrim=10:30,asetpts=PTS-STARTPTS[a2]; \
 [0:a]atrim=start=30,asetpts=PTS-STARTPTS[a3]; \
 [v2]setpts=PTS/0.5[slowv]; \
 [a2]atempo=0.5[slowa]; \
 [v1][a1][slowv][slowa][v3][a3]concat=n=3:v=1:a=1[v][a]" \
-map "[v]" -map "[a]" output.mp4

slowmoVideo

В качестве альтернативы вы можете попробовать slowmoVideo, что, вероятно, приведет к лучшему эффекту замедления по сравнению с одним ffmpeg (slowmoVideo использует ffmpeg). Это также позволяет вам использовать кривые Безье для построения эффекта, чтобы вы могли плавно инициировать эффект, и это может включать размытие движения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .