根据帧而不是时间码剪切 FFmpeg 视频

根据帧而不是时间码剪切 FFmpeg 视频

我想使用类似以下代码来用 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来处理所需数量的帧,但使用帧号作为起始位置是不可能的。

相关内容