使用ffmpeg快速生成视频截图

使用ffmpeg快速生成视频截图

由于项目的需求, 我需要对单个视频进行截图. 以前我使用的ffmpeg命令是这样的:

1

ffmpeg -i input.mkv -ss 00:10:00 -f image2 output.jpg

但是这个命令会花费相当长的时间. 对一个清晰的或者较大的视频文件进行操作, 会花费半分钟以上. 截图的时间越往后, 花费的时间也越长. 更为悲剧的是, 我的Nginx服务器会在等待15s之后返回 "504 Bad Gateway" 的错误, 尽管后台的截图操作仍然在进行中! 这真的不能忍受, 而且会给用户带来不好的体验. 试着上网搜了一下解决方案, 看到了博客 [1] . 大意是说, 出现这种情况的原因是由于参数的位置放置不正确造成的 "-ss" 要放在第一个参数位置. 调整它们的位置之后我再次尝试 ( test1.flv是一个h264编码的高清视频, 总时长为"00:04:11.37", 命令中 "-ss 00:02:06" 相当于在总长度的一半处截图) :

1

$timeffmpeg -ss 00:02:06 -i test1.flv -f image2 -y test1.jpg

奇迹出现了, 这一次用时不超过一秒钟:

1

2

3real    0m0.595s

user    0m0.416s

sys     0m0.092s

真的是大大缩短了截图时间!!.

至于原因是什么, 我也搞不懂, 也许是像 [1] 中所说的: "可能是ffmpeg看到第一个参数为 -ss的时候,马上跳转到时间线为指定的地方然后再打开视频文件进行处理,而如果最后看到的参数是-ss,先打开视频,然后慢慢往后遍历,直到遍历到时间为指定处. 通过观察ffmpeg的输出发现,实际处理的时候几乎就是这样。"

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 写在前面: 今天往移动硬盘上拷电影的时候忽然遇见文件过大无法拷贝的问题。因为一个移动硬盘如果分区为NTFS格式,那...
    vincentgemini阅读 14,433评论 0 9
  • 前言 如此强大的FFmpeg,能够实现视频采集、视频格式转化、视频截图、视频添加水印、视频切片、视频录制、视频推流...
    骚之哈塞給阅读 25,837评论 6 39
  • 前言 如此强大的FFmpeg,能够实现视频采集、视频格式转化、视频截图、视频添加水印、视频切片、视频录制、视频推流...
    sillen阅读 5,419评论 2 45
  • 0 概述 FFmpeg是一套领先的音视频多媒体处理开源框架,采用LGPL或GPL许可证。它提供了对音视频的采集、编...
    但行耕者阅读 6,996评论 0 19
  • 儿子已熟睡 我很疲惫 每天饭吃不好 还要和他们生气 儿子啊 妈妈烦他们 妈妈心疼你
    尘埃木木阅读 174评论 0 0