我想使用类似以下代码来用 FFmpeg 剪切视频:
ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4
但是我想以帧为单位而不是以秒为单位来指定-ss
。-t
例如,我想告诉 ffmpeg 从 90 帧开始剪切,而不是 3 秒。我想这样做是因为我要使用脚本剪切视频,我不想在将其传递给 FFmpeg 之前将帧数转换为秒数,这会让事情变得过于复杂。
只需指定一个数字,例如-ss 90
从 90 秒开始剪辑,而不是从 90 帧开始。
答案1
我相信您应该能够使用select
过滤器来实现这一点。但是,使用视频过滤器时,您将无法再流式传输副本 - 相反,您必须通过选择带有标志的编解码器来转码文件c:v
。
例如,要创建从第 90 帧开始的剪辑,并生成长 1000 帧的输出,并将输出转码为 H264 格式,您可以尝试:
ffmpeg -i [INPUT] -vf select=gte(n\,90) -vframes 1000 -c:v libx264 -f mp4 [output.mp4]
答案2
没有办法准确完成您所要求的事情。
您可以使用-frames
来处理所需数量的帧,但使用帧号作为起始位置是不可能的。