例如:仅限视频

例如:仅限视频

我正在尝试在视频中使用慢动作效果。假设我有一个 2 分钟长的视频,我想在 20 到 30 秒之间使用此效果。

我从博客中找到了这个命令:

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

但我不知道如何在其中实现持续时间。

答案1

过滤setpts器没有时间线编辑与其他一些过滤器一样具有某些功能(请参阅ffmpeg -filters了解哪些过滤器可以执行这些功能)。

这意味着您必须制作一个慢速视频并将其连接到正常速度的视频中或执行一些特殊的过滤。

例如:仅限视频

使用trimsetpts, 和concat过滤器:

此示例中的输入持续时间为 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)。它还允许您使用贝塞尔曲线来绘制效果,以便您可以平滑地启动效果,并且它可以包含运动模糊。

相关内容