30行C++代码实现视频转图片/每秒24帧,说不定以后剪视频用得到

我最亲爱的伙计们,经过了一个漫长的51假期,鄙人宣布正式上班啦~

做自媒体的朋友肯定知道,有时候需要将视频一张张的截取出来,图片少的还好,真遇上多的,确实是挺累的。

还真是不巧,最近鄙人也在郁闷这个事。网上倒是有这样子的软件,不过需要花钱,像我这种一年半载用不到几次的人,充毛线钱?但不买吧,你一张张的截图那麻烦死,于是呢就有了今天的文章。

效果图:

30行C++代码实现视频转图片/每秒24帧,说不定以后剪视频用得到

环境拓扑:

系统:windows7

openCV:2.4.X

语言:C++

工具:Visual Studio 2013

注:opencv的环境变量配置:

鄙人的opencv安装路径为:D:\opencv\opencv,大家按实际情况来,把bin目录添加进去。

30行C++代码实现视频转图片/每秒24帧,说不定以后剪视频用得到

添加环境变量:

D:\opencv\opencv\build\\x64\vc12\bin;D:\opencv\opencv\build\\x86\vc12\bin;(不要忘记“;”)

VS工程文件:

打开Visual Studio 2013然后点击“文件”--“新建”--“项目”,创建一个“wind32控制台应用程序”

30行C++代码实现视频转图片/每秒24帧,说不定以后剪视频用得到

创建完毕之后就开始我们的配置开发环境,这很重要!

点项目-进入属性页,修改几个地方:

1.包含目录配置:

30行C++代码实现视频转图片/每秒24帧,说不定以后剪视频用得到

注:这个地方的路径填三个同样用;号分割:

(1)OpenCV安装目录下的...\include目录

(2)OpenCV安装目录下的...\include\opencv目录

(3)OpenCV安装目录下的...\include\opencv2目录

2.库目录配置:

OpenCV目录下的...x64\vc12\lib

30行C++代码实现视频转图片/每秒24帧,说不定以后剪视频用得到

注:此处的x64表示电脑是64位,32位选择x86,无论是32还是64,路径下的目录都是一样的。

拓扑:vc10表示VS是2010,vc11对应VS2012,vc12对应VS2013,vc14对应VS2015

3.链接器配置:

30行C++代码实现视频转图片/每秒24帧,说不定以后剪视频用得到

连接器就是OpenCV安装目录下的库,直接复制过来就行。

30行C++代码实现视频转图片/每秒24帧,说不定以后剪视频用得到

注:末尾带d的为debug,不带d的为release,如opencv_core249d.lib/opencv_core249.lib分别为debug/release

参考路径:D:\opencv\opencv\build\\x64\vc12\lib

你只需要把上面的这些乱七八糟的东西做完就可以进入正规了,看起来也不是特别麻烦嘿嘿嘿。

代码部分:

鄙人因为讲究“体面”,写的程序是带图形化界面的,当然这些都不是精华,我们今天只做一个控制台的程序就OK,都一样用~

30行C++代码实现视频转图片/每秒24帧,说不定以后剪视频用得到

几个小知识:

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帧每秒,效果还是不错的~

30行C++代码实现视频转图片/每秒24帧,说不定以后剪视频用得到

好嘞,今天的文章就写到这了。

源码明天微头条公布~

相关推荐