使用 ImageMagick 从 MPEG4 中提取每第 n 帧

Posted

技术标签:

【中文标题】使用 ImageMagick 从 MPEG4 中提取每第 n 帧【英文标题】:Extract every nth frame from a MPEG4 using ImageMagick 【发布时间】:2021-12-13 08:47:31 【问题描述】:

我想尝试从超过 6 分钟的大型 MPEG4 文件 (20.1MB) 中提取第 n 帧。但是,如果我尝试这样的事情:

convert video.mp4 *.png

我的整个计算机完全崩溃了。因此,我想尝试通过仅从 MPEG4 文件中提取每第 n 帧而不是提取超过 8000 张图像来节省一些时间和计算能力。如何实现?

【问题讨论】:

我认为使用ffmpeg 会更简单,请参阅superuser.com/a/391749 【参考方案1】:

我会使用“ffmpeg”来做到这一点。以 X 间隔提取 PNG 图像的命令可以这么简单...

ffmpeg -i input.mp4 -r 1 out%04d.png

使用选项-r 1 会将输出帧速率设置为每秒1。假设输入视频的帧速率为每秒 25 帧,则选项 -r 1 将大约每 25 帧输出一次。根据输入的帧率计算你需要的间隔。例如,要获取大约每 10 帧,请使用 -r 2.5

此示例中的输出文件名包含%04d,它创建了一个四位数字的编号序列,并用前导零填充。

【讨论】:

【参考方案2】:

VLC 媒体播放器可以做到这一点:

    以管理员身份运行 VLC。

    单击工具 - VLC 中的首选项。

    在“显示设置”下,点击“全部”。

    在“视频”下,选择“过滤器”,但不要展开它。勾选“场景视频过滤器”复选框。

    展开“滤镜”并选择“场景滤镜”,

    给出输出路径。

    设置“记录比率”框,例如 10,20 等。

    点击“保存”。

    单击媒体 - 打开视频并找到您的视频。耐心地让整个事情发挥作用。 VLC 会自动抓帧并保存到输出路径。

    禁用:单击工具 - 首选项。在“显示设置”下,单击“全部”。 在“视频”下,选择“过滤器”。取消选中“场景视频过滤器”。点击“保存”。

【讨论】:

以上是关于使用 ImageMagick 从 MPEG4 中提取每第 n 帧的主要内容,如果未能解决你的问题,请参考以下文章

配置 MPEG4MediaSink

来自 MPEG4 流的运动矢量和 DC 系数

使用 Imagemagick 从图像中自动裁剪文本(签名)并更改背景颜色

如何从python的list中提想要的值

使用 ImageMagick 从图像生成调色板

如何使用 ImageMagick 从文件夹中每个 JPG 图像的底部裁剪 486 像素?