从nodejs发送2个流到FFmpeg
Sending 2 streams to FFmpeg from nodejs
我正在尝试发送 2 ReadableStreams to FFmpeg from nodejs. I have tried using fluent-ffmpeg library to do this, but it only supports sending one stream for processing. Check here
我的问题是:
我有 2 个传入的单声道音频流,我想将它们发送到 ffmpeg 以创建立体声流,然后我将其发送到 google 的语音到文本服务,以生成转录。
我已成功将两个单声道流接收到 nodejs 服务器。
如何利用 FFmpeg 实时合并它们仍然不清楚,我可以生成一个 FFmpeg 子进程,但我不确定如何将 2 ReadableStreams 作为输入并将输出作为另一个流获取? FFmpeg 支持多个输入流。
如果 2 个单声道流位于两个单独的文件中,我可以使用此代码合并它们。
const { spawn } = childProcess;
const ffmpeg = spawn('ffmpeg', [
'-i', this.phoneAudioFile,
'-i', this.micAudioFile,
'-filter_complex', '[0:a][1:a]amerge=inputs=2[a]',
'-map', '[a]',
this.outputLosslessFile,
]);
我如何使用 2 个流而不是 2 个文件来实现同样的效果?
编辑
- 传入的流都有 PCM 音频数据。
- 整个过程在 linux Ubuntu 服务器上运行。
- 最终输出必须是wav文件。
假设您的源音频流是常规 PCM 音频(例如 WAV 文件中最常见的音频),我会在您的应用程序内部合并这些流,并将单个流输出到 FFmpeg。
这可以很简单地完成,只需交替您从哪个流读取,有效地交错样本。
如果您的样本是 16 位的,那么每个样本都是两个字节。因此,您的信息流将如下所示:
[LL][RR][LL][RR][LL][RR]
(其中每个 LL
是左声道单个样本的 2 个字节,RR
也是如此)
如果您要将其导入 FFmpeg,则需要为 RAW PCM 设置适当的参数。或者,您也可以在您的应用程序中生成 WAV 文件头。
我正在尝试发送 2 ReadableStreams to FFmpeg from nodejs. I have tried using fluent-ffmpeg library to do this, but it only supports sending one stream for processing. Check here
我的问题是: 我有 2 个传入的单声道音频流,我想将它们发送到 ffmpeg 以创建立体声流,然后我将其发送到 google 的语音到文本服务,以生成转录。
我已成功将两个单声道流接收到 nodejs 服务器。 如何利用 FFmpeg 实时合并它们仍然不清楚,我可以生成一个 FFmpeg 子进程,但我不确定如何将 2 ReadableStreams 作为输入并将输出作为另一个流获取? FFmpeg 支持多个输入流。
如果 2 个单声道流位于两个单独的文件中,我可以使用此代码合并它们。
const { spawn } = childProcess;
const ffmpeg = spawn('ffmpeg', [
'-i', this.phoneAudioFile,
'-i', this.micAudioFile,
'-filter_complex', '[0:a][1:a]amerge=inputs=2[a]',
'-map', '[a]',
this.outputLosslessFile,
]);
我如何使用 2 个流而不是 2 个文件来实现同样的效果?
编辑
- 传入的流都有 PCM 音频数据。
- 整个过程在 linux Ubuntu 服务器上运行。
- 最终输出必须是wav文件。
假设您的源音频流是常规 PCM 音频(例如 WAV 文件中最常见的音频),我会在您的应用程序内部合并这些流,并将单个流输出到 FFmpeg。
这可以很简单地完成,只需交替您从哪个流读取,有效地交错样本。
如果您的样本是 16 位的,那么每个样本都是两个字节。因此,您的信息流将如下所示:
[LL][RR][LL][RR][LL][RR]
(其中每个 LL
是左声道单个样本的 2 个字节,RR
也是如此)
如果您要将其导入 FFmpeg,则需要为 RAW PCM 设置适当的参数。或者,您也可以在您的应用程序中生成 WAV 文件头。