You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过命令行管道将PipeWire音频传输至ffmpeg stdin

PipeWire音频流导出为管道可读裸流的实现方案

完全可以实现,PipeWire原生自带工具即可直接输出能被cat、ffmpeg等命令通过标准输入读取的音频流,不需要额外安装第三方插件。

核心实现工具

使用PipeWire默认预装的pw-cat命令即可,该工具支持将采集到的音频直接输出到标准输出(stdout),天然适配命令行管道机制。

具体使用方法

  • 基础采集命令
    显式指定音频格式参数,将裸音频流输出到stdout的命令格式如下:

    pw-cat -r --format s16 --rate 48000 --channels 2 -
    

    参数说明:

    • -r:启用录制模式,从PipeWire音频服务捕获音频流
    • --format s16:指定输出为16位有符号小端PCM格式,是通用音频工具兼容度最高的裸流格式
    • --rate 48000:设置采样率为48kHz,和PipeWire默认全局采样率对齐,避免不必要的重采样开销
    • --channels 2:设置双声道输出
    • 末尾的-:指定输出目标为标准输出,而非本地文件,输出的流可以直接被管道后续命令读取
  • 验证流可读性
    你可以直接用cat命令接收流数据写入本地文件,验证流的通用性:

    # 录制几秒后按Ctrl+C终止,生成的test.pcm就是标准裸PCM文件
    pw-cat -r --format s16 --rate 48000 --channels 2 - | cat > test.pcm
    
  • 直接对接ffmpeg的管道示例
    采集到的流可以直接通过管道喂给ffmpeg的标准输入,注意ffmpeg侧需要指定和采集端完全一致的裸流参数,否则会出现解析错误:

    pw-cat -r --format s16 --rate 48000 --channels 2 - | ffmpeg -f s16le -ar 48000 -ac 2 -i - -c:a libmp3lame output.mp3
    

    上述命令会直接将PipeWire采集的音频实时编码为MP3文件,不产生中间临时文件。

  • 指定采集目标节点
    如果不需要采集默认音频设备,而是要采集指定应用、指定声卡的音频流,可以先通过wpctl status命令查询目标音频节点的ID,再通过--target参数指定采集源:

    # 示例中52为目标节点ID,替换为你实际查询到的ID即可
    pw-cat -r --target 52 --format s16 --rate 48000 --channels 2 -
    

注意事项

禁止省略格式、采样率、声道数参数直接运行pw-cat -r -,默认输出参数可能和你预期的配置不匹配,会导致后续工具解析出的音频出现爆音、杂音、变速变调问题,采集端和接收端的参数必须严格对齐。

如果你系统安装了PulseAudio兼容工具,也可以用parec --raw -命令实现类似效果,但原生pw-cat没有兼容层开销,性能表现更好。

内容的提问来源于stack exchange,提问作者les_h

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 23:48:36