如何使用 mplayer 创建 PCM wav?

如何使用 mplayer 创建 PCM wav?

我想使用 speexenc 为我的手机重新编码有声读物。第一步是使用 mplayer 重新编码文件。

for i in *.mp3; do
    mplayer -ao pcm:waveheader "$i" -af pan=1:0.5:0.5,resample=22050 -ao pcm:file="$i.wav";
done

是我在网上找到的。但输出文件不是 pcm wav:

file *.wav
RIFF (little-endian) data, WAVE audio, mono 22050 Hz

其中来自 xiph.org 的参考 wav 是 pcm。

file wb_male.wav 
RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 16000 Hz

speexenc 会对最后一个 PCM WAV 进行编码,但不会对 mplayer 文件进行编码。为什么不?名为“pcm”的音频输出是否不输出 pcm 文件?如何修复它?有没有一种简单的方法可以将 wav 直接通过管道传输到 speexenc 而无需命名 fifo?

答案1

MPlayer 手册页使用以下语法:

mplayer -ao pcm:file=test.wav test.avi

如果您想做限制采样率之类的事情,您可以添加一个-srate选项(例如-srate 44100红皮书 CD 音频)。

但是,如果您安装了它,我建议您使用它,ffmpeg因为它实际上是用于执行这些操作的。

答案2

mplayer -ao pcm从 mp3生成的 wav 文件是 PCM 格式。它恰好是浮点 PCM,因为这是 mp3 解码器自然产生的。file应该告诉你这一点,但它不知道浮点 PCM 格式。

mp3 解码器生成浮点数并-ao pcm只写入它接收到的任何格式,因此您需要它们之间的某些东西来更改格式:af format过滤器。对于有符号的 16 位小端(这可能是您想要的),-af format=s16le会这样做。

答案3

当您使用 pcm 输出运行 mplayer 时,它会告诉您最快的方法:

Info: Faster dumping is achieved with -benchmark -vc null -vo null -ao pcm:fast

所以

mplayer in.mp3 -benchmark -vc null -vo null -ao pcm:fast:file=out.wav -af format=s16le

结果:

$ file out.wav
RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, stereo 48000 Hz

这样就够了吗?您可以使用 sox 或 audacity 将立体声转换为单声道。

相关内容