ГлавнаяБлог → Кто что сказал: разделение говорящих в расшифровке

Кто что сказал: разделение говорящих в расшифровке

Опубликовано 2026-08-18 · 5 мин чтения

Это самый частый вопрос о расшифровке и самый неудовлетворительный ответ: одна сведённая запись возвращается сплошным потоком текста, без меток. Хорошая новость в том, что в большинстве реальных ситуаций разделение всё-таки можно получить — обычно изменив то, как вы записываете, а не то, как расшифровываете.

Что API делает и чего не делает

Скажем прямо, чтобы ничего не строилось на неверном допущении: эндпоинт расшифровки возвращает текст и сегменты с таймкодами. Меток говорящих он не возвращает, и никакой параметр это не включает.

Диаризация — определение того, сколько человек говорит и кто произнёс каждую фразу, — задача, отдельная от распознавания. На перебиваниях, похожих голосах и в шумной комнате она по-настоящему трудна, и занимаются ею отдельные модели.

Поэтому практический вопрос звучит не «как это включить», а «как устроить дело так, чтобы это не понадобилось».

Способ 1: записывать каждого отдельно

Лучший вариант с большим отрывом и самый дешёвый — он стоит одного решения, принятого до записи.

Расшифруйте каждый файл сам по себе — получите точное разделение. Переплетите по таймкодам, чтобы восстановить разговор:

rows = []
for name, path in [("Журналист", "a.mp3"), ("Гость", "b.mp3")]:
    with open(path, "rb") as f:
        r = client.audio.transcriptions.create(
            model="whisper-1", file=f, response_format="verbose_json")
    rows += [(s.start, name, s.text.strip()) for s in r.segments]

for start, name, text in sorted(rows):
    print(f"[{int(start)//60:02d}:{int(start)%60:02d}] {name}: {text}")

Способ 2: разделить каналы стерео

Если запись стерео и в каждом канале свой человек — обычное дело в телефонии и у части диктофонов, — разделение уже есть внутри файла:

ffmpeg -i call.wav -map_channel 0.0.0 left.wav -map_channel 0.0.1 right.wav

Дальше расшифруйте оба файла и переплетите, как выше. Сначала убедитесь, что каналы действительно разведены: откройте файл в плеере и послушайте каждую сторону. Стерео, где оба голоса звучат в обоих каналах, от этого ничего не выигрывает.

Способ 3: разметить после расшифровки

В разговоре на двоих реплики чередуются предсказуемо, а роли обычно очевидны из содержания: один спрашивает, другой отвечает. Прочитать час расшифровки и проставить имена — несколько минут.

Черновик разметки может сделать языковая модель, но относитесь к результату именно как к черновику: она выводит роли из формулировок, поэтому уверенно перепутает участок, где собеседники соглашаются друг с другом. Выборочно сверьте по таймкодам, прежде чем что-либо публиковать.

Способ 4: отдельная модель диаризации

Если автоматическая разметка на сведённом звуке действительно нужна — исследовательский корпус, архив для комплаенса, встречи, которыми вы не управляете, — путь лежит через отдельную модель диаризации: она выдаёт реплики говорящих с таймкодами, которые затем сопоставляются с сегментами расшифровки.

Чего это стоит на самом деле: ещё одна модель, которую надо держать и обслуживать, время видеокарты сверх распознавания и точность, падающая ровно там, где она нужнее всего, — на перебиваниях и коротких вставках. Это отдельный проект, а не параметр.

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

Какой способ под какую ситуацию

СитуацияЛучший подход
Интервью, которое вы организуетеДва диктофона, по одному на человека
Звонки продаж или поддержкиПоканальная запись в телефонии
Встреча в Zoom, где вы организаторОтдельный файл на каждого участника
Стерео, по голосу на каналРазделить каналы через ffmpeg
Разговор на двоих, сведённый файлРазметить руками после расшифровки
Большой архив, которым вы не управляетеОтдельная модель диаризации

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

Попробуйте на своих записях. Регистрация занимает минуту, бесплатных минут хватает, чтобы оценить качество.

Получить ключ бесплатно

Частые вопросы

Может ли API сам расставить метки говорящих?

Нет. Он возвращает текст и сегменты с таймкодами; разделение говорящих — отдельная задача, и никакой параметр её не включает. Практический ответ — записывать участников раздельно.

Какой способ разделения самый простой?

Записать каждого говорящего в отдельный файл или канал. Раздельная расшифровка даёт точное разделение и не стоит ничего сверх организации записи.

Как собрать раздельные дорожки обратно в разговор?

Запросите verbose_json для каждой дорожки, пометьте все сегменты именем говорящего и отсортируйте общий список по времени начала.

Может ли языковая модель определить, кто говорит?

Она может набросать разметку по формулировкам, но именно предполагает, а не знает: там, где собеседники говорят похожее, метки перепутаются. Считайте это черновиком и проверяйте по звуку.

Стоит ли поднимать отдельную модель диаризации?

Только для архивов, которые нельзя перезаписать, — исследовательский корпус или материалы для комплаенса. Это ещё одна модель, дополнительное время видеокарты и самая слабая точность именно на перебиваниях.

Читайте также