Главная → Блог → Подготовка аудио к распознаванию: рецепты ffmpeg
Подготовка аудио к распознаванию: рецепты ffmpeg
Половина проблем с распознаванием решается до запроса к API — на этапе подготовки файла. Ниже набор команд ffmpeg, которые закрывают почти все случаи: видео вместо аудио, стерео вместо моно, час тишины в конце записи и файл, не влезающий в лимит.
Извлечь звук из видео
Запись встречи, вебинара или экрана обычно приходит в mp4. Видеодорожка распознаванию не нужна:
ffmpeg -i meeting.mp4 -vn -ac 1 -ar 16000 -c:a libopus -b:a 24k meeting.ogg
Файл на полтора часа после такой обработки весит около 15 МБ вместо полутора гигабайт и загружается за секунды.
Разложить собеседников по каналам
Если телефония пишет оператора и клиента в разные каналы стерео, это шанс получить точное разделение реплик без всякой диаризации:
ffmpeg -i call.wav -map_channel 0.0.0 operator.ogg -map_channel 0.0.1 client.ogg
Дальше распознаём файлы по отдельности и склеиваем реплики по тайм-кодам — получается диалог с точной атрибуцией.
Убрать тишину и обрезать края
Запись с диктофона часто начинается за десять минут до разговора. Обрезать лишнее по времени:
ffmpeg -i raw.ogg -ss 00:09:30 -to 01:12:00 -c copy trimmed.ogg
Убрать длинные паузы внутри записи:
ffmpeg -i raw.ogg -af silenceremove=stop_periods=-1:stop_duration=2:stop_threshold=-40dB clean.ogg
С удалением тишины важно понимать цену: тайм-коды в результате перестают соответствовать исходной записи. Если вы собираетесь возвращаться к моментам видео, лучше оставить паузы на месте.
Разрезать длинную запись
Нарезка равными кусками по 15 минут:
ffmpeg -i long.ogg -f segment -segment_time 900 -c copy part%03d.ogg
Такой способ прост, но может разорвать фразу. Чтобы резать по паузам, сначала находим тишину:
ffmpeg -i long.ogg -af silencedetect=noise=-35dB:d=1 -f null - 2>&1 | grep silence_end
Полученные отметки используем как границы кусков — тогда ни одно предложение не разорвётся пополам, и склеенный текст читается как единый.
Попробуйте на своих записях. Регистрация занимает минуту, бесплатных минут хватает, чтобы оценить качество.
Получить ключ бесплатноЧастые вопросы
Обязательно ли сводить в моно?
Не обязательно, но полезно: файл вдвое легче, а на результат это не влияет. Стерео стоит сохранять только тогда, когда собеседники записаны в разные каналы.
Почему именно 16 кГц?
Модель работает с этой частотой дискретизации, всё что выше — приводится к ней внутри. Отправлять 48 кГц можно, но вы просто платите трафиком за данные, которые будут отброшены.
Не ухудшит ли сжатие в opus качество распознавания?
На 24 кбит/с моно разницы в тексте практически не бывает: кодек рассчитан на речь. Заметные потери начинаются ниже 16 кбит/с.
Как склеить расшифровки нарезанных кусков?
Сортируйте части по номеру в имени файла и соединяйте тексты в том же порядке. Если нужны сквозные тайм-коды, прибавляйте к времени сегмента смещение начала куска.
Читайте также
- Какой формат аудио выбрать для распознавания речи — mp3, wav, ogg, opus, m4a и webm в задаче распознавания речи: на что влияет битрейт, зачем моно и 16 кГц, как уложиться в лимит размера файла.
- Как расшифровать запись, которая не влезает в один запрос — Что делать с записью на несколько часов: сжатие, нарезка по паузам, параллельная обработка кусков и сборка единого текста со сквозными тайм-кодами.
- Кто что сказал: разделение говорящих в расшифровке — Почему одна сведённая запись не возвращается с метками говорящих и четыре рабочих способа получить разделение — от многодорожечной записи до разделения каналов.