如何在特定的时间提取ffmpeg的video截图?
有很多教程和内容展示了如何使用ffmpeg从video中提取多个屏幕截图。 你设置-r,你甚至可以开始一定的金额。
但是我只想要1张截图,例如01:23:45英寸,或者1张截图,86%英寸。
这是所有可能的ffmpegthumbnailer但它是另一个依赖我不想依靠。 我希望能够用ffmpeg来做到这一点。
使用-ss
选项:
ffmpeg -ss 01:23:45 -i input -vframes 1 -q:v 2 output.jpg
-
对于JPEG输出,使用
-q:v
来控制输出质量。 全范围是1-31的线性范围,其中较低的值导致较高的质量。 2-5是一个很好的尝试。 -
selectfilter为更复杂的需求提供了一种替代方法,例如仅select特定的帧types,或每100个1个等等。
-
在input之前放置
-ss
会更快。 请参阅FFmpeg Wiki:寻求和ffmpeg
cli工具文档的摘录:
-ss
位置(input/输出)当用作input选项时(在
-i
之前),在这个input文件中寻找位置。 请注意,在大多数格式中,不可能准确地查找,因此ffmpeg
将在位置前寻找最近的查找点。 当转码和-accurate_seek
被启用时(默认),search点和位置之间的这个额外的分段将被解码和丢弃。 当进行stream式复制或使用-noaccurate_seek
时,它将被保留。当用作输出选项(在输出文件名之前)时,解码但丢弃input,直到时间戳到达位置。
位置可以是秒或者
hh:mm:ss[.xxx]
forms。
FFMpeg可以通过寻找给定的时间戳并提取一个帧作为一个图像来做到这一点,例如参见:
ffmpeg -i input_file.mp4 -ss 01:23:45 -vframes 1 output.jpg
让我们来解释一下选项:
-i input file the path to the input file -ss 01:23:45 seek the position to the specified timestamp -vframes 1 only handle one video frame output.jpg output filename, should have a well-known extension
-ss
参数接受HH:MM:SS[.xxx]
forms的值或以秒为单位的数字。 如果您需要百分比,则需要事先计算video时长。