Конвертировать аудио файлы для ввода CMU Sphinx 4
У меня есть большая партия файлов, которые я хотел бы запустить распознавание при использовании CMU Sphinx 4. Для Sphinx требуется следующий формат:
- 16 кГц
- 16 бит
- моно
- прямой порядок байтов
Мои файлы - что-то вроде 44100 кГц, 32-битные стереофонические mp3-файлы. Я попытался использовать Tritonus, а затем его обновленную версию JavaZoom, чтобы конвертировать, используя код из bakuzen. Тем не мение, AudioSystem.getAudioInputStream(File)
бросает UnsupportedAudioFileException
и я не смог понять почему, поэтому я пошел дальше.
Сейчас я пытаюсь ffmpeg. Команда ffmpeg -i input.mp3 -ac 1 -ab 16 -ar 16000 output.wav
Похоже, что это должно сработать (за исключением байтов с прямым порядком байтов), но когда я проверяю вывод с помощью Audacity, он по-прежнему помечает его как "32-разрядный float". Команда, которую я нашел на этом сайте, также использует -acodec pcm_s16le
который из своего имени, похоже, выводит 16-битный порядок байтов; тем не менее, Audacity все еще говорит мне, что результат 32 bit float
,
Может кто-нибудь сказать мне, как конвертировать аудио файлы в формат, требуемый CMU Sphinx 4?
1 ответ
Вы на самом деле пробовали вывод ffmpeg в CMU Sphinx 4? 32-разрядный формат с плавающей запятой, вероятно, является форматом выборки по умолчанию в Audacity ("Правка"> "Настройки"> "Качество"). Я предполагаю, что он преобразует любой импортированный файл в эти настройки, поэтому он может не сообщать о параметрах реального файла, но, возможно, рабочий файл в Audacity.
Удалить -ab 16
, Это будет указывать кодировщику использовать 16 бит / с, и ffmpeg будет игнорировать его для pcm_s16le в любом случае. Итак, ваша команда будет выглядеть так:
ffmpeg -i input.mp3 -acodec pcm_s16le -ac 1 -ar 16000 output.wav
Чтобы преобразовать все mp3-файлы в каталоге в Linux:
for f in *.mp3; do ffmpeg -i "$f" -acodec pcm_s16le -ac 1 -ar 16000 "${f%.mp3}.wav"; done
Или Windows:
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
, ffmpeg
, ffprobe
, 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