任务:使视频速度提高十倍。解决方案算法:从源中取出每 10 帧并将其输出,将 fps 设置为原始值。
ffmpeg -i in.mp4 -vf "select=not(mod(n\,10))" out.mp4
这适用于源。我从源视频中获取了每 10 帧。
但我无法制作出视频。
我做了许多开关组合。在某些情况下,输出视频具有原始 fps,但 10 帧相似,因此播放时 - 帧每秒切换 3 次。在某些情况下,我得到实际 fps=3 的文件。我尝试输入文件的 -r 选项、输出文件的 -r 选项、过滤器“fps=30”、-framerate 等等。
再说一遍:我想从输入中取出每 10 帧(原始 fps 为 30),将其作为单帧发送到输出,并将输出 fps 设置为 30,这样我得到的输出视频比输入短 10 倍,播放速度快 10 倍。
当我得到 3 fps 的视频时,我想:就是这样。现在我应该将此视频中的 fps 从 3 改为 30 - 一切就完成了。
但我做不到这一点。
ffmpeg -i out.mp4 -vcodec copy -r 30 out2.mp4
我又得到了 3 fps 的视频。
当然,音频同步在这种情况下并不适用。
答案1
抽取时间戳,然后选择每 10 帧。
ffmpeg -i in.mp4 -vf "setpts=(PTS-STARTPTS)/10,select=not(mod(n\,10))" out.mp4
音频被忽略。