如何让 FFmpeg 始终对前几帧应用速度效果?
How to get FFmpeg to consistently apply speed effect to first few frames?
我正在使用 FFmpeg 将速度效果应用于短 gif 和视频,我注意到 st运行ge 在加速时在循环 gif 上卡顿。我手动测试并发现发生了什么。 FFmpeg 未能将速度过滤器应用于视频的前几帧。
我从这个文件开始,它在每一帧的数字“1 2 3 4”之间循环。
然后我运行命令ffmpeg -i 123410fps.mp4 -vf setpts=0.5*PTS 123410fpsout.mp4
给我留下了这个文件:123410fpsout.mp4
仔细分析后,我发现输出文件没有显示重复的 1 3 1 3
或 2 4 2 4
模式,而是显示 1 2 3 4 1 3 1 3 1 3...
速度效果 didn '申请前几帧
如果听起来我太挑剔了,我深表歉意,但我对此的使用是在非常短的 gif 和视频中,这种效果非常明显。 我怎样才能防止这种效果发生并使 100% 一致的速度效果应用于视频?我不介意使用其他非 ffmpeg 软件,但可以轻松使用 CLI 解决方案大多数视频都很理想。
万一有人想知道,我不使用 ffmpeg 编码 gif,我使用 gifski 来自 ffmpeg 导出的图像序列。即使不使用 gif 也会出现此问题,因此这不是 gifski 问题。
在 setpts
过滤器之后添加一个 fps
过滤器并使用 -t
选项,如下所示:
ffmpeg -i 123410fps.mp4 -vf 'setpts=0.5*PTS,fps=10' -t 1.64 -an 123410fpsout.mp4
10
是您的 123410fps.mp4
视频的 fps,1.64
是其时长的一半(以秒为单位)。
The documentation 关于 fps
过滤器的说法:
Convert the video to specified constant frame rate by duplicating or dropping frames as necessary.
似乎使用此过滤器会强制正确丢弃帧。
FFmpeg wiki 的 Changing the frame rate page 描述了如何使用 fps
过滤器,而且还说:
The output duration of the video will stay the same.
-t
选项是获得输入持续时间一半的输出所必需的,这与 2x 的加速一致。
fps
过滤器还有一个 round
参数,在此特定情况下,该参数允许您获得带有数字 1,3,1,... 或 2,4,2 的输出,...
对于 1,3,1,... 你可以使用 fps=fps=10:round=up
.
对于 2,4,2,... 你可以使用 fps=fps=10:round=down
.
我正在使用 FFmpeg 将速度效果应用于短 gif 和视频,我注意到 st运行ge 在加速时在循环 gif 上卡顿。我手动测试并发现发生了什么。 FFmpeg 未能将速度过滤器应用于视频的前几帧。
我从这个文件开始,它在每一帧的数字“1 2 3 4”之间循环。
然后我运行命令ffmpeg -i 123410fps.mp4 -vf setpts=0.5*PTS 123410fpsout.mp4
给我留下了这个文件:123410fpsout.mp4
仔细分析后,我发现输出文件没有显示重复的 1 3 1 3
或 2 4 2 4
模式,而是显示 1 2 3 4 1 3 1 3 1 3...
速度效果 didn '申请前几帧
如果听起来我太挑剔了,我深表歉意,但我对此的使用是在非常短的 gif 和视频中,这种效果非常明显。 我怎样才能防止这种效果发生并使 100% 一致的速度效果应用于视频?我不介意使用其他非 ffmpeg 软件,但可以轻松使用 CLI 解决方案大多数视频都很理想。
万一有人想知道,我不使用 ffmpeg 编码 gif,我使用 gifski 来自 ffmpeg 导出的图像序列。即使不使用 gif 也会出现此问题,因此这不是 gifski 问题。
在 setpts
过滤器之后添加一个 fps
过滤器并使用 -t
选项,如下所示:
ffmpeg -i 123410fps.mp4 -vf 'setpts=0.5*PTS,fps=10' -t 1.64 -an 123410fpsout.mp4
10
是您的 123410fps.mp4
视频的 fps,1.64
是其时长的一半(以秒为单位)。
The documentation 关于 fps
过滤器的说法:
Convert the video to specified constant frame rate by duplicating or dropping frames as necessary.
似乎使用此过滤器会强制正确丢弃帧。
FFmpeg wiki 的 Changing the frame rate page 描述了如何使用 fps
过滤器,而且还说:
The output duration of the video will stay the same.
-t
选项是获得输入持续时间一半的输出所必需的,这与 2x 的加速一致。
fps
过滤器还有一个 round
参数,在此特定情况下,该参数允许您获得带有数字 1,3,1,... 或 2,4,2 的输出,...
对于 1,3,1,... 你可以使用 fps=fps=10:round=up
.
对于 2,4,2,... 你可以使用 fps=fps=10:round=down
.