我有以下工作流程,通常在一组提供的音频文件上执行(可以是 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 命令来管理它,那就太好了。