【发布时间】:2017-02-26 13:05:40
【问题描述】:
如何使用 ffmpeg 将视频转换为图像?示例我有一个总持续时间为 60 秒的视频。我想要不同持续时间之间的图像,例如 2-6 秒之间,然后是 15-24 秒之间,依此类推。使用 ffmpeg 可以吗?
【问题讨论】:
-
我将评论与所有答案相关的内容。您可能不想以 png 格式输出。以 jpg 格式输出。如果想要质量好,加
-qscale:v 2参数。
标签: ffmpeg
如何使用 ffmpeg 将视频转换为图像?示例我有一个总持续时间为 60 秒的视频。我想要不同持续时间之间的图像,例如 2-6 秒之间,然后是 15-24 秒之间,依此类推。使用 ffmpeg 可以吗?
【问题讨论】:
-qscale:v 2参数。
标签: ffmpeg
关于此的官方 ffmpeg 文档:Create a thumbnail image every X seconds of the video
每秒输出一张图片:
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
【讨论】:
fps=1/600 指定每十分钟一张图片。每分钟一张图片使用fps=1/60
您可以对一组自定义范围使用选择过滤器:
ffmpeg -i in.mp4 -vf select='between(t,2,6)+between(t,15,24)' -vsync 0 out%d.png
【讨论】:
-vf fps=5,select='between(t,2,6)+between(t,15,24)'
ffmpeg -ss 10 -i video.mp4 -to 12 -copyts -vf fps=1 v2f/out%d.png 这将创建 10 秒到 12 秒的图像。我可以在这里设置多个持续时间吗?
vsync 0 防止这种情况发生。
另一种方法是使用 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())
【讨论】:
除了 Gyan 回答中的选择过滤器(我使用 eq 而不是 between),我在手册中遇到了另一个过滤器:thumbnail
在给定的序列中选择最具代表性的帧 连续帧。
过滤器接受以下选项:
- n:设置要分析的帧批量大小;在一组 n 帧中,过滤器将选择其中一个,然后处理下一批 n 帧直到结束。默认值为 100。
由于过滤器跟踪整个帧序列,因此更大的 n value 会导致更高的内存使用率,所以高 value 不是 推荐。
示例
每 50 帧提取一张图片:
thumbnail=50使用 ffmpeg 创建缩略图的完整示例:
ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png
【讨论】: