很多人都会遇到和你一模一样的场景:在浏览器里播放一个网站上的在线音频,比如公开课、讲座、广播电台、白噪声网站,想一边听一边把声音录成一个本地音频文件,方便离线反复听。
在 Windows 上,这件事本质上是把系统正在播放的声音绕一圈再喂回录音软件里,让它变成一个新的 wav 或 mp3 文件。只要搞清楚系统里音频是怎么流动的,再选一套顺手的工具,就能稳定地做到边播边录。
下边我从原理说起,再给你三类实际方案:
- 图形界面方案:用
Audacity录制Windows桌面音频 - 录屏常用方案:用
OBS Studio只录系统声音 - 命令行和自动化方案:用
ffmpeg抓取系统音频,并附上完整Python脚本示例
中间穿插一些排错经验和注意事项,你可以按需求挑一条自己最顺手的路。
一、先搞清楚:在 Windows 里你到底在录什么
在 Windows 笔记本上,从网站发出来的声音,一般会经过这样的路径:
浏览器 → Windows 音频引擎 → 声卡驱动 → 耳机 / 扬声器
你想边播边录,其实就是想在 Windows 音频引擎 到 声卡驱动 这一段,复制一份数字音频流保存下来,而不是傻乎乎地用麦克风去录扬声器外放的声音。
Windows 从 Vista 开始提供了 WASAPI loopback 能力,让程序能直接捕获正在播放到某个输出设备的数字音频流。Audacity 官方文档推荐在没有 Stereo Mix 的机器上,用 Windows WASAPI 的 loopback 方式来录制桌面音频,这样音质是纯数字的,不经过模拟放大和再采样。(Audacity Manual)
除了 WASAPI loopback,你还会在网络帖子里看到几种关键词:
-
Stereo Mix或者What U Hear:有些声卡驱动提供的一个虚拟输入,表示系统混音后的声音,老一点的机器常见(How-To Geek) - 虚拟声卡类工具,比如
VB-Cable、Virtual Audio Cable、Virtual Audio Capture等,把系统输出重新暴露为一个可录制的输入设备(Super User)
你要做的事情,就是让录音软件的输入设备指向这些 loopback / Stereo Mix / 虚拟声卡 之一,再在浏览器里正常播放目标网站音频,就达到了边播边录的效果。
这里再提醒一句法律上的常识:很多网站的流媒体内容受版权和服务条款保护,只在个人学习、备忘范围内自用,一般问题不大,但传播、商用就可能触碰法律风险。一些官方教程也会特别强调,如果要录制像 YouTube 之类网站的音频,最好确认已经获得版权方许可。(How-To Geek)
二、最推荐的图形方案:用 Audacity 边播边录网站音频
Audacity 是一个开源跨平台音频编辑软件,Windows 版自带 Windows WASAPI loopback 支持,可以直接录下桌面上正在播放的一切声音,适合大部分用户。(support.audacityteam.org)
1. 安装 Audacity
步骤很简单:
- 打开浏览器,访问
Audacity官方网站,下载适用于Windows的安装包。(Nearity) - 双击安装包,保持默认选项一路
Next,安装完成后启动Audacity。
安装部分基本没有坑,更重要的是后面的音频设备配置。
2. 在 Windows 里确认输出设备
为了让 Audacity 正确抓到你正在听的那路声音,先确认系统当前的输出设备:
- 在任务栏右下角点击小喇叭图标。
- 看一下当前选中的输出设备名称,比如
扬声器 (Realtek Audio),或者某个USB耳机。 - 记住这个名字,等会在
Audacity里要选对应的loopback版本。
如果你用的是 蓝牙、USB 耳机或者 HDMI 显示器输出,那就要在 Audacity 里选择对应设备的 loopback,而不是笔记本自带扬声器。Audacity 的官方手册里也提到,WASAPI 方式可以录制 USB、无线或外置设备输出的音频,对这类场景比传统 Stereo Mix 好用得多。(Audacity Manual)
3. 配置 Audacity 的录音设备为 WASAPI loopback
打开 Audacity 主界面之后,有一个 Audio Setup 工具栏,你需要调整三个关键选项:(Audacity Manual)
Host:在下拉菜单里选择Windows WASAPI。-
Recording Device:从下拉列表里选择带有(loopback)的那一项,比如扬声器 (Realtek Audio) (loopback)Headphones (USB Audio) (loopback)
Playback Device:保持为你正在使用的那个输出设备,比如扬声器 (Realtek Audio)。
Windows WASAPI + (loopback) 组合意味着:录音通道会从你正在听的那个输出设备的数字流里直接复制数据,这样录出来的声音不会混入环境噪声,也不会二次经过模数转换。官方指南也把这个方式当作推荐做法。(support.audacityteam.org)
有些机器还会提供 Stereo Mix、What U Hear 等录音设备名称,这些本质上也是对系统播放流的回环输入,你也可以选这些设备,不过新系统里 WASAPI loopback 的兼容性通常更好。(How-To Geek)
4. 边播边录的操作流程
配置好设备以后,可以按下面的顺序来边播边录:
- 在浏览器里打开目标网站,找到你想录的在线音频,比如一个在线电台、网页播放器、在线课程页面之类。
- 在
Audacity里先点一下录音电平的小麦克风图标,选择Start Monitoring,如果此时网页已经在播放,你会看到输入电平在跳动。(support.audacityteam.org) - 当你确认电平在动,说明
loopback已经连通,这时点击Audacity的红色录音按钮。 - 切回浏览器,开始播放目标音频。要注意
WASAPI在音频流完全静音时可能不提供数据,所以录制时最好让音频处于播放状态。(support.audacityteam.org) - 音频播放完毕后,回到
Audacity,点击停止按钮。
整段播放的波形此时已经完整出现在轨道里,你可以用 Audacity 的编辑能力进行剪辑、降噪、归一化等操作。
5. 导出为 WAV / MP3 等格式
录完之后,一般会导出成 wav 或 mp3:
- 在菜单里选择
File→Export。 - 如果希望无损保存,选
Export as WAV;如果希望文件更小、便于在手机上听,就选Export as MP3。 - 在弹出的对话框里设置采样率
44100 Hz、比特率128 kbps或更高,保存即可。
现在的 Audacity 版本已经内置 LAME 编码器,不再需要额外安装插件,就能直接导出 mp3。很多第三方教程都会强调 WASAPI loopback + 导出 mp3 是录制桌面音频时最方便的组合之一。(Swell AI)
6. 用 Audacity 边播边录时的一些经验
结合项目里常见的坑,可以再补充几条经验:
- 如果录出来是静音,大概率是浏览器没有把声音输出到你选的那个设备,比如你用
蓝牙耳机听,但Audacity的loopback选的是笔记本扬声器。 - 如果只想录网站音频,不想录系统提示音,可以在
Windows的音量混合器里降低其它应用的音量,甚至把系统声音静音。 -
WASAPI录制时,Audacity的工程采样率最好跟系统默认格式一致,比如都用44100 Hz,可以减少不必要的重采样。(Audacity Forum)
对于大多数只想把网页音频边播边录下来的场景,用 Audacity 基本已经足够。
三、如果你常用录屏:用 OBS Studio 只录系统声音
有不少人本身就用 OBS Studio 做录屏或直播,那在这个基础上顺手录一下网站音频,其实也很方便。OBS 官方文档和社区教程里都有详细的音频配置说明。(OBS Studio)
1. OBS Studio 的基本思路
在 OBS 里,你可以把音频源分成几类:
-
Desktop Audio:整个系统的桌面声音 -
Application Audio Capture:只抓取某一个应用的声音,比如Chrome或Edge(OBS Studio) -
Mic/Aux:麦克风输入
如果你只想录网站音频,不想把麦克风环境声录进去,可以在音频混音器里把 Mic/Aux 静音,只保留 Desktop Audio 或 Application Audio Capture。(OBS Studio)
2. 只录网站音频的大致操作过程
大致的操作顺序可以是这样:
- 安装并打开
OBS Studio,用向导跑一次自动配置,让它根据你的机器性能选一个合适的默认设置。(OBS Studio) - 在一个场景里,点击音频源区域的加号,选择
Application Audio Capture。在弹出的窗口里给这个源起个名字,比如BrowserAudio。(OBS Studio) - 在属性里选择具体的浏览器窗口,比如
chrome.exe或msedge.exe。这样OBS只会捕获这个进程播放的声音。(OBS Studio) - 在音频混音器里,把麦克风那一条静音,只留下刚才添加的应用音频源。
- 打开浏览器访问目标网站,开始播放在线音频。此时可以在
OBS的混音器上看到电平条在跳动。 - 在
OBS设置里的Output→Recording,把Recording Format改成一个音频友好的格式,比如mkv或mp4配合只保留音轨;或者在一些教程里会推荐把Recording Type改成Custom Output (FFmpeg),直接输出mp3或flac音频文件。(Hollyland) - 点
Start Recording,等网页音频播放结束后,再点Stop Recording。
如果想要的只是音频,可以事后用 ffmpeg 把录制的 mkv / mp4 文件里的音轨抽出来,命令大概类似于:
ffmpeg -i input.mkv -vn -acodec copy output.m4a
这里用 -vn 丢掉视频部分,仅复制音频轨。
OBS 的优点是可以非常精细地控制来源,甚至做到只录一个浏览器标签页的声音,而不录别的应用或者系统提示音。如果你经常做录屏或直播,顺带用它录网站音频会非常自然。
四、命令行和自动化:用 ffmpeg 抓取系统音频 + Python 脚本示例
如果你习惯命令行或者想做自动化,比如定时录制某个电台节目的在线流,ffmpeg 会非常有用。
ffmpeg 可以访问 Windows 下的 DirectShow 或 WASAPI 音频设备,来录制系统声音。社区讨论和官方文档中,普遍的做法是用 dshow 抓 Stereo Mix / Virtual Audio Capture 设备,或者直接用 -f wasapi -i default 来录制默认输出设备的 loopback 流。(Super User)
1. 安装 ffmpeg 并配置环境变量
常见做法是:
- 到
ffmpeg官方推荐的构建网站下载Windows版压缩包。 - 解压到一个目录,比如
C:\ffmpeg。 - 把
C:\ffmpeg\bin加入系统PATH,这样在命令行里可以直接敲ffmpeg。
这一步只需要做一次,之后所有脚本和命令都能直接调用 ffmpeg 可执行文件。
2. 用 DirectShow 方式列出所有音频设备
在 Windows 上可以用 DirectShow 接口列出可录制的音频设备:(Super User)
ffmpeg -list_devices true -f dshow -i dummy
``
命令执行后会罗列出一堆设备,其中 `DirectShow audio devices` 下面的条目就是可用的音频输入,比如:
* `Stereo Mix (Realtek Audio)`
* `virtual-audio-capturer`
* `Microphone (Realtek Audio)`
你要找的是系统混音或虚拟声卡之类的设备,而不是麦克风。
在真实的命令行里,很多教程会写成类似:
```bash
ffmpeg -f dshow -i audio="Stereo Mix (Realtek Audio)" -acodec libmp3lame out.mp3
为了满足这里的格式要求,示例里用单引号 ' 来包裹带空格的设备名,你在实际 Windows 命令行里输入时,要把这些单引号换成常规的双引号。
3. 用 WASAPI 方式录制默认输出设备
在新版 ffmpeg 里,已经支持直接通过 WASAPI 做 loopback 录制,比如录制整个系统输出:(Super User)
ffmpeg -f wasapi -i default -acodec pcm_s16le -ar 44100 -ac 2 output.wav
这条命令含义大致是:
-
-f wasapi:用WASAPI设备 -
-i default:从默认播放设备的loopback流录制 -
-acodec pcm_s16le:用无损16 bitPCM编码 -
-ar 44100:采样率44100 Hz -
-ac 2:立体声 -
output.wav:输出文件名
用这种方式录制时,你只要在浏览器里正常播放网站音频,ffmpeg 就会把所有系统输出捕获到 output.wav 里,包括目标网站的声音和其它系统声音。
如果你只想录制一段固定时长的内容,比如 600 秒,可以加 -t 600 参数:
ffmpeg -f wasapi -i default -acodec pcm_s16le -t 600 output.wav
把时间设得稍微长一点,保证音频在这段时间内能播放完。
4. 用 Python 做一个简单的自动录音脚本
下面给出一个完整的 Python 脚本示例,用来调用 ffmpeg 录制系统音频。脚本逻辑很简单:
- 从命令行接收录制时长和输出文件路径
- 自动构造
ffmpeg命令 - 在录制前给你一点时间去切到浏览器并开始播放
- 录制结束后提示完成
脚本兼容 Windows,假设你已经把 ffmpeg 加进了环境变量。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import subprocess
import sys
import time
from pathlib import Path
def build_ffmpeg_cmd(duration_sec: int, output_path: Path, ffmpeg_exe: str = 'ffmpeg'):
"""
构造一个使用 WASAPI loopback 录制系统音频的 ffmpeg 命令
"""
cmd = [
ffmpeg_exe,
'-y', # 覆盖已有文件
'-f', 'wasapi', # 使用 WASAPI
'-i', 'default', # 默认播放设备的 loopback
'-acodec', 'pcm_s16le', # 无损 16 bit PCM
'-ar', '44100', # 采样率 44.1kHz
'-ac', '2', # 立体声
]
if duration_sec > 0:
cmd.extend(['-t', str(duration_sec)])
cmd.append(str(output_path))
return cmd
def main():
print('=== Windows 在线音频录制小工具 (基于 ffmpeg) ===')
if len(sys.argv) < 3:
print('用法示例:')
print(' python record_site_audio.py 600 output.wav')
print('表示录制 600 秒系统音频到当前目录的 output.wav')
sys.exit(1)
try:
duration_sec = int(sys.argv[1])
except ValueError:
print('参数错误: 录制时长必须是整数秒')
sys.exit(1)
output_path = Path(sys.argv[2]).expanduser().resolve()
# 检查 ffmpeg 是否存在
try:
subprocess.run(['ffmpeg', '-version'], check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
except Exception:
print('无法找到 ffmpeg 可执行文件, 请确认已安装并加入 PATH')
sys.exit(1)
print(f'计划录制时长: {duration_sec} 秒')
print(f'输出文件路径: {output_path}')
print('请确认:')
print(' 1. 浏览器已经打开目标网站页面')
print(' 2. 系统默认播放设备就是你当前在听的那一路 (耳机 / 扬声器)')
print(' 3. 录制过程中不要随意切换输出设备')
# 给使用者几秒钟时间去切换到浏览器开始播放
for i in range(5, 0, -1):
print(f'{i} 秒后开始录制, 请在浏览器里点击播放...')
time.sleep(1)
cmd = build_ffmpeg_cmd(duration_sec, output_path)
print('\n即将执行的 ffmpeg 命令:')
print(' '.join(cmd))
print('\n开始录制, 按 Ctrl+C 可提前停止...\n')
try:
subprocess.run(cmd, check=True)
print('\n录制完成!')
print(f'文件已保存到: {output_path}')
except KeyboardInterrupt:
print('\n检测到用户中断, 已尝试停止 ffmpeg 进程')
except subprocess.CalledProcessError as e:
print(f'\nffmpeg 运行失败, 返回码: {e.returncode}')
if __name__ == '__main__':
main()
使用方法举例:
python record_site_audio.py 900 D:\recordings\course1.wav
在你按下回车之后,脚本会倒数几秒,给你时间切到浏览器里点击播放在线音频。之后 ffmpeg 会通过 WASAPI loopback 捕获默认输出设备的声音,直到录满设定的时长。
你也可以稍微改造一下脚本,让它在录完以后再调用一次 ffmpeg 把 wav 转成 mp3:
ffmpeg -i input.wav -acodec libmp3lame -b:a 192k output.mp3
用 Python 包一层的好处,是你可以很容易做定时任务、循环录制等自动化操作,比如每天晚上七点自动录某个网站的在线讲座。
五、常见问题排查与一些进阶技巧
在实际使用中,最容易踩坑的地方集中在设备选择和采样率匹配两个方向,再加上一些版权和浏览器特性方面的限制。
1. 录出来是静音或者只有底噪
典型原因包括:
- 录音设备选成了麦克风,而不是
Stereo Mix或loopback - 浏览器输出到
蓝牙或USB耳机,而录音设备却对着笔记本内建扬声器的loopback - 网站本身用了类似
DRM的加密回放方案,导致音频路径和普通输出不同
在 Audacity 场景下,官方教程也提醒,使用 WASAPI 回环录制时,要确保音频已经在播放,完全静音时有些设备会让录音端收到的只是静默数据。(support.audacityteam.org)
在 ffmpeg 场景下,可以先用 -t 10 录一小段,配合 -af volumedetect 等滤镜看看电平是否正常,如果完全为零,就要检查设备选择是否正确。(Super User)
2. 找不到 WASAPI loopback 设备怎么办
在一些老机器或特殊声卡驱动环境下,WASAPI loopback 的兼容性不太理想,或者软件里看不到对应选项。这个时候可以考虑:
- 在
Windows声音设置里,把隐藏的录音设备全部显示出来,看看有没有Stereo Mix或类似条目; - 更新声卡驱动,有的厂商在新版驱动里重新提供了环回输入;
- 使用虚拟声卡工具,比如
Virtual Audio Capture或VB-Cable,让它充当录音软件看得见的loopback源。(Super User)
虚拟声卡的工作方式大致是:在系统里创建一个虚拟输出设备和一个虚拟输入设备,你让浏览器把声音输出到虚拟输出,虚拟驱动把这份数据原封不动送到虚拟输入,录音软件就可以在这个输入上抓到纯数字的系统音频。
3. 只想录网站声音,不想录其它应用的声音
这个需求用 OBS 的 Application Audio Capture 做起来最自然,因为它可以指定具体进程的音频流,比如专门抓 chrome.exe 的声音。(OBS Studio)
如果你坚持用 Audacity 或 ffmpeg,可以采取折中的办法:
- 在
Windows的音量混合器里,把除了浏览器之外的所有应用音量调成0; - 在录制期间尽量不要触发其它系统声音,比如关闭消息提示音;
- 对于
ffmpeg,也可以配合系统设置,把默认输出设备暂时切换成一个只给浏览器用的虚拟设备。
4. 浏览器标签静音、系统快捷键与录音的关系
很多人会习惯性用浏览器标签上的静音按钮,或者用多媒体键盘上的静音键来控制音量。要注意:
- 静音标签页会让那一路音频在系统里变成真正的静音流,
loopback录制到的也就只剩下静寂; - 用系统静音快捷键把整个输出设备静音时,
WASAPI loopback通常也会跟着变成静音; - 更稳妥的做法是控制音量大小,而不是静音本身,把不想录的应用音量调
0,保留目标网站的音量。
5. 关于版权和网站服务条款
再多说一句法律层面的事情。很多网站的服务条款都不鼓励用户对流媒体内容进行抓取与再分发,一些支持文档明确提到,如果要录制类似 YouTube 的内容,应该在获得版权方许可的前提下进行,有时候甚至更推荐直接下载合法提供的文件而不是通过录制来绕开限制。(How-To Geek)
从工程实践的角度讲,这篇文章讨论的都是技术手段本身,实际使用时需要你结合当地法律和网站条款自行判断,用在学习、备份、自我笔记等合理范围内会更加稳妥。
六、结语:给你一个简单的选择建议
把上面这几种方案合在一起,可以给你一个非常直接的决策指南:
- 如果你想要图形界面、顺手的剪辑功能,又不介意多开一个软件辅助录音,
Audacity + Windows WASAPI loopback会非常合适,而且设置一次之后几乎可以当录音机用。 - 如果你本来就经常用
OBS Studio做录屏,希望精确控制只录浏览器的声音,那么用Application Audio Capture抓取目标网站进程,再在输出里配置音频轨,会非常清爽。 - 如果你偏爱命令行和自动化,或者想做定时录音、批处理,那就把
ffmpeg和本文给出的Python小脚本结合起来,用WASAPI loopback抓系统输出,会比手工操作省事得多。
你现在用的是一台 Windows 笔记本电脑,只要按照文中的步骤配置好音频路径,从浏览器播放网站上的在线音频,再用上面任意一种工具录制,就能稳定实现边播边录,把在线声音变成一个可以随身听、可以剪辑、可以归档的本地音频文件。
如果你愿意,后面还可以在这个基础上玩得更深一点,比如用 Python 调用 speech to text 服务,把录下来的课程音频自动转成文字笔记,或者结合你熟悉的编程技术做一个自己的小型 播客管理器。这就已经超出录音本身,变成了一个很有意思的个人项目了。