《FFmpeg Basics》中文版-20-麦克风和摄像头
写在前面
如果您对音视频技术感兴趣,可以订阅我的专题:音视频专辑
也可以关注我的简书账户: 张芳涛,我后期会发布更多的音视频以及图像处理方面的文章。
正文
麦克风和网络摄像头(网络摄像头)是计算机设备的常用部分,而FFmpeg包含了它们的使用元素。
输入设备介绍
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 | 视频大小在捕获的视频 |
可用的相机和麦克风的列表
便携式电脑有一个内置的摄像头,或者我们可以通过USB接口连接到电脑。麦克风也经常在电脑里制造,或者我们可以把一个放在电脑的麦克风插孔上,通常是粉红色的,耳机的插孔是绿色的。要在Windows上显示所有可用的输入设备,我们使用dshow设备的list_devices选项,比如在命令中:
ffmpeg -list_devices 1 -f dshow -i dummy
输出取决于所使用的计算机,示例输出说明下一个图像:
输出显示有一个名为“HP webcam”的网络摄像头和一个名为“麦克风(Realtek High Defini)”的麦克风。麦克风的全称是“麦克风(Realtek高清)”,但显示的只有31个字符。
-
因为上面的命令是针对Windows的,所以我的MAC平台下面需要下面的命令:
ffmpeg -f avfoundation -list_devices true -i ""
-
显示效果如下:
可用选项的摄像头
Webcam通常有几种使用-list_options参数显示的工作模式。要显示来自以前输出的“HP webcam”网络摄像头的选项,我们可以使用以下命令:
ffmpeg -list_options true -f dshow -i video="HP Webcam"
我的测试命令:
ffmpeg -f avfoundation -r 30 -i "1:0" -t 20 /Users/zhangfangtao/Desktop/test2.mp4
- 声明一下,我的facetime没登录,也打不开,所以就录屏了,录了二十秒钟的屏幕
效果图如下:
输出取决于摄像机类型,通常显示可用的分辨率(帧大小)和帧速率:
显示和记录网络摄像机的输入
当我们知道网络摄像头的名称时,我们可以在屏幕上显示它的输入,或者将它记录到文件中。下一个命令显示带有默认设置的webcam输入(通常是最大大小和最大帧速率),第一个是ffplay媒体播放器,第二个是SDL输出设备:
ffplay -f dshow -i video="HP Webcam"
ffmpeg -f dshow -i video="HP Webcam" -f sdl "webcam via ffmpeg"
我的测试命令:
ffplay -f avfoundation -i "2:0"
-
录制的副屏的屏幕信息
-
解释一下,录制的是我的副屏屏幕信息。如果录制主屏幕信息,就是另外一个样子了。。。。:
要将webcam输入记录到文件中,我们可以使用以下命令:
ffmpeg -f dshow -i video="HP Webcam" webcam.avi
我的测试命令:
ffmpeg -f avfoundation -r 30 -i "0:0" -t 30 /Users/zhangfangtao/Desktop/test2.mp4
- 结果就是生成了一个30秒钟的视频文件,视频内容就是FaceTime里面的内容。
- 这里说明一下,我一开始是想生成一个10MB的视频文件,结果都录了二十多分钟了,还没有停下来的意思,我就强制终止了,结果那时候视频已经将近五十兆了。。。。大小设置真的很不准、。。。
Webcams通常有一个默认的媒体格式,比如AVI、MOV等,它们将输入保存在一个与网络摄像头相关的应用程序中。使用这些默认的文件格式有时会导致比使用其他文件格式更好的视频质量。
使用两个摄像头
如果有两个网络摄像头可用,我们可以通过USB端口将它们连接到电脑上,同时用ffmpeg工具显示它们的输出。下一个命令显示网络摄像头的名称,包括麦克风名,控制台输出如下:
ffmpeg -list_devices 1 -f dshow -i dummy
惠普Webcam的选项和如何显示它们的命令在Webcam的可用选项部分中,下面是第二个Webcam命名为Sirius USB2.0相机的选项:
显示输入网络摄像头我们可以使用覆盖过滤器和因为默认视频大小的摄像头是640 x480像素,我们第二个输入的大小设置为320 x240(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输入定位到左上角,将其放置到右下角,我们将宽度和高度参数添加到叠加过滤器中:叠加=W/2:H/2。
录音并发送到扬声器
与网络摄像头类似,麦克风也有几个工作模式,这些工作模式显示为-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