30行C++代码实现视频转图片/每秒24帧,说不定以后剪视频用得到
我最亲爱的伙计们,经过了一个漫长的51假期,鄙人宣布正式上班啦~
做自媒体的朋友肯定知道,有时候需要将视频一张张的截取出来,图片少的还好,真遇上多的,确实是挺累的。
还真是不巧,最近鄙人也在郁闷这个事。网上倒是有这样子的软件,不过需要花钱,像我这种一年半载用不到几次的人,充毛线钱?但不买吧,你一张张的截图那麻烦死,于是呢就有了今天的文章。
效果图:
环境拓扑:
系统:windows7
openCV:2.4.X
语言:C++
工具:Visual Studio 2013
注:opencv的环境变量配置:
鄙人的opencv安装路径为:D:\opencv\opencv,大家按实际情况来,把bin目录添加进去。
添加环境变量:
D:\opencv\opencv\build\\x64\vc12\bin;D:\opencv\opencv\build\\x86\vc12\bin;(不要忘记“;”)
VS工程文件:
打开Visual Studio 2013然后点击“文件”--“新建”--“项目”,创建一个“wind32控制台应用程序”
创建完毕之后就开始我们的配置开发环境,这很重要!
点项目-进入属性页,修改几个地方:
1.包含目录配置:
注:这个地方的路径填三个同样用;号分割:
(1)OpenCV安装目录下的...\include目录
(2)OpenCV安装目录下的...\include\opencv目录
(3)OpenCV安装目录下的...\include\opencv2目录
2.库目录配置:
OpenCV目录下的...x64\vc12\lib
注:此处的x64表示电脑是64位,32位选择x86,无论是32还是64,路径下的目录都是一样的。
拓扑:vc10表示VS是2010,vc11对应VS2012,vc12对应VS2013,vc14对应VS2015
3.链接器配置:
连接器就是OpenCV安装目录下的库,直接复制过来就行。
注:末尾带d的为debug,不带d的为release,如opencv_core249d.lib/opencv_core249.lib分别为debug/release
参考路径:D:\opencv\opencv\build\\x64\vc12\lib
你只需要把上面的这些乱七八糟的东西做完就可以进入正规了,看起来也不是特别麻烦嘿嘿嘿。
代码部分:
鄙人因为讲究“体面”,写的程序是带图形化界面的,当然这些都不是精华,我们今天只做一个控制台的程序就OK,都一样用~
几个小知识:
1.为什么char *xx=new char[x]最后需要delete[],而平时用的char *x=“xxxx”却不需要?
在C++中new出的空间是创建在堆上,系统不会清除,由人工干预;而第二种创建的空间在栈上,由系统自动清理。
2.sprintf跟printf有什么区别?
sprintf函数会将内容打印到某个指定字符串中,而printf函数是打印输出到屏幕上。sprintf函数多用在完成其他数据类型转换成字符串类型的操作中。
测试效果:
我们把代码写完,点编译。
注:鄙人这里直接编译运行,cmd黑框会一闪而过,目前原因不明,只能去工程的debug目录在cmd下运行。
我们找一个10秒的视频放在debug的目录下面,也就是我们编译好的exe文件的根目录,然后cmd运行我们变异好的程序,我们可以发现在指定的图片保存目录下生成了296张图片。
这个1.MP4的时长为12秒,296/12=24.4计算结果为24帧每秒,效果还是不错的~
好嘞,今天的文章就写到这了。
源码明天微头条公布~