我想使用 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 将立体声转换为单声道。