尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Mac 内录系统声音:虚拟声卡原理与 ffmpeg 实操

Mac 内录系统声音:虚拟声卡原理与 ffmpeg 实操 很多 Mac 用户在第一次尝试录制“电脑正在播放的声音”时都会遇到同一个困惑明明电脑正在放视频、播音乐为什么录音软件抓不到如果用 QuickTime 录屏默认只会收录麦克风的声音系统播放的声音就像被刻意“隔离”了一样。这个现象背后其实是 macOS 对音频权限和音频架构的特殊设计。DesktopAudio 这类工具的出现正是为了解决“记录 Mac 播放的声音”这个需求。本文会从系统原理、方案选型、完整实操到常见报错把 Mac 内录这件事讲清楚。无论你是做视频剪辑、游戏录屏还是需要备份在线会议内容都可以在这篇文章里找到一套可以直接落地的方案。1. 背景与核心概念1.1 DesktopAudio 是什么DesktopAudio 从名字来看非常直白Desktop Audio也就是“桌面音频”。它的定位是记录 Mac 系统本身播放出来的声音而不是通过麦克风采集外部环境音。这里要澄清一个概念。很多人把“录音”理解为用麦克风录制声音但在 Mac 上“录制系统声音”是一件完全不同的需求。麦克风录制的是真实世界的声音系统声音录制的是 Mac 内部音频输出比如浏览器播放的视频、音乐 App 里的歌曲、游戏中的音效、在线会议的远端人声等。macOS 默认情况下不会开放“直接录制系统内部音频”的通道。这让不少用户误以为 Mac 做不到内录或者只能通过“外接音频线”“把扬声器音量开到最大再用麦克风录”这种土办法解决。实际上只要理解了 macOS 的音频架构并使用合适的虚拟声卡工具就能让录制软件稳定地捕捉到系统播放的完整声音且音质干净、无环境噪声。1.2 哪些场景需要录制系统声音录制系统声音并不是小众需求很多场景都依赖这个能力。第一个场景是视频录制。做教程、录网课、做游戏解说时除了麦克风人声还需要把电脑播放的背景音乐、游戏音效、操作提示音一并录进去。如果只录到麦克风人声后期需要额外找素材补音效效率很低。第二个场景是内容采集与二次创作。比如剪辑需要从某段视频中提取原声或者把喜欢的播客片段整理成素材都需要先录制系统音频。第三个场景是会议与直播回顾。很多线上会议没有保存功能或者回放链接过期直接把会议声音录制存档是更可控的备份方式。第四个场景是故障复现。开发者在排查音频播放问题时需要把实际播放出来的声音录制下来分析判断是解码问题、声道问题还是音量问题。这些场景说明“录制 Mac 播放的声音”是一个实打实的高频需求只是 macOS 没有直接暴露这个能力所以需要借助工具和配置。1.3 常见误区在介绍解决方案之前先强调几个常见误区避免大家在错误方向上浪费时间。误区一QuickTime 可以录制系统内音。实际上QuickTime 录屏只能选择麦克风作为音源不能直接捕获系统播放的声音。如果你播放视频并同时录屏录出来的视频往往只有麦克风收音没有人声或音乐。误区二用一根音频线从耳机孔连接到麦克风孔就能解决。这个方法在部分老款电脑上可以尝试但新款 MacBook 大多取消了独立的音频输入接口而且模拟音频线会引入底噪还会损失左右声道分离度音质很难有保障。误区三安装虚拟声卡后就能直接录制。虚拟声卡只是把系统音频“重新暴露”成一个输入设备你还需要在录制软件中选择正确的输入源并配置好音频路由才能顺利完成录制。1.4 先理解几个关键术语内录指录制由电脑本身产生并播放的音频而不是用麦克风录制的外部环境音。系统音频输出macOS 将正在播放的音频发送给扬声器、耳机或虚拟输出设备的逻辑通道。虚拟声卡以驱动形式安装在系统中不依赖实体硬件可以在系统内部完成音频信号传输的虚拟音频设备。音频路由控制音频信号从哪个 App 输出再由哪个输入设备采集相当于音频世界的“路线规划”。理解了这些术语后再去看下面的原理拆解就会顺畅很多。2. 环境准备与系统要求2.1 操作系统与芯片差异本文演示的是 macOS 环境下录制系统声音的方案。具体 macOS 版本不需要追求最新但建议保持系统更新到较新的大版本因为虚拟声卡驱动和权限管理在不同系统版本上有差异。Apple Silicon 芯片和 Intel 芯片在安装驱动时界面和权限提示略有不同。Apple Silicon 机器在安装第三方音频驱动时可能需要更明确的系统扩展授权而 Intel 机器相对宽松一些。只要按系统提示操作两者都能顺利完成。如果你手里的系统版本比较旧比如 macOS 10.15 Catalina 或更早部分新版虚拟声卡可能不再支持需要先查看工具官方说明。建议以你自己的系统版本为准重点理解配置思路而不是照搬某一个确定版本的操作细节。2.2 权限准备录制系统声音不是“零权限”操作。为了正常运行你需要在“系统设置”中完成两项权限授权。第一项是麦克风权限。这里可能有人会疑惑录制系统声音为什么还需要麦克风权限因为 macOS 把所有“录音”行为都视为对音频输入设备的访问虚拟声卡在系统看来就是一个输入设备所以录制软件需要麦克风权限才能读取它。当弹出权限提示时记得点击“允许”。第二项是屏幕录制权限。如果你不仅要录制声音还要同步录制屏幕比如录制带系统声音的教程视频那么录制工具还需要“屏幕录制”权限。只录制纯音频文件时一般不需要屏幕录制权限。部分工具可能还会请求“辅助功能”权限比如通过模拟控制键来开始和停止录制。这类权限可以根据工具实际上报的功能来决定是否授予。2.3 准备 Homebrew 和命令行工具为了安装虚拟声卡和录制工具推荐使用 Homebrew。Homebrew 是 macOS 上非常流行的包管理器在开发者群体中使用率很高。如果你还没有安装建议去 Homebrew 官网查看安装方式不要在来源不明的网站复制安装命令。安装好 Homebrew 后可以用它安装虚拟声卡 BlackHole以及 ffmpeg 这个强大的音视频处理工具。ffmpeg 是命令行环境下最常用的录制与转码工具之一它可以列出 Mac 当前可用的音频输入设备并直接读取虚拟声卡输出的音频流。值得注意的是ffmpeg 依赖较多安装时可能需要下载大量软件包花费时间取决于网络速度。建议在稳定的网络环境下进行。3. macOS 音频录制原理拆解3.1 系统播放声音的默认路径在 macOS 中一个 App 播放声音时音频信号会经过 Core Audio 框架传输到当前默认的输出设备比如 Mac 内置扬声器或耳机。正常的流程是App 产生音频数据。系统将音频数据发送给默认输出设备。输出设备将数字信号转换为模拟信号。扬声器或耳机发出声音。可以看到这个流程中并没有“把声音传回录音软件”的环节。系统只是单向地把音频输出没有默认提供一份可被录音软件读取的副本。这也是 QuickTime 录屏无法直接录制系统声音的原因。QuickTime 只能从“输入设备”采集音频而系统播放的声音是从“输出设备”发出的两者之间默认没有连接。3.2 为什么 macOS 不开放直接内录macOS 不提供一键内录可能有多方面考虑。首先是版权保护系统播放的声音可能涉及视频、音乐等受版权保护的内容如果任意软件都能强制截取会导致内容被轻易录制和传播。其次是隐私和安全系统不希望任何 App 都能静默采集其他 App 播放的声音这会让用户难以理解音频数据的流向。还有一个现实原因录音权限模型。macOS 把麦克风、虚拟声卡、外接音频接口都视为输入设备它们才是录音软件可以访问的“水龙头”。而扬声器和耳机属于输出设备录音软件默认不能打开输出设备的水龙头。也就是说让 Mac 支持内录的关键不是绕过权限而是把“系统播放的声音”重新引导到一个输入设备上让录音软件能够合法、规范地访问它。3.3 虚拟声卡如何工作虚拟声卡是解决内录问题的核心思路。以 BlackHole 为例它安装后会创建一对虚拟音频设备。一个看起来像输出设备播放音乐的 App 可以把声卡设置为输出目标另一个看起来像输入设备录制软件可以从这里读取音频数据。实际工作的流程是播放 App 将系统音频输出到 BlackHole 虚拟输出设备。BlackHole 驱动在系统内部完成数据传递。录制软件从 BlackHole 虚拟输入设备读取音频。录制软件将音频数据编码并保存为文件。换句话说BlackHole 在系统中搭了一座桥把原本只流向扬声器的音频复制了一份到输入端。这个过程中用户不需要任何音频线也不需要把扬声器再对准麦克风音质不会因环境噪声而损失。3.4 为什么要创建多输出设备如果你只是录制系统声音选择 BlackHole 作为输出设备后声音就不再从扬声器播放出来你听不见正在录制的内容。这在很多场景下很不方便。解决方法是创建“多输出设备”。在 macOS 的“音频 MIDI 设置”中用户可以创建一个虚拟的多输出设备同时包含扬声器和 BlackHole。这样系统声音会同时发送到扬声器和 BlackHole 两个目标一边监听一边录制互不干扰。多输出设备本质上也是一种音频路由配置它不会改造系统限制只是在系统允许的框架内让多个输出设备共享同一份音频数据。4. 核心方案对比与选型4.1 系统自带工具的能力边界macOS 自带了很多音频相关功能但在“录制系统声音”这件事上能力有限。QuickTime Player 是很多人会想到的第一个工具。它可以录制屏幕、录制麦克风、录制摄像头但麦克风选项中只会列出输入设备不会包含扬声器和耳机。所以即使你已经安装了虚拟声卡仍然需要手动选择虚拟声卡作为输入源。语音备忘录和“音频 MIDI 设置”也不具备直接捕获系统输出的功能。语音备忘录只能调用输入设备音频 MIDI 设置本身是配置工具不是录制工具。如果需求很简单只是录制麦克风或者录制 iPhone 输入到 Mac 的音频系统自带工具够用。但只要有“系统内音”的录制需求就必须引入第三方方案。4.2 虚拟声卡工具对比目前最常用的虚拟声卡工具是 BlackHole 和 Soundflower。Soundflower 是比较老牌的开源虚拟声卡很多年前就有人用它录制系统音频。不过它更新频率较慢在新版 macOS 上可能会遇到驱动兼容性问题安装后设备不出现或者系统提示未签名的情况时不时发生。BlackHole 是比 Soundflower 更新、更活跃维护的开源项目。它支持多声道版本清晰度更高且大部分版本在 Apple Silicon 上也能正常使用。社区对它的认可度较高使用资料也比较丰富。如果你的系统版本较新优先推荐 BlackHole。如果你在研究老教程时遇到 Soundflower 的方案也可以尝试但要注意驱动签名和系统扩展授权。4.3 商业内录工具除了开源虚拟声卡还有一些商业工具做得非常完善例如 Audio Hijack、Loopback、ScreenFlow 等。Audio Hijack 是 Mac 平台上一款成熟的音频路由与录制工具它可以分别捕获不同 App 的音频支持复杂的混音和效果器适合做播客和高级录制。Loopback 则偏重音频路由可以创建自定义的信号通道。ScreenFlow 的优势是屏幕录制与视频剪辑一体化很多自媒体作者会用它完成教程视频。商业工具的优势是界面友好、功能完善、使用门槛低适合不需要命令行操作的普通用户。缺点是价格较高而且部分工具使用订阅制长期成本不低。如果只是想偶尔录一段系统声音开源虚拟声卡加 ffmpeg 的组合完全够用零费用且可控性更强。下面会以这个方案作为实战案例。4.4 DesktopAudio 类工具的定位像 DesktopAudio 这样的小工具本质上就是把这些通用方案封装成一个更简单的入口。它对内可能使用了虚拟声卡驱动对外则表现为一个直接的“开始录制”“停止录制”界面。这类轻量工具的价值在于降低了操作门槛。用户不需要理解复杂的音频 MIDI 设置也不需要记忆 ffmpeg 的设备索引只要安装工具选择录音文件目录点击录制即可。对于只想要“录下 Mac 播放的声音”这一单一功能的用户来说轻量工具往往比庞大的商业软件更合适。不过轻量工具的使用效果通常取决于驱动是否稳定、是否兼容你的系统版本。如果是开源项目你还可以查看它的文档和代码确认它使用的是哪种虚拟声卡方案这样在遇到问题时有据可查。5. 完整实战录制 Mac 播放的声音下面是一套可以直接跑通的完整操作。以 BlackHole ffmpeg 为例包含安装、配置和验证。5.1 安装 BlackHole 虚拟声卡首先用 Homebrew 安装 BlackHole。在“终端”中执行brew install blackhole-2ch安装完成后BlackHole 设备会出现在系统的音频设备列表中。如果在“音频 MIDI 设置”里没有立即看到可以尝试重新启动核心音频进程或者退出并重新打开“音频 MIDI 设置”。如果系统弹出安全提示要求允许加载系统扩展请点击“允许”然后按提示重启或手动批准。这一步在不同 macOS 版本上有差异重点是以系统实际提示为准。如果你想验证设备是否存在可以打开“音频 MIDI 设置”左侧列表中应该会多出一个名为 “BlackHole 2ch” 的输出设备和输入设备。5.2 创建多输出设备创建多输出设备用于“一边播放一边录制”避免切换输出后听不见声音。打开“音频 MIDI 设置”在左下角点击加号选择“创建多输出设备”。此时界面上会出现一个新设备右侧会列出可以加入该多输出设备的音频设备。勾选你的内置扬声器和 BlackHole 2ch。完成之后在“系统设置”的“声音”输出选项里选择这个新创建的多输出设备这样所有系统声音都会同时发送到扬声器和 BlackHole。如果你不想一边播放一边监听也可以跳过这一步直接把系统的默认输出设备设置为 BlackHole。这样声音会直接进入录制流程外部不会有声音播放适合安静场景下的无人值守录制。5.3 查看 ffmpeg 可用的音频设备安装好虚拟声卡后需要知道 ffmpeg 能否识别 BlackHole。在“终端”中执行ffmpeg -f avfoundation -list_devices true -i 执行后ffmpeg 会列出当前 Mac 可用的视频输入设备和音频输入设备。在音频输入设备列表中你应该能看到类似BlackHole 2ch的条目并带有对应的索引编号。不同机器上编号可能不同。假设 BlackHole 的索引是 2那么后面录制时使用:2来指定音频输入源。如果索引是 0 或 1就相应改为:0或:1。5.4 使用 ffmpeg 录制系统声音创建一个专门的录制目录比如~/Desktop/recordingsmkdir -p ~/Desktop/recordings cd ~/Desktop/recordings接下来让 Mac 播放你希望录制的内容然后开始录制。假设 BlackHole 的音频设备索引是 2执行ffmpeg -f avfoundation -i :2 -c:a aac -b:a 192k system_audio.m4a参数说明-f avfoundation指定使用 macOS 的 AVFoundation 框架采集。-i :2指定音频输入源冒号前为空表示不采集视频冒号后是设备索引。-c:a aac将音频编码为 AAC。-b:a 192k音频码率设为 192kbps在体积和质量之间比较均衡。录制过程中终端会显示时间进度。按下CtrlC可以停止录制ffmpeg 会保存已经录制的音频。如果想控制录制时长可以在命令中加上-t参数。例如录制 30 秒ffmpeg -f avfoundation -i :2 -t 30 -c:a aac -b:a 192k system_audio.m4a5.5 使用 QuickTime 录制带系统声音的屏幕如果你想录制“系统播放的声音 Mac 屏幕画面”可以使用 QuickTime但要注意选择正确的麦克风输入源。操作步骤如下打开 QuickTime Player选择“文件”“新建屏幕录制”。点击录制按钮旁边的选项按钮在“麦克风”下拉列表中选择 BlackHole 2ch。此时 QuickTime 的屏幕录制会从 BlackHole 读取音频因此录下的视频会包含系统播放的声音。需要注意的是这种方式不会同时录制真实麦克风的声音因为 QuickTime 只能选择一个音频输入源。如果需要同时录制人声和系统声音更好的做法是先用 ffmpeg 录制纯系统声音再用其他工具录制人声最后在剪辑软件中进行混音。这样音频质量更高也更容易控制。5.6 验证录制结果录制完成后用 macOS 自带的afinfo命令查看音频文件信息确认文件有效afinfo ~/Desktop/recordings/system_audio.m4a如果输出正常可以看到文件时长、码率、采样率等参数。也可以直接双击音频文件用 QuickTime 或音乐 App 播放确认声音内容和预期一致。如果播放后没有声音不要急着认为是工具问题最可能的原因是当时选择的输出设备不是 BlackHole或者多输出设备没有正确创建。可以回到第 5.2 和第 5.3 步再检查一遍。6. 常见问题与排查思路很多用户安装完虚拟声卡后第一轮录制往往不会顺利。下面整理了高频问题及对应的排查思路。问题现象常见原因解决思路录制文件是静音系统输出设备没有选中 BlackHole 或多输出设备检查“音频 MIDI 设置”和“系统设置 声音”ffmpeg 找不到 BlackHole驱动未加载或安装后未重启重启音频服务或重启电脑重新查看设备列表录出来的声音断断续续扬声器和 BlackHole 采样率不一致在“音频 MIDI 设置”中统一采样率为 44.1kHz 或 48kHz录屏视频没有系统声音QuickTime 麦克风仍然选择内置麦克风在屏幕录制选项中切换为 BlackHole出现麦克风权限弹窗录制软件无法访问输入设备在系统设置中授予麦克风权限声音音量过小原系统音量本身较小调高播放源音量或后期增益处理声音出现爆音录制码率设置过高或输入增益过大降低录制音量并选择合理的码率下面针对几个重点问题展开说明。6.1 录制出来没有声音这是最常见的问题。通常原因不是 ffmpeg 命令错误而是“音频根本没有流向 BlackHole”。排查顺序确认是否已经将系统的默认输出设备设置为“多输出设备”或 BlackHole。如果你在播放音乐确认音乐 App 输出的目标设备是否正确有些 App 自身会有音频输出设置。在 ffmpeg 设备列表中确认 BlackHole 的索引号与命令中的:2是否一致。用系统自带的“音频 MIDI 设置”播放测试音看多输出设备是否工作。最简单的方法就是在“系统设置 声音 输出”中确认当前选中的声卡。如果选了内置扬声器那 BlackHole 当然收不到信号。6.2 声音断断续续或音调变快这通常是采样率不一致导致的。扬声器可能运行在 48kHz而 BlackHole 默认是 44.1kHz两者不同步就会出现卡顿或变调。解决方法是在“音频 MIDI 设置”中把 BlackHole 的采样率与扬声器设置为一致。一般来说视频内容使用 48kHz播客或 CD 音乐使用 44.1kHz。如果你不确定就把所有设备都设置为 48kHz再试录一次。6.3 找不到 BlackHole 设备如果安装后列表中没有 BlackHole可以先用brew services list检查安装状态或者重新安装一次brew reinstall blackhole-2ch安装完成后注销并重新登录 macOS或者重启电脑让驱动正常加载。新版 macOS 对系统扩展的加载审核更严格如果没有允许驱动安装设备是不会出现的。6.4 QuickTime 录屏仍然没有系统声音确认在 QuickTime 的“选项”中麦克风已经选择了 BlackHole。如果你仍然选的是“内置麦克风”那么 QuickTime 只会从麦克风收音。另外QuickTime 在录制屏幕时可能无法同时选择“多输出设备”作为默认输出。最好的方法是先把系统默认输出设为“多输出设备”再让 QuickTime 从 BlackHole 输入。7. 最佳实践与工程建议7.1 录制前先做 5 秒测试正式录制前最好先做一个短时间的测试避免录了半天才发现没有声音。在播放目标内容的同时执行下面命令ffmpeg -f avfoundation -i :2 -t 5 -c:a aac test.m4a录完后播放 test.m4a确认声音正常再进行长时间录制。这个习惯能帮你节省大量排查时间。7.2 使用带时间戳的文件名手动输入文件名不仅麻烦还容易出现覆盖问题。建议写一个简单脚本来生成带时间戳的录音文件#!/bin/bash OUTDIR$HOME/Desktop/recordings mkdir -p $OUTDIR DEVICE_INDEX${1:-2} FILENAMErecording_$(date %Y%m%d_%H%M%S).m4a ffmpeg -f avfoundation -i :$DEVICE_INDEX -c:a aac -b:a 192k $OUTDIR/$FILENAME用文本编辑器保存为record_system_audio.sh然后赋予执行权限chmod x record_system_audio.sh以后执行脚本并传入设备索引即可./record_system_audio.sh 2脚本会自动在~/Desktop/recordings目录下生成带时间戳的文件避免覆盖也方便按时间查找。7.3 合理选择音频格式与码率录制系统声音时AAC 格式是最通用的选择体积小兼容性好。如果后续需要做精细剪辑可以录制无损格式例如 WAV 或 FLACffmpeg -f avfoundation -i :2 -c:a pcm_s16le system_audio.wavWAV 文件体积较大但编辑时没有转码损耗。建议根据实际需求取舍。如果只是存档和简单剪辑AAC 192kbps 已经足够如果要做播客后期处理建议使用 WAV。7.4 注意隐私和版权边界录制系统声音时一定要留意版权和隐私问题。录制并分发受版权保护的音乐、付费课程、未授权视频内容可能构成侵权。在线会议中的谈话内容涉及同事或客户的隐私录制前需要征得对方同意至少要在录制前进行明确提示。这些不只是道德要求也是实际使用中必须遵守的合规边界。技术工具本身没有对错但使用场景的合法性和合理性由使用者负责。7.5 保持工具和系统更新虚拟声卡驱动是系统级组件如果系统升级后突然无法使用优先查看工具是否有新版本。Homebrew 可以方便地更新brew upgrade blackhole-2ch ffmpeg同时关注 macOS 大版本更新说明确认驱动兼容性。不要盲目升级生产环境可以先在测试机上验证。7.6 从自动化角度进一步优化如果你经常录制系统声音可以结合 macOS 的launchd或“自动操作”实现定时录制。例如录制固定时段的在线直播可以用launchd定时执行 ffmpeg 脚本再配合-t参数指定录制时长。如果只是偶尔录制手动执行脚本已经足够。自动化适合“每天固定录制”的场景但也有风险比如系统权限变化或网络内容延迟都会影响录制效果。建议先跑通手动流程再考虑自动化。8. 总结与进一步学习方向本文从 macOS 无法直接内录系统声音的现象出发解释了音频输出与输入之间的隔离机制梳理了虚拟声卡的工作原理并给出了一套基于 BlackHole 和 ffmpeg 的完整录制方案。你现在应该已经掌握了几项关键能力会安装虚拟声卡驱动会在“音频 MIDI 设置”中创建多输出设备会用 ffmpeg 列出音频设备并录制系统声音也会排查静音、爆音、设备找不到等高频问题。这些能力不仅适用于 DesktopAudio 这一类工具也适用于任何需要捕获系统音频的场景。如果你想继续深入可以研究 macOS 的 AudioUnit 编程接口理解如何用 Swift 开发自己的音频工具也可以学习 ffmpeg 更多高级参数比如延迟录制、流媒体抓取、批量转码还可以探索 Audio Hijack、Loopback 这类商业工具在复杂混音场景下的优势。不过工具只是外壳理解 macOS 音频的数据流向才是关键。先跑通一个最简单的录制流程再去面对真实场景中的复杂需求你会发现很多问题都能迎刃而解。希望这篇文章对你有帮助也欢迎在实际操作中结合你的系统版本灵活调整。
返回列表