如何用FFmpeg API采集摄像头视频和麦克风音频,并实现录制文件的功能

本文介绍了如何使用FFmpeg API通过命令行枚举DShow设备,采集摄像头视频和麦克风音频,并实现录制为文件。通过FFmpeg的命令行工具和API,详细讲解了设备选择、数据采集、编码和录制的实现过程,提供了一个FFmpeg采集程序的实现心得。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    之前一直用Directshow技术采集摄像头数据,但是觉得涉及的细节比较多,要开发者比较了解Directshow的框架知识,学习起来有一点点难度。最近发现很多人问怎么用FFmpeg采集摄像头图像,事实上FFmpeg很早就支持通过DShow获取采集设备(摄像头、麦克风)的数据了,只是网上提供的例子比较少。如果能用FFmpeg实现采集、编码和录制(或推流),那整个实现方案就简化很多,正因为这个原因,我想尝试做一个FFmpeg采集摄像头视频和麦克风音频的程序。经过一个星期的努力,终于做出来了。我打算把开发的心得和经验分享给大家。我分三部分来讲述:首先第一部分介绍如何用FFmpeg的官方工具(ffmpeg.exe)通过命令行来枚举DShow设备和采集摄像头图像,这部分是基础,能够快速让大家熟悉怎么用FFmpeg测试摄像头采集;第二部分介绍我写的采集程序的功能和用法;第三部分讲解各个模块包括采集、编码、封装和录制是如何实现的。

(该例子代码的下载地址:http://download.csdn.net/download/zhoubotong2012/10252187

1.用命令行枚举采集设备和采集数据

  打开Cmd命令行控制台,进入FFmpeg的Bin目录,输入如下命令:

  ffmpeg -list_devices true -f dshow -i dummy  

  则在我的机器上显示如下结果:

  在上面的命令行窗口中列出了两个设备,一个是视频采集设备,另外是一个音频采集设备。另外,我们发现:音频设备的名称有乱码,因为其中有中文名称,后面在讲到用API采集数据的时候会提到解决这个问题的方法。

  接着我们输入另外一个命令行:

  ffmpeg -list_options true -f dshow -i video="USB 2861 Device"

  这个命令行的作用是获取指定视频采集设备支持的分辨率、帧率和像素格式等属性,返回的是一个列表,结果如下:

  这里我们看到采集设备支持的最大分辨率是720x576,输出像素格式是yuyv422,支持的帧率为29.97和25FPS。

  下面我们执行另外一条命令,将摄像头的图像和麦克风的音频录制保存成一个文件。命令如下:

  ffmpeg -f dshow -i video="USB 2861 Device" -f dshow -i audio="线路 (3- USB Audio Device)" -vcodec libx264 -acodec aac -strict -2 mycamera.mkv

  上面的命令行用video=指定视频设备,用audio=指定音频设备,后面的参数是定义编码器的格式和属性,输出为一个名为mycamera.mkv的文件。

  命令运行之后,控制台打印FFmpeg的运行日志,按“Q”键则中止命令。

  这里有些读者可能会问:采集设备不是支持多个分辨率吗?怎么设置采集时用哪一种分辨率输出?答案是用“-s”参数设置,若在上面的命令行加上“-s 720x576”,则FFmpeg就会以720x576的分辨率进行采集,如果不设置,则以默认的分辨率输出。

  注意:如果你运行上面命令ffmpeg报如下错误:Could not run filter

  Video=XXX:Input/output error

  则说明该版本的ffmpeg不支持该采集设备。这是由于旧版本的FFmpeg一个Bug引起的,不支持需要连接crossbar连接的视频采集设备(详情可参考这个帖子:https://ffmpeg.zeranoe.com/forum/viewtopic.php?t=722)。如果读者运行下面的Demo遇到打开视频采集设备失败,可能也是这个问题引起的. 新版本的FFmpeg(avdevice-58)修复了这个问题。所以如果你遇到这个问题,可以通过升级FFmpeg来解决。

  好,关于命令行的内容就介绍完了。

2.采集程序的使用

  这个程序叫“AVCapture”,能从视频采集设备(摄像头,采集卡)获取图像,支持图像预览;还可以采集麦克风音频;支持对视频和音频编码,支持录制成文件。这是一个MFC开发的窗口程序,界面比较简洁,如下图:

   开始采集前需要选择设备,点击文件菜单的“打开设备”,弹出一个设备选择对话框,如下图所示:

  在对话框里选择任意一个视频设备和音频设备,如果想启用某种设备,必须勾选右边的“启用”选项,但如果只需要用其中一种采集设备,则可以把其中一个禁用掉。

  按“确定”则开始采集数据了。视频和音频会编码后保存到一个文件中,这个文件的路径是在配置文件中设置的,打开程序目录下的Config.ini文件,则显示如下字段:

[Client]

file_path = D:\camera.mkv

File_path就是录制文件的路径。

  采集的图像默认显示到中间的窗口中,如果不想预览,可以在主菜单栏的“编辑”菜单中取消勾选“预览视频”。

3.功能模块实现

    该采集程序实现

评论 50
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值