如何使用 FFmpeg 录制声卡上正在播放的内容?

如何使用 FFmpeg 录制声卡上正在播放的内容?

我正在尝试录制 Windows 8.1 中声卡上正在播放的内容

我运行了以下命令来确定我拥有哪些设备:

ffmpeg -list_devices true -f dshow -i dummy

列出的输出:

DirectShow video devices (some may be both video and audio devices)
  "Built-in iSight"
DirectShow audio devices
  "Microphone (Cirrus Logic CS4206A (AB 71))"
  "Digital Audio (S/PDIF) (Cirrus Logic CS4206A (AB 71))"

由此我假设这Digital Audio (S/PDIF) (Cirrus Logic CS4206A (AB 71))是我的唯一的输出声卡。

因此我放上了一些带有声音的随机 YouTube 视频并运行以下命令来录制时长为 10 秒的 mp3。

ffmpeg -f dshow -i audio="Digital Audio (S/PDIF) (Cirrus Logic CS4206A (AB 71))" -acodec libmp3lame  -t 10 out.mp3

它确实录制了 10 秒的片段,但没有任何声音。
当我查看播放设备时,我发现实际播放音频的设备是Speakers,而不是Digital Audio (S/PDIF)在此处输入图片描述

我尝试在 ffmpeg 命令行中替换Digital Audio (S/PDIF)Speakers但显然无法识别该设备。

我见过类似的问题,有人建议使用“立体声混音”——但我在电脑上根本看不到它。下载最新的驱动程序并没有将它添加到设备列表中。

那么我遗漏了什么?如何录制声卡上的音频

答案1

如果这对任何人来说仍然有意义。您需要打开上面显示的声音设备窗口,然后单击空白处的 RMB 并选择显示已禁用设备以切换立体声混音设备可见性

答案2

首先打开上面屏幕截图中显示的“声音”窗口,选择“录音”选项卡,然后右键单击窗口并选择“显示已禁用的设备”来启用立体声混音设备可见性。这个帖子有更详细的说明。

启用立体声混音后,您需要将扬声器或耳机插入音频输出。然后运行命令以获取耳机/扬声器输出的名称。

ffmpeg -list_devices true -f dshow -i dummy

以下是在 Windows 10 Home 上获取音频的完整命令:

ffmpeg -f dshow -i audio="Microphone (Realtek High Definition Audio)" D:\Audio\output.mp3

以下是同时播放音频和视频的命令:

ffmpeg -f gdigrab -framerate ntsc -video_size 1920x1080 -i desktop  -f dshow -i audio="Microphone (Realtek High Definition Audio)" -vcodec libx264 -pix_fmt yuv420p -preset ultrafast D:\Movies\output.mp4

这个视频输出也适用于我的 iPad。我将一台笔记本电脑插入显示器,这将录制显示器的全屏和扬声器发出的音频。

答案3

这个答案在实践中不起作用,因为如果插入耳机它就不起作用。

我可以使用上述说明让 ffmpeg 进行录制(但他们忘了告诉人们他们需要运行 mmsys.cpl,并假设人们知道或记得如何执行此操作,但这不太可能,除非您在过去 6 个月内至少执行过 7 次)。但这只有在我插入一些耳机以使机器安静以免干扰房间时才有效,这对于缺少可拔下的外部扬声器的笔记本电脑至关重要。

除了详细说明为什么该主题中的其他 5 名用户偶尔无法使其工作。(我也遇到了偶尔出现的问题,直到我意识到我出于两个原因插拔了耳机。然后我意识到插入耳机,静音录音)

我不认为有任何明显的解决方法。到目前为止,我试图在混音器中更加具体。我还运行了 ffmpeg 的虚拟代码,看看是否弹出了更多设备。如果您想在笔记本电脑上录音,不希望使用嘈杂的播放器,i5 将购买外部声卡,看看是否可行,如果没有技巧可以让 ffmpeg 在连接耳机时从立体声混音中录音,尽管在 mmsys.cpl 中启用了它。

另一个部分解决方案是使用虚拟声卡驱动程序,效果很好。我个人一次录制 2 个流,但希望在一台机器上同时录制尽可能多的流,以获得最大的选择范围,而无需流式传输数据。最好不要浪费并利用笔记本电脑的内置声卡,而不要让笔记本电脑的扬声器在无人聆听时发出刺耳的声音。

相关内容