1

在 Ubuntu 20.04、Csound 6.13.0、ffmpeg 4.2.4 上运行良好:

git clone https://github.com/csound/csound
cd csound
git checkout 92409ecce053d707360a5794f5f4f6bf5ebf5d24
csound examples/xanadu.csd

我可以保存到文件:

csound -o xanadu.wav xanadu.csd
ffplay xanadu.wav

或者:

csound -W -o stdout xanadu.csd > xanadu-stdout.wav

甚至从文件转换:

ffmpeg -i xanadu-stdout.wav xanadu-stdout.ogg
ffplay xanadu-stdout.ogg

或者:

cat xanadu-stdout.wav | ffmpeg -f wav -i - xanadu.ogg

或者:

csound -W -o stdout xanadu.csd | cat > xanadu-cat.wav

那么为什么这会从直接管道失败:

csound -W -o stdout xanadu.csd | ffmpeg -f wav -i - xanadu.ogg

或者:

csound -W -o stdout xanadu.csd | cat > xanadu-cat.wav
ffmpeg -y -f wav -i xanadu-cat.wav xanadu.ogg

和:

[wav @ 0x56093284c6c0] invalid start code d[163][3][0] in RIFF header
xanadu-cat.wav: Invalid data found when processing input

所以看起来xanadu.wavxanadu-cat.wav是不同的:

$ diff -u xanadu.wav xanadu-cat.wav
Binary files xanadu.wav and xanadu-cat.wav differ

这使得转换失败。

我知道:

csound --ogg -o xanadu.ogg xanadu.csd

这确实有效,但我只是想通过管道进入 ffmpeg 以获得乐趣。

还问:https ://github.com/csound/csound/issues/1408

4

0 回答 0