Q-Logo 我的学习笔记分享

ffmpeg 录制电脑声卡播放的声音(内录)

ffmpeg 简介

ffmpeg 是一个常用的开源多媒体框架,可以运行在Linux, Mac OS X, Microsoft Windows, the BSDs, Solaris 等系统上。在ffmpeg 官网 http://ffmpeg.org/ 可以进入Download 页面下载对应平台的可执行程序包 ,以Windows 系统为例,下载地址为 https://ffmpeg.zeranoe.com/builds/ ,解压后在bin 目录下会有 ffmpeg.exe, ffplay.exe 和 ffprobe.exe 三个可执行程序 ,将此bin 目录配置到环境变量PATH 中,即可在CMD 命令行窗口使用它们。

内录

有时在剪辑视频时,我们需要录制电脑声卡播放的声音,也就是内录。内录其实就是将声卡这个设备作为音频流输入,ffmpeg 在声卡播放过程中,取到其播放的声音转存为一个本地文件。

查看设备

首先,在命令行运行如下命令,查看设备

ffmpeg -f dshow -list_devices true -i dummy

可以看到类似如下输出

[dshow @ 000001e8d086cd00] DirectShow video devices (some may be both video and audio devices)

[dshow @ 000001e8d086cd00] Could not enumerate video devices (or none found).

[dshow @ 000001e8d086cd00] DirectShow audio devices

[dshow @ 000001e8d086cd00] "麦克风阵列 (Realtek High Definition Audio)"

[dshow @ 000001e8d086cd00] Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{CA073824-0EB2-4921-AAC7-670C623FBA7A}"

dummy: Immediate exit requested

其中 DirectShow video devices (some may be both video and audio devices) 后面列出视频设备,Could not enumerate video devices (or none found).表明电脑没有视频设备(摄像头),DirectShow audio devices 后面列出音频设备,"麦克风阵列 (Realtek High Definition Audio)" 是麦克风,显然不是要找的声卡。如果出现这种情况,说明声卡可能未启用。

启用声卡

在右下角的音量按钮上点击右键,点击录音设备

声音右键.PNG

弹出声音录制对话框,在空白部分右键,确保 显示禁用的设备、显示已断开连接的设备 都被勾选,这样就能查看到所有的音频设备。

声音录制对话框.PNG

一般情况下,可以看到立体声混音设备已停用,这也是上面从命令行查看设备时,看不到这个设备的原因。在此设备上右键,点击启用,可以看到立体声混音设备准备就绪。

声音录制对话框-立体声混音准备就绪.PNG

如果是非一般情况,可能 显示禁用的设备、显示已断开连接的设备 都被勾选后,仍看不到立体声混音设备,那么可能是设备驱动有问题,先去更新驱动,再回到这个界面启用设备。

立体声混音设备准备就绪后,再回到命令行运行如下命令,查看设备

ffmpeg -f dshow -list_devices true -i dummy

此时输出如下

[dshow @ 0000017285f7cd00] DirectShow video devices (some may be both video and audio devices)

[dshow @ 0000017285f7cd00] Could not enumerate video devices (or none found).

[dshow @ 0000017285f7cd00] DirectShow audio devices

[dshow @ 0000017285f7cd00] "麦克风阵列 (Realtek High Definition Audio)"

[dshow @ 0000017285f7cd00] Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{CA073824-0EB2-4921-AAC7-670C623FBA7A}"

[dshow @ 0000017285f7cd00] "立体声混音 (Realtek High Definition Audio)"

[dshow @ 0000017285f7cd00] Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{89AF6220-955F-4F1F-A998-64F1E94006D7}"

dummy: Immediate exit requested

可以看到,"立体声混音 (Realtek High Definition Audio)",出现在音频设备列表中了。此时我们就可以将它作为音频流输入,用ffmpeg 进行内录了。

录制声卡声音

设备没为题后,用ffmpeg 录制声卡声音非常简单,只需要在电脑上播放要录制的声音,同时在命令行运行如下命令

ffmpeg -f dshow -i audio="立体声混音 (Realtek High Definition Audio)" test.wav

其中的-i audio="立体声混音 (Realtek High Definition Audio)" 就是指定将声卡播放的声音作为音频流输入,test.wav 是要保存的声音文件。录制结束后,按q 键即可停止录制。这时声音已经保存到test.wav 文件中,可以用任意音频播放软件播放。

音频文件转换为mp3 格式

上面保存的wav 格式的文件比较大,如果想要将其转换成mp3 格式的压缩音频文件,可以在命令行运行如下命令

ffmpeg -i test.wav -f mp3 test.mp3

还可以通过-ab 参数指定比特率

ffmpeg -i test.wav -f mp3 -ab 128 test_ab128.mp3