我正在尝试在视频中使用慢动作效果。假设我有一个 2 分钟长的视频,我想在 20 到 30 秒之间使用此效果。
我从博客中找到了这个命令:
ffmpeg -i input.mp4 -vf "setpts=(<speed>/1)*PTS" output.mp4
但我不知道如何在其中实现持续时间。
答案1
过滤setpts
器没有时间线编辑与其他一些过滤器一样具有某些功能(请参阅ffmpeg -filters
了解哪些过滤器可以执行这些功能)。
这意味着您必须制作一个慢速视频并将其连接到正常速度的视频中或执行一些特殊的过滤。
例如:仅限视频
此示例中的输入持续时间为 60 秒。0-10 为正常速度,10-30 会慢 50%,30-end 为正常速度,因此输出持续时间约为 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
慢动作视频
或者你可以尝试慢动作视频与单独使用 ffmpeg 相比,这可能会产生更好的减速效果(slowmoVideo 使用 ffmpeg)。它还允许您使用贝塞尔曲线来绘制效果,以便您可以平滑地启动效果,并且它可以包含运动模糊。