这个系列文章我们来介绍一位海外工程师如何探索 FFmpeg Basics 音视频技术,对于想要开始学习音视频技术的朋友,这些文章是份不错的入门资料,这是第 20 篇:FFmpeg 麦克风和摄像头。
—— 来自公众号“关键帧Keyframe”的分享
麦克风和摄像头(网络摄像头)是计算机设备的常用部分,FFmpeg 包含了它们的使用元素。
1、输入设备介绍
FFmpeg 可以识别麦克风和摄像头等输入设备,这些输入设备被定义为可以从附加的多媒体设备访问数据的元素。在 Windows 上,麦克风和摄像头可以通过 dshow输入设备进行访问,如下表所示:
| 描述 | 在 Windows 操作系统上的输入设备,支持的是音频和视频设备 |
|---|---|
| 语法 | options type=media_type[:type=media_type] [ ] 中的参数是可选的 |
| 类型参数的描述 | |
| type | 值可以是视频或音频 |
| 选项参数的可用值 | |
| audio_buffer_size | 音频设备缓冲区大小(以毫秒为单位)(可直接影响延迟,取决于设备),默认使用设备的默认缓冲区大小(通常为 500ms 的倍数)。将此值设置得过低可能会降低性能。 |
| audio_device_number | 具有相同名称的设备的音频设备号(从 0 开始,默认为 0) |
| channels | 捕获音频中的通道数 |
| framerate | 捕获的视频中的帧频 |
| list_devices | 如果设置为 1,则打印设备列表并退出 |
| list_options | 如果设置为 1,则打印选定设备的选项列表并退出 |
| pixel_format | 使用的像素格式,只有在视频编解码器没有设置或设置为 rawvideo 时才能设置 |
| sample_rate | 捕获的音频的采样率(以 Hz 为单位) |
| sample_size | 捕获的音频的样本大小(以位为单位) |
| video_device_number | 同名设备的视频设备编号(从 0 开始,默认为 0) |
| video_size | 捕获的视频的视频大小 |
2、可用的相机和麦克风的列表
便携式电脑通常有一个内置的摄像头,或者我们可以通过 USB 接口将摄像头连接到电脑。麦克风也经常被内置在电脑中,或者我们可以将一个麦克风插入电脑的麦克风插孔,通常是粉红色的,而耳机的插孔是绿色的。要在 Windows 上显示所有可用的输入设备,我们使用带有 dshow 设备的 list_devices 选项,例如在命令中:
ffmpeg -list_devices 1 -f dshow -i dummy
输出取决于所使用的计算机,示例输出如下图所示:

输出显示了一个名为 “HP Webcam” 的摄像头和一个名为 “麦克风 (Realtek High Defini)” 的麦克风。麦克风的全称是 “麦克风 (Realtek 高清)”,但显示的只有 31 个字符。
3、可用选项的摄像头
Webcam 通常有几种工作模式,这些模式可以通过设置 -list_options参数为 true或 1来显示。要显示之前输出中的 “HP Webcam” 网络摄像头的选项,可以使用以下命令:
ffmpeg -list_options true -f dshow -i video="HP Webcam"
输出取决于摄像机类型,通常显示可用的分辨率(帧大小)和帧速率:

4、显示和记录网络摄像机的输入
当我们知道网络摄像头的名称时,我们可以在屏幕上显示它的输入,或者将它记录到文件中。以下命令显示带有默认设置的 webcam 输入(通常是最大大小和最大帧速率),第一个是 ffplay 媒体播放器,第二个是 SDL 输出设备:
ffplay -f dshow -i video="HP Webcam"
ffmpeg -f dshow -i video="HP Webcam" -f sdl "webcam via ffmpeg"
要将 webcam 输入记录到文件中,可以使用以下命令:
ffmpeg -f dshow -i video="HP Webcam" webcam.avi
Webcams 通常有一个默认的媒体格式,比如 AVI、MOV 等,它们将输入保存在一个与网络摄像头相关的应用程序中。使用这些默认的文件格式有时会导致比使用其他文件格式更好的视频质量。
5、使用两个摄像头
如果有两个网络摄像头可用,可以通过 USB 端口将它们连接到电脑上,并同时使用 FFmpeg 工具显示它们的输出。以下命令显示网络摄像头的名称,包括麦克风名,控制台输出如下:
ffmpeg -list_devices 1 -f dshow -i dummy

惠普 Webcam 的选项和如何显示它们的命令在 “Webcam 的可用选项” 部分中。下面是第二个 Webcam 命名为 Sirius USB2.0 相机的选项:

要显示输入网络摄像头,可以使用覆盖过滤器。由于默认视频大小的摄像头是 640×480 像素,我们为第二个输入的大小设置为 320×240(qvga)使用 -video_size选项。该命令(单引号返回错误,只能使用双引号):
ffmpeg -f dshow -i "video=Sirius USB2.0 Camera" -f dshow -video_size qvga ^ -i "video=HP Webcam" -filter_complex overlay -f sdl "2 webcams"
前面的命令将第二个 webcam 输入定位到左上角。要将其放置在右下角,我们将宽度和高度参数添加到叠加过滤器中:overlay=W/2:H/2。
6、录音并发送到扬声器
与网络摄像头类似,麦克风也有几个工作模式,这些模式显示为设置 -list_options参数为 true或 1。对于输入参数,使用音频类型而不是视频。在前几节中使用 -list_devices选项列出的麦克风的命令是:
ffmpeg -list_options 1 -f dshow -i "audio=Microphone (Realtek High Defini"
要将声音从麦克风传到扬声器,可以使用以下命令:
ffplay -f dshow -i audio="Microphone (Realtek High Defini"
将声音记录到音频文件的命令如下:
ffmpeg -f dshow -i audio="Microphone (Realtek High Defini" -t 60 mic.mp3
从麦克风和网络摄像头录制音频和视频,可以使用以下命令:
ffmpeg -f dshow -i audio="Microphone (Realtek High Defini":^ video="HP Webcam" webcam_with_sound.avi
音视频方向学习、求职,欢迎加入我们的星球
丰富的音视频知识、面试题、技术方案干货分享,还可以进行面试辅导

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。