使用ffmpeg可以非常方便的生成视频截图,命令行下的mplayer也可以做视频截图,只不过mplayer在本质上还是调用ffmpeg来实现。ffmpeg 通过指定 -vcodec 参数为 mjpeg,或者指定 -f 参数为 mjpeg时,可以输出 jpg截图,指定 -vcodec参数为png,或者指定输出文件扩展名为png,可输出png截图。如果参数指定不当,会导致ffmpeg处理速度非常缓慢,以我本机影片《Revolution OS》中文名《操作系统的革命》为例。

截取视频的第5秒。通过 -ss 参数指定

# 输出 jpg  
ffmpeg -i RevolutionOS.rmvb sample.jpg -ss 00:00:05  -r 1 -vframes 1 -an -vcodec mjpeg 
 
# 输出 png  
ffmpeg -i RevolutionOS.rmvb sample.png -ss 00:00:05  -r 1 -vframes 1 -an -vcodec mjpeg

大概等待1秒钟,生成的jpg图像为19K,而png格式的图像为222k,大了很多倍,而质量上,并没有太大的差别,所以我决定生成jpg格式。

好现在抓取时间为1分05秒处的图片:

ffmpeg -i RevolutionOS.rmvb sample.jpg -ss 00:01:05  -r 1 -vframes 1 -an -vcodec mjpeg

几乎等待了近10秒钟,实际上,如果你抓取50分钟处的图像,可能要等上十几分钟,而很多网上通用的写法都存在这个问题,所以有的人转而采用mplayer来截屏,这个问题可能是ffmpeg的一个bug,如果你够聪明,调整一下参数 -ss,把这个参数放到第一个位置,马上就可以解决这个问题。

# 50分钟处截屏 
ffmpeg -ss 00:50:00  -i RevolutionOS.rmvb sample.jpg  -r 1 -vframes 1 -an -vcodec mjpeg 
# 或者使用 -f 参数指定输出的格式为 mjpeg ,效果一样 
ffmpeg -ss 00:50:00  -i RevolutionOS.rmvb sample.jpg  -r 1 -vframes 1 -an -f mjpeg

速度快的,几乎不到1秒钟。到底为什么会这样?可能是ffmpeg看到第一个参数为 -ss的时候,马上跳转到时间线为50分钟处然后再打开视频文件进行处理,而如果最后看到的参数是-ss,先打开视频,然后慢慢往后遍历,直到遍历到时间为50分钟处,通过观察ffmpeg的输出发现,实际处理的时候几乎就是这样。

ffmpeg快速获取视频截图的更多相关文章

  1. 使用ffmpeg快速生成视频截图

    1 ffmpeg -i input.mkv -ss 00:10:00 -f image2 output.jpg 但是这个命令会花费相当长的时间. 对一个清晰的或者较大的视频文件进行操作, 会花费半分钟 ...

  2. ios 获取视频截图

    #pragma mark -- 获取视频截图- (UIImage *)getThumbnailImage:(NSString *)videoURL{     AVURLAsset *asset = [ ...

  3. [原]通过配合ffmpeg.exe获取视频文件时长

    import subprocess import os import time def getTime(flvpath,fid): #file_str = '1.flv' file_str = flv ...

  4. js获取视频截图

    参考:https://segmentfault.com/q/1010000006717959问题:a.获取的好像是第一帧的图?第一帧为透明图时,获取的个透明图片b.得先加载视频到video,做视频上传 ...

  5. ios 从相册视频中获取视频截图

    //给image添加个分类 +(UIImage *)getImage:(NSURL: *)videoURL { AVURLAsset *asset = [[AVURLAsset alloc] init ...

  6. .net core Docker 容器添加ffmpeg 获取视频信息和截图

    最近在处理上传视频,需要获取视频信息和截图,这里就需要用到ffmpeg; 由于我的项目是在docker compose中运行调试,所以ffmpeg也需要在docker中能调用: 网上找到的方法在Doc ...

  7. java 实现视频转换通用工具类:视频截图-Ffmpeg(四)

    java 实现视频转换通用工具类:获取视频元数据信息(一) java 实现视频转换通用工具类:视频相互转换-总方法及Mencoder(二) java 实现视频转换通用工具类:视频相互转换-Ffmpeg ...

  8. 使用ffmpeg 对视频截图,和视频转换格式

    //执行CMD命令方法 public static void CmdProcess(string command)//调用CMD        {            //实例化一个进程类      ...

  9. Java Web 中使用ffmpeg实现视频转码、视频截图

    Java Web 中使用ffmpeg实现视频转码.视频截图 转载自:[ http://www.cnblogs.com/dennisit/archive/2013/02/16/2913287.html  ...

随机推荐

  1. Jetpack 架构组件 LiveData ViewModel MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  2. 一步步教你轻松学支持向量机SVM算法之理论篇1

    一步步教你轻松学支持向量机SVM算法之理论篇1 (白宁超 2018年10月22日10:03:35) 摘要:支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于 ...

  3. Lombok 使用攻略

    1. Lombok 简介 Lombok 可以通过简单的注解来帮助我们简化消除一些必须有但显得很臃肿的Java代码,通过使用对应的注解,可以在编译源码的时候生成对应的方法. Lombok 既是一个 ID ...

  4. 【Linux】常见公共DNS地址

    如果您是程序员.系统管理员或任何类型的 IT 工作者,那么您可能有自己最喜欢的用于故障排除的 IP 地址.而且你可能已经用了好几年了. 这些 ip 可用于: ping 测试连接 使用 dig 或 ns ...

  5. Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -

    mysql -A不预读数据库信息(use dbname 更快)—Reading table information for completion of table and column names Y ...

  6. ubantu 14.04重置密码

    https://blog.csdn.net/weixin_37909391/article/details/80691601

  7. 猿题库从 Objective-C 到 Swift 的迁移

    猿题库从 Objective-C 到 Swift 的迁移 引言 相信没有人会怀疑,Swift 是 iOS 开发未来的主流语言,但是由于 Swift 语言的不断变化以及庞大的迁移成本,真正把项目迁移到 ...

  8. 【LeetCode】二叉搜索树的前序,中序,后续遍历非递归方法

    前序遍历 public List<Integer> preorderTraversal(TreeNode root) { ArrayList<Integer> list = n ...

  9. Python 词典增加和删除

    增加 dict 里面的属性,必须先初始化 key,然后使用 append 添加值 #!/usr/bin/python3 message = dict() #message = { # "10 ...

  10. .net IIS MVC Rest api 跨域 PUT DELETE 404 无法使用问题解决方案

    一.WebConfig配置法(system.webServer 重点是 httpProtocol handlers) http://www.jinxuliang.com/blog/article/re ...