如何解决仅通过管道的音频流编码工作流程

如何解决仅通过管道的音频流编码工作流程

我有以下工作流程,通常在一组提供的音频文件上执行(可以是 MP3 文件,如本例中假设的,但也可以有不同的格式):

file000.mp3
file001.mp3
...

我想要实现的是将这些 MP3 文件解码为 WAV,将它们连接起来,在大文件上运行一些 SoX 音频过滤器,然后再次对其进行编码,比如使用 opusenc。

这导致以下单独的步骤:

for i in *.mp3 ; do lame --decode "$i" ; done
sox *.wav output.wav
opusenc --bitrate 64 output.wav output.opus

现在我有大量输入文件,但可用存储空间有限。我想做的是通过将它们相互传输来运行整个命令链。我一直试图通过将蹩脚解码到 stdin 来解决这个问题,ffmpeg 也是如此,但无济于事。尽管手动将输出流格式(通过管道传输到 sox)设置为 s16le,但 ffmpeg 抱怨格式设置无效,无法成功解码。

有人知道如何使用提供的命令(或等效命令)创建此管道链吗?如果不使用 mkfifo 命令来管理它,那就太好了。

相关内容