河源市网站建设_网站建设公司_会员系统_seo优化
2025/12/25 21:27:37 网站建设 项目流程

2024年1月15日 12:12 周一

原文链接:如何使用FFmpeg从视频中提取图像 - Bannerbear --- How to Extract Images from a Video Using FFmpeg - Bannerbear

Basic Command 基本命令

ffmpeg -i input.mp4 %04d.png

%04d.png 是一种序列模式类型,用于通过使用零填充序列号对输出文件名进行排序来解释输出文件名,例如。0001.png、0002.png、0003.png 等

默认情况下,FFmpeg 使用与视频源相同的帧速率。帧速率也称为每秒帧数 (fps)。它是衡量一秒钟内出现多个帧的速度的指标。当 FFmpeg 按照其帧速率从视频中提取图像时,帧速率将决定每秒视频将提取多少图像。

要了解视频的帧速率,可以运行以下命令:

ffmpeg i input.mp4

有关视频的信息将打印在终端中。您应该得到类似于以下内容的结果:

image

从上面的屏幕截图来看,视频的帧速率为 30 fps。这意味着在运行 basic 命令 ffmpeg -i input.mp4 %04d.png 时,每秒视频将提取 30 张图像。因此,总共将从输入视频生成 274 张图像。

高级操作 Advanced Operations

我们可以通过在基本命令中添加一些额外的参数来生成不同的输出。让我们看看我们能做些什么。

更改帧速率 Changing the Frame Rate

可以通过在基本命令中添加参数 -vf fps​ 或 -filter:v fps 帧数来更改帧速率。它是一个过滤器,可根据需要通过复制或删除帧将视频转换为指定的恒定帧速率。

如果视频的原始帧率高于指定的帧率,则视频中的帧将被丢弃以匹配指定的帧率。相反,如果原始帧速率较低,则视频的帧将被复制。

例如,添加到 -vf fps=1 basic 命令会将视频重新编码为 1 fps。由于原始帧速率为 30 fps,视频的帧将被丢弃。从视频中提取的图像总数将变为 9(1 张图像 x 9.13 秒)

fmpeg -i input.mp4 -vf fps=1 %04d.png

Note : -vf​ is an alias for -filter:v.

注意 : -vf 是 的别名 -filter:v

每 N 秒提取一次图像 Extracting Images Every N Seconds

通过添加到 -vf fps=1 基本命令中,您可以为视频的每一秒提取图像。每 n 秒提取一张图像怎么样?

为此,可以添加相同的参数 -vf fps​ ,但使用不同的值。您可以使用分数以恒定的时间间隔提取图像。例如, -vf fps=1/4 将每 4 秒输出一张图像

ffmpeg -i input.mp4 -vf fps=1/4 %04d.png

同样, -vf fps=2/4 每 2 秒将输出 4 张图像。

在给定时间提取图像 Extracting Images at a Given Time

在教程中 如何使用 FFmpeg 从视频制作 GIF, -ss "x seconds"​ 并 -t "y seconds” 添加到命令中以指定我们要转换的视频部分。

-ss 参数告诉 FFmpeg 在输入文件中查找 x 秒。我们可以使用相同的参数来告诉 FFmpeg 在输入视频中寻找 x 秒并开始从该特定点提取图像。

-ss​ 参数需要放在命令中的输入视频 -i 之前。与其他方法相比,这将使用关键帧解析输入,并使图像提取速度更快。

ffmpeg -ss 00:00:04 -i input.mp4 %04d.png

上面的命令会查找 00:04 视频,并从该点开始提取图像,直到视频结束。当视频的总持续时间变为 5.13 秒(30 张图像 x 5.13 秒)时,您将总共拥有 154 张图像。

下面的比较表明,图像提取从 00:04 .

视频截图暂停在 00:04

image

提取的第一张图像(0001.png):

image

如果要在特定点停止提取图像,请添加到 -t "y seconds” 命令中。例如,以下命令将在提取开始 2 秒后停止提取。

ffmpeg -ss 00:00:04 -t 2 -i input.mp4 %04d.png

下面是视频暂停时间的屏幕截图,距离指定的开始时间 00:06 有 2 秒

image

这是提取的最后一张图像(0060.png)

image

截取单个屏幕截图 Taking a Single Screenshot

要像通常截取屏幕截图一样在给定时间仅提取图像,请添加到 -frames:v 1 命令中。这将在指定的时间输出单个帧。

例如,此命令将输出视频的 00:04 单帧

ffmpeg -ss 00:00:04 -i input.mp4 -frames:v 1 screenshot.png

结果:

image

调整框架大小 Resizing the Frame

默认情况下,图像的大小将与原始视频相同。如果要调整图像大小,可以在命令中添加 -s 后跟新尺寸。

下面的命令会将图像从原始尺寸 1200 × 670 像素缩小到 640×480 像素

ffmpeg -i input.mp4 -s 640x480 %04d.jpg

image

虽然该命令工作正常,但纵横比不正确。为了确保输出图像与原始视频的比例相同,我们可以使用 scale 过滤器。

scale 过滤器是 FFmpeg 的一项非常强大的功能,它允许您指定图像的宽度或高度,并将其他组件设置为 -1 以保持相同的比例。

ffmpeg -i input.mp4 -vf scale=640:-1 %04d.png

上面的命令将宽度设置为 640 像素。输出图像的高度将根据输入视频的纵横比自动计算。生成的图像的尺寸为 640×357 像素。

image

如果要改为指定高度,请将第一个值设置为 -1,将第二个值设置为新高度。例如,添加 -vf scale=-1:357 会将高度设置为 357 像素,并生成与上图尺寸相同的图像。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询