Запрос «как расшифровать большой аудиофайл» приходит к нам в одной и той же обстановке: на руках трёхчасовой вебинар на два гигабайта, почта его не берёт, а вкладка браузера обрывает загрузку на семидесяти процентах. Дальше начинается самодеятельность: один режет запись наугад, другой жмёт её до качества телефонной трубки. Обычно не нужно ни то, ни другое.
Длина записи распознаванию не мешает: современные модели идут быстрее реального времени, час речи превращается в текст за минуты. Ломается другое: канал загрузки, потолок контейнера и объём готового текста. Значит, разбираться придётся с байтами, частотой дискретизации и кодеками, а не с минутами.
Почему большой аудиофайл превращается в проблему
Сначала определите, какой у вас «большой». Вес это арифметика формата: несжатый WAV на 44,1 кГц, 16 бит, стерео даёт 44100 × 16 × 2 = 1411 кбит/с, то есть 10,6 МБ на минуту и 635 МБ на час. Трёхчасовое заседание занимает 1,9 ГБ. Та же встреча в mp3 на 64 кбит/с моно уложилась бы в 87 МБ: разница в 22 раза берётся из выброшенных данных.
У WAV к тому же есть потолок: поле размера в контейнере RIFF 32-битное, файл не растёт дальше 4 ГиБ. Для 44,1 кГц стерео это примерно 6 часов 45 минут, а часть программ спотыкается уже на двух гигабайтах, читая поле как знаковое. Диктофоны с картой в FAT32 бьются о тот же барьер (4 ГиБ минус один байт) и молча делят запись сами. Ограничение снимают RF64 и W64, открывают их не все редакторы.
Второй тип «большого» безобиднее: вес нормальный, пугает длительность, а время обработки растёт линейно. Третья трудность видна в конце: деловая речь идёт по 100–130 слов в минуту, значит три часа это 18–23 тысячи слов, за пятьдесят учётных страниц по 1800 знаков. Подряд такое не читают.
Канал ломается иначе: файл уходит одним запросом, и обрыв на семидесяти процентах означает старт с нуля. Отсюда развилка.
| Что на руках | Что делать | Что на выходе | Чем платите |
|---|---|---|---|
| WAV на три часа, 1,9 ГБ, канал держит | сжать в mp3 или m4a одним проходом | файл около 90 МБ, время сквозное | одним сжатием, на речи не слышно |
| MP4 вебинара | вынуть звуковую дорожку | m4a без перекодирования | ничем, кроме видеоряда |
| Аплоад рвётся на мобильной сети | резать по паузам получасовыми частями | шесть файлов, каждый отдельно | стыками и ручной сборкой |
| Многодневная конференция | резать по дням и сессиям | файл на сессию | сквозным поиском |
| Голосовое из мессенджера | грузить как есть | ogg или m4a, уже сжатые | ничем, второе сжатие испортит |
Как разделить большой аудиофайл и не потерять слова на стыке
Прежде чем разбираться, как разделить большой аудиофайл, ответьте на встречный вопрос: зачем вы его делите? Нам дробить файл незачем, запись принимается целиком. Резать стоит в двух случаях: канал слабый и вы хотите переотправлять только неудавшийся кусок, либо части нужны сами по себе.
Режьте по паузам, а не по таймеру: разрез на тридцатой минуте попадёт в середину слова, и оно потеряется дважды, в конце одной части и в начале другой. Тишину найдёт сам ffmpeg: ffmpeg -i zapis.wav -af silencedetect=n=-30dB:d=0.5 -f null - выпишет метки silence_start и silence_end для всех пауз тише -30 дБ и длиннее полусекунды. По ним и ставьте границы, с нахлёстом в две-три секунды.
Когда кусков много, удобнее сегментер: ffmpeg -i zapis.wav -f segment -segment_time 1800 -reset_timestamps 1 -c copy chast_%03d.wav нарежет запись получасовыми частями. Флаг -c copy перекладывает поток без повторного сжатия, но разрез ложится на границу кадра кодека: у MP3 это 1152 сэмпла, около 26 мс при 44,1 кГц, у AAC-LC 1024. Точнее не разрежете. Нахлёст нужен и по второй причине: распознавание идёт окнами, у моделей семейства Whisper (Radford и соавторы, 2022) окно 30 секунд.
Вот что ломается при нарезке.
- Тайм-коды. Отсчёт в каждом куске стартует с нуля, к третьей получасовой части придётся прибавлять час.
- Субтитры. Блоки SRT нумеруются с единицы в каждом файле, при склейке нумерацию переписывают; время идёт через запятую (00:29:58,400), а в VTT через точку и со словом WEBVTT в первой строке.
- Спикеры. Диаризация нумерует голоса заново, «Спикер 2» из второй части окажется «Спикером 1» в третьей.
- Порядок. Называйте части с ведущим нулём (chast_001), иначе при сортировке chast_10 встанет после chast_1.
- Контекст. Модель опирается на соседние слова, и разрезанная посередине фраза распознаётся хуже целой.
Если тайм-коды и разметка по спикерам важны, оставьте запись целой и уменьшите вес форматом.
Как подготовить аудио к расшифровке и чем его конвертировать
Вопрос, как подготовить аудио к расшифровке, сводится к трём параметрам: частота дискретизации, кодек и число каналов. Начните с проверки: ffprobe -v error -show_entries stream=codec_name,sample_rate,channels -of default=noprint_wrappers=1 zapis.m4a выведет три строки. Расширение врёт часто, содержимое никогда.
Теорема Котельникова (1933) держит верхнюю границу полосы на половине частоты дискретизации: 16 кГц дают полосу до 8 кГц, телефонные 8 кГц только до 4. Стандарт телефонии G.711 (1972) работает как раз на 8 кГц и 64 кбит/с в полосе 300–3400 Гц: запись с линии звучит глухо не из-за сжатия, а из-за отрезанного верха. Шипящие и глухие согласные (с, ш, ф, ц) держат энергию выше 4 кГц, и на узкой полосе путаются в первую очередь они, а с ними фамилии и числа. Понижать частоту дискретизации ради экономии не надо: полоса обратно не восстанавливается.
Конвертировать аудио приходится в двух случаях. Первый: исходник несжатый, и ffmpeg -i zapis.wav -c:a libmp3lame -b:a 64k -ac 1 zapis.mp3 за один проход убирает из веса целый порядок. Второй: у вас видео, а звук надо вынуть из контейнера, и ffmpeg -i vebinar.mp4 -vn -c:a copy zvuk.m4a достаёт дорожку без перекодирования, потому что в MP4 звук почти всегда и так AAC. Одно сжатие из PCM в mp3 на разборчивости речи почти не сказывается, второе копит артефакты, поэтому голосовое из мессенджера грузите как есть. А если сжимать не хочется, транскрибация wav в текст работает и с исходником.
| Формат и режим | Час записи | Когда подходит | Где ломается |
|---|---|---|---|
| WAV PCM, 44,1 кГц / 16 бит / стерео | 635 МБ | исходник и монтаж, 16 бит это около 96 дБ динамики | предел RIFF в 4 ГиБ, мобильный аплоад |
| MP3, 128 кбит/с, стерео | 58 МБ | универсальный обмен, откроется где угодно | второе сжатие копит артефакты |
| MP3 или AAC, 64 кбит/с, моно | 29 МБ | совещания, звонки, диктофон в телефоне | пение и музыка распадаются |
| OGG с кодеком Opus (RFC 6716), 24 кбит/с, моно | 11 МБ | слабый канал, многочасовая речь | часть плееров его не открывает |
| Дорожка G.711 с телефонной линии, 8 кГц | 29 МБ | другого варианта всё равно нет | полоса 300–3400 Гц, числа перечитайте |
| FLAC, ALAC, WMA, AMR | у FLAC половина WAV | архив без потерь | в приём не входят, приводите к mp3 |
Как расшифровать большой аудиофайл целиком
Когда файл приведён в порядок, остаётся рутина. Принимаем mp3, wav, m4a, ogg и aac файлом либо запись с микрофона, поля для ссылки нет: ролик с видеохостинга сначала скачивают на диск. Обработка занимает 1–2% длительности, трёхчасовой файл проходит за три-четыре минуты.
Дальше по шагам, без нарезки.
- загрузите файл там, где живёт транскрибация аудио в текст, и включите деление на спикеров;
- дождитесь обработки и заберите текст: txt для чтения, verbose_json для скрипта.
Загрузка займёт больше времени, чем распознавание: гигабайт это около 8000 мегабит, при исходящем канале 10 Мбит/с он уйдёт минут за пятнадцать, при 2 Мбит/с за час с лишним. Мобильные сети отдают вверх медленнее, поэтому запретите машине уходить в сон и держитесь одной сети.
Когда длинных записей поток, файлы принимает speech-to-text API, вебхуков там нет и статус опрашивают сами. И держите порядок: сначала формат, потом загрузка, иначе два гигабайта уйдут впустую.
Что делать с расшифровкой на три часа речи
Три часа речи это те самые 18–23 тысячи слов, и подряд их не читает никто. Открывайте текст не как документ, а как базу для поиска: поиск по слову приведёт туда, где обсуждали бюджет, тайм-код вернёт к нужной секунде, разметка по спикерам подскажет, кто говорил. В verbose_json сегменты отдаются с границами в секундах.
Если запись резали, собирайте её обратно сразу, пока порядок частей ещё в голове: ко второй получасовой части прибавьте 1800 секунд, к третьей 3600, а в субтитрах перенумеруйте блоки. Через неделю восстановить, какой кусок откуда, будет сложнее.
Вычитывать весь текст подряд незачем, пройдитесь по местам, где ошибка стоит дорого: суммы, даты, фамилии и отрицания в решениях, ведь «согласовали» и «не согласовали» отличаются одним словом. Такие ошибки липнут к именам собственным, аббревиатурам и числам, там по звуку слово не восстановишь. Выборочная вычитка трёх часов занимает минут десять.
А если запись просто лежит и до неё не доходят руки, начните с одной команды: ffprobe покажет кодек, частоту дискретизации и число каналов. Дальше решение очевидно. Несжатый стереоисходник на 44,1 кГц стоит один раз сжать, телефонную дорожку на 8 кГц трогать нельзя, mp3 из мессенджера грузится как есть. Три-четыре минуты обработки, и к концу перерыва вы будете знать, о чём говорили во второй половине встречи.