音视频操作手册

8 分钟
本页目录

以 PipeWire + WirePlumber 桌面为主,先定位应用流、策略、设备节点还是内核硬件层。wpctl、pactl 和 ALSA 使用不同对象与 ID,数字不能混用,也不能跨重启当稳定标识。

当前任务入口
没有声音架构与状态
切换输出后仍从旧设备播放默认目标与现有流
录音 / 录屏 / 编码格式与输入来源

策略管理不在音频数据的串行路径中

PipeWire / WirePlumber应用pipewire-pulsePipeWireALSA音频硬件WirePlumber虚线:策略控制

实线示例是 PulseAudio 协议应用的播放路径;原生 PipeWire 应用可直接进入 PipeWire。WirePlumber 决定连接、profile 和策略,不承载每段音频数据;蓝牙输出还经过 BlueZ 等对应后端,图中只画 ALSA 硬件路径。

先检查当前桌面会话

# 查看当前用户的音频服务
systemctl --user status pipewire pipewire-pulse wireplumber --no-pager

在发生问题的桌面用户会话执行,不加 sudo 切到 root 的 user manager。服务名称依发行版调整。

# 列出设备、节点与应用流的实际名称
wpctl status -n

记录目标 sink/source 的当前 ID 和名称;重启或重插后重新获取,不复用旧数字。

# 确认 PulseAudio 协议连接的是哪个服务器
pactl info

Server Name 与 Server String 应符合当前 PipeWire 兼容层;连接失败先处理服务/会话环境。

按对象分别查看

# 列出可用播放目标
pactl list short sinks
# 列出录音设备与输出监听源
pactl list short sources

带 .monitor 的名称通常对应输出混音,不是物理麦克风。

# 在应用正在播放时查看兼容层播放流
pactl list short sink-inputs

原生 PipeWire 流不一定出现在这里;空列表先确认应用是否正在输出以及使用的协议。

# 确认 ALSA 可枚举的硬件播放设备
aplay -l
# 在内核层核对声卡枚举
cat /proc/asound/cards

只有需要进一步定位硬件时使用;蓝牙设备不应一概按 ALSA 声卡缺失判故障。

先看 Server Name 是否为预期兼容服务、目标 sink 是否存在、流是否出现。wpctl status 的星号代表默认节点,不代表所有已有流都已接到它。ALSA 能枚举声卡不代表 profile、静音和应用路由正确。

默认设备与已固定的流分开操作

正在呈现知识画面
改变默认设备,为何旧音频还留在原处

默认节点是自动连接的候选;已有流可固定到自己的目标。模型把改变默认、固定流、显式移动流三个动作分开。

音量与静音:每项独立选择

# 读取默认输出当前音量与静音
wpctl get-volume @DEFAULT_AUDIO_SINK@
# 需要调高时增加五个百分点并限制到百分之百
wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+ --limit 1.0

相对增量不是音量乘以 1.05;执行后再 get-volume 核对。它不会自动修复错误的输出路由。

# 需要恢复播放时明确取消输出静音
wpctl set-mute @DEFAULT_AUDIO_SINK@ 0

0 取消、1 静音;toggle 适合快捷键,诊断时明确状态更容易复现。

# 只在需要关闭麦克风时设置输入静音
wpctl set-mute @DEFAULT_AUDIO_SOURCE@ 1

输入和输出是不同对象,不要把本条当成恢复声音的必经步骤。恢复录音用 0,并检查应用权限和输入来源。

修改默认目标,或移动现有流

# 将已核对的播放节点设为新流默认目标
wpctl set-default 42

42 替换为当前 wpctl status 的 sink ID;记录原默认节点,回退时重新查询并选回它。操作后看星号位置并启动一次新播放。

# 为要移动的活动播放流取得当前 ID
pactl list short sink-inputs

结合应用名称确认对象;它不是 wpctl 的 sink ID。

# 将指定兼容流移动到已存在的输出
pactl move-sink-input 73 YOUR_SINK_NAME

73 换成上条 ID,目标取自 pactl list short sinks 的名称。重新列出流看目标字段,并实际试听;应用重建流后可能采用新的策略。

只有 profile 不合适时才切换

# 读取声卡可用 profile 和当前选择
pactl list cards
# 采用列表中实际可用的目标 profile
pactl set-card-profile YOUR_CARD_NAME YOUR_PROFILE_NAME

两名称均取自 list cards,先记录原 profile。切换可能中断播放并改变节点 ID;之后重新查 sinks/sources 与应用路由,回退也用原 profile 的真实名称。

42 来自当前 wpctl 的 sink,73 来自当前 pactl 的 sink-input,YOUR_SINK_NAME 来自 pactl sinks。set-default 影响需自动连接的新流;现有流是否迁移还受策略、保存目标和应用行为影响。要确定地移动某条兼容流,用其 sink-input ID 或 pavucontrol。profile 必须从 pactl list cards 的可用列表选取;切到通话 profile 可能改变带宽与麦克风能力。

在失败层收集证据后再重启

先保留故障发生时的证据

# 读取当前会话的服务错误
journalctl --user -u pipewire -u pipewire-pulse -u wireplumber -b -n 150 --no-pager
# 实时观察节点运行、错误和处理时间
pw-top

保持复现负载,观察 ERR 是否持续增加以及变化对应的节点;q 退出。单次高值不能单独证明哪一层故障。

# 查看当前故障节点的详细属性
wpctl inspect 42

先重新确认 ID;看 node.name、设备关联和媒体类型,不能把旧 ID 对应的新对象当成原设备。

# 进一步读取输出的 mute、port、状态和属性
pactl list sinks
# 设备消失时检查内核驱动和固件错误
journalctl -k -b -n 100 --no-pager
现象下一步
只有 Dummy Output查声卡枚举、驱动/固件、设备权限和 WirePlumber 日志
有 sink、有流但无声查流目标、两级静音、profile/port、ALSA mixer 与物理连接
卡顿 / 爆音用 pw-top 的错误与负载变化对齐时间,不先随意调采样率和 quantum
蓝牙无声先确认连接与 profile,见 蓝牙

确认需要重启后用 systemctl --user restart wireplumber,只有核心或兼容层异常才扩展到 pipewire/pipewire-pulse;这会影响活动会话,应用可能要重连。aplay -D hw 可能因格式或独占失败,speaker-test 的 default 也可能经过 PipeWire,二者都不是单独的硬件好坏判决。timeout 命令返回 124 仅表示超时,不直接定位音频守护进程死锁。

先选输入源,再验证容器与编码

录音:选择来源、停止、再检查文件

# 按名称选择麦克风或输出 monitor
pactl list short sources
# 从确认过的来源录制 WAV
parecord --file-format=wav --device=YOUR_SOURCE_NAME recording.wav

替换来源名并选未使用的文件名;该命令持续运行,录制代表性内容后按 Ctrl-C,等待返回 shell,再执行下一条。不要一次粘贴录制与后处理。

# 录制结束后检查时长、声道、采样率和编码
ffprobe -v error -show_format -show_streams -of json recording.wav

确认文件可解析、时长符合录制窗口并试听实际内容;文件存在不说明录到了正确来源。

转码:先查输入和本机编码器

# 检查源文件中的流、编码和时长
ffprobe -v error -show_format -show_streams -of json input.mp4
# 确认本机构建包含所需编码器
ffmpeg -hide_banner -encoders

下面使用 libx264 与 aac;硬件编码器还要求匹配设备、驱动和权限,列出名称不等于可用。

# 将第一条视频与可选第一条音频转为 H.264/AAC
ffmpeg -n -i input.mp4 -map 0:v:0 -map "0:a:0?" \
  -c:v libx264 -crf 23 -c:a aac output.mp4

-n 拒绝覆盖,-map 明确取流,问号允许没有音频;CRF 越小通常质量和文件体积越高。此例不保留所有字幕/附件/音轨,需求不同先调整映射。

# 验证输出格式与时长,再试听画面和声音
ffprobe -v error -show_format -show_streams -of json output.mp4

需要仅换容器时可考虑 -c copy,但先确认目标容器支持原编码,并使用新的输出文件;它与上面的重编码是不同方案。

录音 Ctrl-C 结束;monitor source 捕获对应输出的混音,普通 source 是输入设备。parec 默认原始流不能仅改扩展名冒充 WAV。FFmpeg 最后一条是需要相应编码器的转码示例,CRF 23 不是通用质量承诺;-c copy 不重编码但仍受目标容器兼容性约束。编码器列出不证明硬件设备、权限与驱动都可用。

Wayland 录屏优先使用桌面支持的 portal/录制工具;wf-recorder 要求合适的 screencopy 协议支持,不能推广到所有 Wayland 桌面。音频参数使用实际 source 名,不直接把“HDMI”当设备名。媒体键可绑定上面的 wpctl 命令及 playerctl play-pause/next/previous,按桌面当前配置语法接入。固件问题先查内核明确缺少的文件,再按发行版安装对应 firmware,见 内核。

WirePlumber wpctl · Linking policy · FFmpeg · wf-recorder