Главная → Блог → Стоимость распознавания речи: за что вы платите на самом деле
Стоимость распознавания речи: за что вы платите на самом деле
Тарификация транскрибации выглядит просто — ставка за минуту, — а потом первый счёт не сходится с оценкой. Расхождение почти никогда не в ставке. Оно в минутах, которые вы не заметили, что отправляете: тишина, дубли, повторы и записи, которые никто никогда не прочитает.
Единица счёта — минута аудио, а не слово
Начните отсюда, потому что это объясняет большинство сюрпризов. Вы платите за длительность загруженного звука, а не за объём вернувшегося текста.
Следствия, которые стоит усвоить:
- Минута тишины стоит столько же, сколько минута плотной речи.
- Запись, где никто не говорил, стоит своей полной длительности, хотя ответ пустой.
- Десять секунд речи внутри пятиминутного файла стоят пять минут.
- Говорить быстрее не дешевле. Дешевле обрезать файл.
Почти вся оптимизация ниже — вариации одной мысли: отправляйте меньше аудио, а не меньше речи.
Откуда берутся лишние минуты
| Источник | Типичные потери | Что делать |
|---|---|---|
| Тишина в начале и конце записи разговора | 10–30% | Обрезать через ffmpeg перед отправкой |
| Музыка ожидания и голосовое меню | 5–20% | Вырезать всё до момента ответа |
| Тот же файл, отправленный дважды после сбоя | до 100% | Идемпотентный конвейер, пропуск готовых файлов |
| Тестовые прогоны, забытые в боевом коде | по-разному | Отдельный ключ, наблюдение в кабинете |
| Записи, которые никто не открывает | чаще всего большинство | Расшифровывать по запросу, а не всё подряд |
Последняя строка обычно самая крупная и наименее техническая. Команды расшифровывают весь архив, потому что это легко, а потом используют два процента.
Как посчитать свой расход
Не экстраполируйте со страницы тарифов — измерьте собственный звук. Весь расчёт — это два числа:
ffprobe -v error -show_entries format=duration -of csv=p=0 sample.mp3
import pathlib, subprocess
def minutes(p):
out = subprocess.run(["ffprobe", "-v", "error", "-show_entries",
"format=duration", "-of", "csv=p=0", str(p)],
capture_output=True, text=True).stdout
return float(out) / 60
month = sum(minutes(p) for p in pathlib.Path("recordings").glob("*.mp3"))
print(f"{month:.0f} мин в месяц")
Умножьте на свою ставку — вот месячная сумма. Ориентиры, которые держатся на практике: линия поддержки с 200 звонками в день по четыре минуты — это примерно 16 000 минут в месяц; еженедельный подкаст — около четырёх часов; команда из десяти человек с ежедневными получасовыми встречами — порядка 600 минут.
Пакет плюс перерасход и зачем так сделано
Большинство тарифов сочетают месячную плату с включённым пакетом минут и ставку за минуту сверх него. Арифметику стоит проделать один раз:
счёт = абонплата + max(0, израсходовано - включено) * ставка
Два способа промахнуться. Взять пакет сильно выше своего объёма — значит платить за минуты, которые не используются: включённое не переносится на следующий месяц. Остаться на чистой поминутной оплате при больших объёмах — значит не получить скидку, ради которой пакет и существует. Посмотрите на три месяца реального расхода, прежде чем выбирать.
Жёсткий лимит по пакету — это страховка, а не ограничение: он не даёт зациклившемуся коду выписать счёт, которого никто не согласовывал. Держите его включённым хотя бы на время разработки.
API или собственная видеокарта
Честное сравнение — это не «ставка за минуту против нуля». Своя установка переносит стоимость из строки в счёте в набор вещей, о которых легко забыть:
| Статья | API | Своя видеокарта |
|---|---|---|
| За минуту аудио | ставка | 0 |
| Железо | 0 | карта и машина, в рассрочку по сроку службы |
| Электричество и размещение | 0 | постоянно, независимо от загрузки |
| Настройка и сопровождение | 0 | время инженера, регулярно |
| Простой | бесплатно | по полной цене |
Точка безубыточности определяется загрузкой, а не объёмом. Видеокарта, работающая пару часов в день, проигрывает API, потому что за двадцать простаивающих часов вы платите тоже. Карта, загруженная круглосуточно, выигрывает. Между этими крайностями решает обычно другое: готовы ли вы отвечать за машину в три часа ночи.
Есть и третья причина, к деньгам отношения не имеющая: часть данных не должна покидать контур. Это требование, а не оптимизация, и оно закрывает вопрос само по себе.
Как срезать счёт, не потеряв качество
- Обрежьте тишину. Самое дешёвое изменение на записях разговоров — часто минус 10–30% без всякого влияния на качество.
- Не расшифровывайте то, что не читают. Расшифровывайте по запросу или только разговоры длиннее порога и смотрите, что люди реально открывают.
- Сделайте конвейер идемпотентным. Повторение уже сделанной работы после сбоя — чистые потери, пропуск готовых файлов их убирает.
- Заведите отдельный ключ для разработки. Тестовый трафик, смешанный с боевыми цифрами, прячет обе проблемы разом.
- Проверяйте расход еженедельно, а не раз в месяц. Цикл, отправляющий один и тот же файл, очевиден на первый день и дорог к тридцатому.
# срезаем тишину с обоих концов
ffmpeg -i call.mp3 -af silenceremove=start_periods=1:start_threshold=-45dB:stop_periods=-1:stop_threshold=-45dB:stop_duration=2 short.mp3
Попробуйте на своих записях. Регистрация занимает минуту, бесплатных минут хватает, чтобы оценить качество.
Получить ключ бесплатноЧастые вопросы
Оплата идёт за минуты аудио или за слова текста?
За минуты загруженного аудио. Длина получившегося текста ни на что не влияет — поэтому тишина и музыка ожидания стоят ровно столько же, сколько речь.
Платить ли за запись, которая оказалась пустой?
Да, звук всё равно был обработан, хотя ответ и пустой. Прямое лекарство — обрезать тишину до отправки.
Списываются ли неудачные запросы?
Запрос, вернувший ошибку, минуты аудио не расходует. Деньги стоит повторение успешной расшифровки — поэтому конвейер и должен уметь продолжаться с места остановки.
Дешевле ли держать Whisper на своей видеокарте?
Только при высокой загрузке. Карта, простаивающая большую часть суток, проигрывает поминутной оплате, если посчитать железо, электричество и сопровождение. Круглосуточная нагрузка — тот случай, когда своя установка выигрывает.
Как не получить неожиданный счёт?
Оцените объём через ffprobe до первого пакета, держите жёсткий лимит пакета включённым на время разработки и смотрите расход в кабинете раз в неделю, а не в конце месяца.
Читайте также
- Как построить пакетную транскрибацию архива записей — Как расшифровать тысячи записей и ничего не потерять: очередь работ, параллельность, повторные попытки, продолжение после сбоя и контроль расходов до запуска.
- Как перейти с OpenAI Whisper API на альтернативный сервис — Инструкция по миграции с OpenAI Whisper: что менять в коде, чем отличаются ответы, как сравнить качество и не сломать работающую интеграцию.
- Как расшифровать запись звонка в текст — Пошаговое руководство: как перевести аудиозапись телефонного разговора в текст через API за несколько минут. Примеры кода на Python и C#, разбор ошибок.