FFMPEG-将视频转换为图像

问题描述 投票:0回答:4

如何使用 ffmpeg 将视频转换为图像?例如,我有一个总持续时间为 60 秒的视频。我想要不同持续时间组之间的图像,例如 2-6 秒之间,然后是 15-24 秒之间,等等。使用 ffmpeg 可以吗?

ffmpeg
4个回答
138
投票

关于此的 ffmpeg 官方文档:视频的每 X 秒创建一个缩略图

每秒输出一张图像:

ffmpeg -i input.mp4 -vf fps=1 out%d.png

每分钟输出一张图像:

ffmpeg -i test.mp4 -vf fps=1/60 thumb%04d.png

每10分钟输出一张图像:

ffmpeg -i test.mp4 -vf fps=1/600 thumb%04d.png

82
投票

您可以使用选择过滤器来选择一组自定义范围:

ffmpeg -i in.mp4 -vf select='between(t,2,6)+between(t,15,24)' -vsync 0 out%d.png

3
投票

另一种方法是使用 python 的 ffmpeg 库,如果您不想将 ffmpeg 添加到您的 PC 环境,则特别有用。首先在 conda 上安装 ffmpeg:

conda install ffmpeg
然后你可以编写如下脚本:

import ffmpeg
input_file_name = 'input_video.mp4'
(ffmpeg
 .input(input_file_name )
 .filter('fps', fps=10, round = 'up')
 .output("%s-%%04d.jpg"%(input_file_name[:-4]), **{'qscale:v': 3})
 .run())

2
投票

除了Gyan答案中的选择过滤器(我与

eq
而不是
between
一起使用)之外,我在手册中遇到了另一个过滤器:
thumbnail

在给定的序列中选择最具代表性的帧 连续帧。

过滤器接受以下选项:

  • n:设置要分析的帧批量大小;在一组 n 帧中,过滤器将选择其中一个,然后处理下一批 n 帧直到结束。默认值为 100。

由于过滤器跟踪整个帧序列,因此较大的 n 值会导致更高的内存使用量,因此值不宜过高 推荐。

示例

  • 每50帧提取一张图片:

    thumbnail=50
    
  • 使用 ffmpeg 创建缩略图的完整示例:

    ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png
    
© www.soinside.com 2019 - 2024. All rights reserved.