Linux 录音的核心在于对底层音频子系统的精准控制与工具链的灵活组合,无论是进行简单的语音采集,还是复杂的系统内部混音录制,掌握 PulseAudio/PipeWire 架构配合 FFmpeg 等命令行工具,是解决所有录制需求的终极方案,相比于 Windows 系统依赖单一软件的图形化操作,Linux 录音更强调数据流的管道化处理,通过正确的源识别与格式编码,可以实现无损、低延迟且高度自动化的录制任务。

理解 Linux 音频架构:ALSA 与 PulseAudio/PipeWire
要进行专业的录音,首先必须理解 Linux 的音频分层架构,最底层是 ALSA(Advanced Linux Sound Architecture),它直接与内核交互,负责驱动硬件声卡,虽然可以直接使用 ALSA 进行录音,但它缺乏混音能力和网络音频支持,在现代应用场景中显得过于底层且难以管理。
目前主流的 Linux 发行版普遍采用 PulseAudio 或新一代的 PipeWire 作为音频服务器,它们位于 ALSA 之上,充当“音频路由器”的角色。PipeWire 正逐渐成为标准,因为它不仅处理音频,还处理视频,并提供了更低延迟和更好的安全沙箱机制,对于录音而言,这意味着我们需要从音频服务器中识别正确的“源”,而不是直接抓取硬件设备,理解这一层架构,是解决“录音没有声音”或“只能录麦克风不能录系统声”等问题的关键。
命令行录音方案:FFmpeg 与 ALSA 工具
对于追求极致控制和自动化的专业用户,命令行工具(CLI)是最佳选择。
使用 ALSA 的 arecord 进行基础录制
arecord 是 ALSA 提供的简单录音工具,适合快速测试或录制单轨音频,其核心优势在于轻量级,几乎所有 Linux 发行版都预装。
arecord -f cd -d 10 test.wav
上述命令以 CD 音质(44.1kHz, 16bit, 立体声)录制 10 秒音频,虽然简单,但 arecord 难以处理复杂的音频路由,例如同时录制麦克风和系统播放的音乐。
使用 FFmpeg 进行专业级录制
FFmpeg 是音视频处理领域的瑞士军刀,也是 Linux 录音的专业解决方案,它支持几乎所有格式,并能直接从 PulseAudio 或 PipeWire 获取音频流。
录制默认音频源的命令如下:
ffmpeg -f pulse -i default output.mp3
FFmpeg 的强大之处在于其流处理能力,你可以实时将录制的音频进行编码转换、混流或推流至网络服务器,将录音直接保存为高压缩率的 AAC 格式,或者同时进行备份和直播,这在图形化软件中往往需要复杂的设置,而在 FFmpeg 中仅需一行命令。
系统内录与混流技术:解决“无法录制电脑声音”
Linux 录音中最常见的需求是“系统内录”,即录制电脑内部播放的声音(如系统提示音、视频音频)而非麦克风输入,这需要配置音频服务器的 Loopback(回环)设备或虚拟源。

在 PulseAudio 或 PipeWire 中,通常会有一个名为 “Monitor of …” 的设备,这个设备实际上是输出设备的镜像,它捕获了发送到扬声器的所有音频数据,这是实现无损内录的核心。
专业解决方案:
使用 pactl 或 pw-cli 列出所有可用的音频源,找到对应的 Monitor 源。
pactl list sources short
找到类似 alsa_output.pci-0000_00_1b.0.analog-stereo.monitor 的名称,将这个名称传递给 FFmpeg:
ffmpeg -f pulse -i 'alsa_output.pci-0000_00_1b.0.analog-stereo.monitor' system_audio.mp3
如果需要同时录制麦克风和系统声音(例如游戏解说或教学视频),则不能简单地选择两个源,而需要创建一个虚拟混音设备,将麦克风流和系统 Monitor 流合并到一个新的虚拟输入中,FFmpeg 再从这个虚拟输入进行录制,PipeWire 的 pw-jack 或 pipewire-pulse 模块配合工具如 qjackctl 可以轻松实现这种复杂的路由图。
屏幕与音频同步录制:视频制作场景
创作中,单纯的音频录制较少,更多是屏幕与音频的同步录制,虽然 OBS Studio 是图形化界面的首选,但在服务器环境或追求低资源占用时,FFmpeg 依然是王者。
FFmpeg 录屏+录音核心命令:
ffmpeg -f x11grab -r 30 -s 1920x1080 -i :0.0 -f pulse -i default output.mp4
这里,-f x11grab 告诉 FFmpeg 抓取 X11 图形界面的画面,-f pulse 抓取音频,关键在于同步性,为了保证音画同步,建议指定固定的帧率(-r 30)并使用预设的编码参数(如 -preset ultrafast)以减少编码延迟,如果出现音画不同步,通常是因为音频采样率与视频帧率的时间戳对齐问题,可以通过调整 -vsync 参数或使用 -af aresample=async=1 来强制同步。
常见问题与优化策略
在实际操作中,用户常会遇到录音底噪大、爆音或权限不足的问题。

权限管理:
在现代 Linux 系统中,录音设备通常被 audio 用户组管理,如果普通用户无法录音,需将该用户添加到 audio 组:
sudo usermod -aG audio $USER
对于 PipeWire,通常通过 PAM 会话管理权限,无需手动配置,但确保 pipewire-pulse 服务正在运行是前提。
延迟与爆音(XRUN):
如果在录音过程中听到爆音,通常是缓冲区设置过小导致的,在 PulseAudio 中,可以通过编辑 /etc/pulse/daemon.conf 调整 default-fragments 和 default-fragment-size-msec 来增加缓冲深度,对于专业制作,建议将采样率锁定在 48kHz 或 96kHz,以避免重采样带来的音质损耗和 CPU 负担。
格式选择:
WAV 是无损的中间格式,适合后期制作;FLAC 提供无损压缩,适合归档;AAC 或 Opus 则适合网络分发,切忌在录音阶段直接使用低码率的 MP3,因为音频编码是有损的,多次转码会严重劣化音质。
相关问答
Q1: 在 Linux 下使用 FFmpeg 录音时,提示“default: No such process”怎么办?
A: 这个错误表明 FFmpeg 无法找到 PulseAudio 或 PipeWire 的默认音频源,首先检查音频服务是否正常运行:systemctl --user status pipewire pipewire-pulse,如果服务正常,尝试使用 pactl list sources short 查看可用的源名称,然后将 FFmpeg 命令中的 default 替换为实际的设备名称(alsa_output.pci-0000_00_1f.3.analog-stereo.monitor)。
Q2: 如何在 Linux 中实现定时自动录音,例如每天固定时间录制会议?
A: 结合 Linux 的 cron 任务调度器和 FFmpeg 可以轻松实现,首先编写一个 Shell 脚本,包含 FFmpeg 录音命令及停止逻辑(如使用 -t 参数指定时长),然后使用 crontab -e 编辑定时任务,添加如 0 9 * * 1-5 /path/to/record_script.sh,表示每周一到周五上午 9 点自动执行录音脚本,为了确保脚本在后台稳定运行,建议在脚本中使用 nohup 或 screen。

















