返回

PipeWire 输入音频录制:使用 gst-launch-1.0 的终极指南

Linux

从任何 PipeWire 输入中使用 gst-launch-1.0 录制音频

前言

音频录制是多媒体开发中一项基本任务,尤其是在流媒体、视频制作和语音识别等应用中。本文将指导您如何在 Linux 系统中使用 gst-launch-1.0 从 PipeWire 音频输入设备录制音频,并将其保存到音频文件中。

确定音频输入设备

要从特定的音频输入设备录制,您首先需要确定其目标对象 ID。可以使用 gst-device-monitor-1.0 命令来列出可用的设备:

gst-device-monitor-1.0 Audio/Source

输出将显示设备的名称和目标对象 ID。

构建管道

使用 pipewiresrc 元素创建一个 GST 管道,指定要使用的音频输入设备的目标对象 ID:

pipewiresrc target-object=<目标对象 ID>

转换和编码音频

接下来,添加必要的音频转换和编码元素。这将确保音频以兼容的格式进行编码,例如 WAV、MP3 或 OGG。

  • 音频转换: 将原始音频数据转换为所需的格式,例如使用 audioconvert 元素。
  • 音频采样率转换: 将音频采样率调整为所需的频率,例如使用 audioresample 元素。
  • 编码: 选择适当的音频编码器,例如 wavenc 用于 WAV 文件,mp3enc 用于 MP3 文件,或 oggenc 用于 OGG 文件。

保存到文件

最后,添加一个文件接收器,例如 filesink,以将编码后的音频数据保存到指定的文件中:

filesink location=<文件路径>

示例管道

以下示例演示如何从具有目标对象 ID 为 67 的音频输入设备录制音频并将其保存到名为 output.wav 的 WAV 文件中:

gst-launch-1.0 pipewiresrc target-object=67 ! audioconvert ! audioresample ! wavenc ! filesink location=output.wav

故障排除

错误: “video-info video-info.c:540: gst_video_info_from_caps: wrong name 'audio/x-raw', expected video/ or image/”

原因: GST 正在使用视频信息函数来处理音频数据。

解决方案: 添加一个 typefind 元素以显式指定数据类型为音频:

pipewiresrc target-object=67 ! typefind audio ! audioconvert ...

常见问题解答

1. 如何选择正确的目标对象 ID?

使用 gst-device-monitor-1.0 Audio/Source 命令列出可用设备及其目标对象 ID。

2. 可以从多个音频输入设备同时录制吗?

是的,您可以使用 pipewiresrc 元素的 device-index 属性指定多个设备。

3. 如何使用不同的音频格式进行录制?

只需更改编码器元素(例如 wavencmp3encoggenc)即可使用不同的音频格式。

4. 如何调整音频采样率?

使用 audioresample 元素将音频采样率调整为所需的频率。

5. 如何从网络摄像头录制音频?

网络摄像头通常具有内置麦克风。使用 v4l2src 元素并设置 device-index 属性以从网络摄像头录制音频。

结论

通过遵循本文中概述的步骤,您可以使用 gst-launch-1.0 从 PipeWire 音频输入设备轻松录制音频。这种方法具有很高的灵活性,允许您控制输入设备、音频转换和编码,以及输出文件格式。