7

我有一大堆文件想在使用 CMU Sphinx 4 时运行识别。Sphinx 需要以下格式:

  • 16 千赫兹
  • 16 位
  • 单核细胞增多症
  • 小端

我的文件类似于 44100 khz、32 位立体声 mp3 文件。我尝试使用 Tritonus,然后使用它的更新版本 JavaZoom,使用来自bakuzen的代码进行转换。但是,AudioSystem.getAudioInputStream(File)抛出一个UnsupportedAudioFileException,我无法弄清楚为什么,所以我继续前进。

现在我正在尝试 ffmpeg。该命令ffmpeg -i input.mp3 -ac 1 -ab 16 -ar 16000 output.wav似乎应该可以解决问题(小端除外),但是当我使用 Audacity 检查输出时,它仍然将其标记为“32 位浮点数”。我在这个网站上找到的命令也使用-acodec pcm_s16le了 ,从它的名字看似乎是输出 16 位小端;但是,Audacity 仍然告诉我输出是32 bit float.

谁能告诉我如何将音频文件转换为 CMU Sphinx 4 所需的格式?

4

1 回答 1

20

你真的尝试过 CMU Sphinx 4 中 ffmpeg 的输出吗?32 位浮点数可能是您在 Audacity 中的默认采样格式(Edit > Preferences > Quality)。我猜它会将任何导入的文件转换为这些设置,因此它可能不会报告实际文件的参数,但可能是 Audacity 中的工作文件。

删除-ab 16. 这将指示编码器使用 16 位/秒,而 ffmpeg 无论如何都会为 pcm_s16le 忽略它。所以你的命令看起来像:

ffmpeg -i input.mp3 -acodec pcm_s16le -ac 1 -ar 16000 output.wav

在 Linux 中转换目录中的所有 mp3 文件:

for f in *.mp3; do ffmpeg -i "$f" -acodec pcm_s16le -ac 1 -ar 16000 "${f%.mp3}.wav"; done

或视窗:

for /r %i in (*) do ffmpeg -i %i -acodec pcm_s16le -ac 1 -ar 16000 %i.wav

在 Windows 批处理文件中:

for /r %%i in (*.mp3) do ffmpeg -i "%%i" -acodec pcm_s16le -ac 1 -ar 16000 "%i.wav"

file您可以使用、ffmpegffprobe以及mediainfo其他实用程序查看文件信息:

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

$ ffmpeg -i hjl0bC.wav
[...]
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 16000 Hz, mono, s16, 256 kb/s
于 2012-12-04T01:46:18.230 回答