如何在给定时间为带有ffmpeg的视频提取1屏幕截图



有许多教程和资料展示了如何使用ffmpeg从视频中提取多个屏幕截图。你设置 -r,你甚至可以开始一定数量。

但我只想要 1 张截图,比如 01:23:45 在。或 1 张 86% 的屏幕截图。

使用ffmpeg缩略图器都可以做到这一点,但这是我不想依赖的另一个依赖项。我希望能够用ffmpeg做到这一点。

使用-ss选项:

ffmpeg -ss 01:23:45 -i input -frames:v 1 -q:v 2 output.jpg
  • 对于 JPEG 输出,请使用 -q:v 来控制输出质量。全范围是 1-31 的线性刻度,其中较低的值导致较高的质量。2-5 是一个很好的尝试范围。

  • 选择
  • 过滤器为更复杂的需求提供了一种替代方法,例如仅选择某些帧类型,或每 100 个帧类型中选择 1 个等。

  • 在输入之前放置-ss会更快。请参阅 FFmpeg Wiki:寻找和 ffmpeg cli 工具文档的摘录:

-ss位置(输入/输出(

当用作输入选项(在 -i 之前(时,在此输入文件中查找以定位。请注意,在大多数格式中,无法搜索没错,所以ffmpeg将寻找到之前最近的搜索点位置。启用转码和-accurate_seek后(默认(,寻道点和位置之间的这个额外段将被解码和丢弃。执行流复制时或何时 -noaccurate_seek被使用,它将被保留。

当用作输出选项(在输出文件名之前(时,解码但丢弃输入,直到时间戳到达位置。

位置可以是秒或hh:mm:ss[.xxx]形式。

FFmpeg 可以通过查找给定的时间戳并精确提取一帧作为图像来做到这一点,例如:

ffmpeg -i input_file.mp4 -ss 01:23:45 -frames:v 1 output.jpg

让我们解释一下选项:

-i input file           the path to the input file
-ss 01:23:45            seek the position to the specified timestamp
-frames:v 1             only handle one video frame
output.jpg              output filename, should have a well-known extension

-ss 参数接受格式为 HH:MM:SS[.xxx] 或以秒为单位的数字的值。如果您需要百分比,则需要事先计算视频持续时间。

最新更新