跳过一帧而不重新编码 H.264 视频

跳过一帧而不重新编码 H.264 视频

我有一个 mp4/h.264 视频,其中仅包含 I 帧。我想跳过其中一个 I 帧,而无需重新编码整个视频。我尝试了以下方法:

ffmpeg -i "file.mp4" -vf select='not(eq(n\,10))' "out.mp4"

但这实际上进行了重新编码。

我更希望解决方案使用 ffmpeg,但任何在 Linux 上运行的程序都可以。

需要明确的是:视频不包含任何 P 帧或 B 帧。

答案1

如果要删除单个 I 帧,则必须将比特流提取为附件 B 格式(例如ffmpeg -i input.mp4 -c:v copy -an output.h264,然后查找字节表示包含要删除的帧的 NAL 单元。删除这些字节直到下一个起始代码,然后保存流。

-frames:v或者,你可以使用提取第一个视频的选项来拼接视频n框架:

ffmpeg -i 输入.h264 -c:v 复制 -帧:vn输出.h264

然后,使用该-ss参数,您可以找到要重新开始的位置,并以相同的方式从那里剪切。您可以通过乘以n+1倍的帧速率。

如果您不想重新编码,据我所知没有更简单的方法了。

相关内容