1.介绍
先介绍下ffmpeg里面的三个exe文件。
我们打开ffmpeg的官网,下载时会发现有三个版本,分别是Dev、Shared、Static。Dev是开发版本,里面包含有库文件(.lib)和头文件(.h),但是没有exe文件。Shared文件夹里面有ffmpeg.exe、ffplay.exe、ffprobe.exe,除此之外还有一些dll文件,比如说avcodec-58.dll、avdevice-58.dll等。它的exe文件比较小,运行时需要调用dll的功能。Static文件夹里面只有三个exe,dll文件被集成在exe里面了,所以它的exe文件比较大。Shared版本和Static版本可以在命令行中打开,我们打开系统命令行界面,切换目录,就可以运行。
ffmpeg.exe:用于转码的应用程序。举个例子,我们把input.avi转码为output.h264,代码如下:
ffmpeg -i input.avi -b:v 640k output.ts
内部的具体参数可以参考这里。
ffplay.exe:用于播放的应用程序。一个简单的播放例子:
ffplay test.avi
具体的使用方法和快捷键可以参考雷神的博客这里。
ffprobe.exe:用于查看文件格式的应用程序。
2.环境配置
具体的环境配置可以参考这里。
3.调用摄像头
环境配置好后,我们先尝试用ffmpeg调用自己的摄像头。
可以打开命令行程序,跳转到ffmpeg.exe的文件夹,输入以下命令调用摄像头。也可以利用C++的winexec()函数打开摄像头,程序如下。
命令行命令:
ffplay - f dshow - i video = "HD Pro Webcam C920"
在VS工程里打开摄像头的代码:
#include <stdio.h>
#include <windows.h>
int main(int, char**)
{
char* CommandVedio = "ffplay -f dshow -i video=""HD Pro Webcam C920";
WinExec(CommandVedio, SW_SHOW);
return 0;
}
"HD Pro Webcam C920"是我的摄像头名称,如果不知道,可以用以下的命令来获取自己的设备称号。
ffmpeg -list_devices true -f dshow -i dummy
运行后,会出现下面的结果。这里的video devices和audio devices就是自己的视频和音频设备。
除了上面的方式外,我们也可以利用VFW读取摄像头的数据。
ffplay -f vfwcap -i 0
4.编码
调用摄像头后,将其编码为H.264,只需要在原来的基础上添加几个命令即可。
ffmpeg -f dshow -i video="HD Pro Webcam C920" -vcodec libx264 mycamera.h264
或者这样
ffmpeg -f vfwcap -i 0 -vcodec libx264 mycamera.h264
和上面一样,如果想在VS工程里运行,代码如下
#include <stdio.h>
#include <windows.h>
int main(int, char**)
{
char* opencamera = "ffmpeg -f vfwcap -i 0 -vcodec libx264 mycamera.h264";
//char* opencamera = "ffmpeg -f dshow -i video=""HD Pro Webcam C920"" -vcodec libx264 mycamera.h264 ";
WinExec(opencamera, SW_SHOW);
return 0;
}
编码后的h264文件保存在VS的工程目录下,其实这里不仅仅可以生成h264,也可以改为mycamera.avi/mkv等格式。
这里只是学会了如何调用ffmpeg.exe文件进行编码,对于内部的编码流程,以及许多重要的函数,并没有做太多了解。 ffmpeg的编码过程其实是调用了libx264库完成的,所以我们可以不需要ffmpeg的源代码,直接调用libx264库,将输入的YUV数据编码为h264,这也是自己接下来的学习任务。