Как расшифровать большой аудиофайл: делить или сжимать

Перетащите аудио или видео или нажмите, чтобы выбратьMP3 · WAV · M4A · OGG · MP4 · до 30 минут
Пример результата – так выглядит готовая расшифровка
00:47РусскийСпикеры: 2
00:00Спикер 1

Давай коротко по срокам. Мы успеваем к пятнице или переносим на следующую неделю?

00:07Спикер 2

К пятнице успеваем, если макеты придут завтра. Если позже, то реалистичнее вторник, и это я ещё не закладываю правки после ревью.

00:18Спикер 1

Понял. Тогда я тереблю дизайн сегодня, а ты пока начинаешь с той части, которая от макетов не зависит.

00:25Спикер 2

Договорились. И ещё момент: на прошлой неделе мы забыли записать решение по интеграции, потом полчаса вспоминали. Давай в этот раз зафиксируем сразу.

AI-саммари

Фрагмент рабочего созвона: обсуждают сроки по задаче и договариваются, кто отвечает за следующий шаг.

Запрос «как расшифровать большой аудиофайл» приходит к нам в одной и той же обстановке: на руках трёхчасовой вебинар на два гигабайта, почта его не берёт, а вкладка браузера обрывает загрузку на семидесяти процентах. Дальше начинается самодеятельность: один режет запись наугад, другой жмёт её до качества телефонной трубки. Обычно не нужно ни то, ни другое.

Длина записи распознаванию не мешает: современные модели идут быстрее реального времени, час речи превращается в текст за минуты. Ломается другое: канал загрузки, потолок контейнера и объём готового текста. Значит, разбираться придётся с байтами, частотой дискретизации и кодеками, а не с минутами.

Почему большой аудиофайл превращается в проблему

Сначала определите, какой у вас «большой». Вес это арифметика формата: несжатый 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 из мессенджера грузится как есть. Три-четыре минуты обработки, и к концу перерыва вы будете знать, о чём говорили во второй половине встречи.