Лесенка: с какого смещения куска Groq перестаёт отвечать
Куски по 60 секунд, по 0,16 МБ каждый, нарезаны ffmpeg -f segment без сброса таймстемпов. Смещение — это время, с которого кусок «думает», что начинается (start_time в ffprobe).
| Смещение начала куска | Ответ API | Тело ошибки | Сколько ждали ответа |
|---|---|---|---|
| 0 с | 200 | — | 0,62–1,1 с |
| 60 с | 200 | — | 0,58 с |
| 120 с | 502 | service_ | 120,12 с |
| 180 с | 502 | service_ | 120,12 с |
| 240 с | 502 | service_ | 120,12 с |
| 300 с | 502 | service_ | 120,12 с |
| 480 с | 502 | service_ | 120,12 с |
Строка «0 с» — нулевой кусок из такой же нарезки по 300 секунд: в лесенке по 60 секунд его отдельно не записали. Полное тело ответа не сохранили, только код ошибки.
# до: куски 1..N уходят со сквозным смещением → 502
ffmpeg -i input.opus -vn -c:a libopus -b:a 24k -ac 1 -ar 16000 \
-f segment -segment_time 900 -segment_format ogg chunk_%04d.ogg# после: каждый кусок начинается с нуля → 200
ffmpeg -i input.opus -vn -c:a libopus -b:a 24k -ac 1 -ar 16000 \
-f segment -segment_time 900 -segment_format ogg \
-reset_timestamps 1 chunk_%04d.oggКак мы на это вышли
Бот @smolevich_voice_bot расшифровывает голосовые и аудиофайлы через Groq — это облако, которое крутит открытую модель whisper-large-v3-turbo. Длинное аудио приходится резать: у Groq лимит 25 МБ на файл на бесплатном тарифе.
Картина была стабильная и обидная — первый кусок проходит, все остальные падают. Ежедневный пробник два месяца почти каждый день писал 1 успешный кусок из 6, и мы честно считали, что Groq просто не умеет в длинное. В разборе по очереди отмели ретраи, другой IP, другую модель и новое HTTP-соединение — всё мимо.
Решающий тест оказался простым: взяли один и тот же отрезок звука и нарезали его двумя способами. Сегмент №1 из -f segment (смещение 300 с) — 502 через 120 секунд. Тот же отрезок через -ss 300 -t 300 (смещение 0, размер тот же, 0,80 МБ) — 200 за 0,74 секунды. Байты звука одинаковые, разница только в таймстемпе. То есть «первый кусок всегда проходит» и «у первого куска всегда нулевое смещение» — это одно и то же наблюдение.
Как воспроизвести
- Нарежьте любую запись длиннее 3 минут командой «до», поставив
-segment_time 60. - Посмотрите смещения:
ffprobe -v error -show_entries format=start_time -of csv=p=0 chunk_0002.ogg— будет около 120. - Отправьте
chunk_0001.oggиchunk_0002.oggвPOST https://api.groq.com/openai/v1/audio/transcriptionsс модельюwhisper-large-v3-turbo. У нас первый вернул 200, второй — 502. - Перережьте с
-reset_timestamps 1—start_timeу всех кусков станет около 0.
В боте нарезка сейчас ровно такая, как в блоке «после»: куски по 900 секунд, OGG/Opus 24 kbps, моно 16 кГц, с -reset_timestamps 1. В общем, два месяца мы чинили не тот компонент
Вопросы
Groq Whisper отдаёт 502 из-за размера файла?
В нашей проверке нет. Куски по 0,16 МБ со смещением падали так же, как по 2,4 МБ, а WAV на 9,16 МБ прошёл. Порог был по смещению — где-то между 60 и 120 секундами, точнее не искали.
Помогут ли ретраи?
Нет. Один и тот же кусок со смещением падал пять раз — в разных процессах, с разных IP, на whisper-large-v3 и на turbo, с интервалами в минуты. Ретраи только добавляют по 2 минуты ожидания на каждую попытку.
Можно обойтись без -reset_timestamps?
У нас сработала нарезка в MP3 или WAV без флага: куски проходили. Цена — размер: MP3 32 kbps вышел 1,14 МБ на 5 минут против 0,80 МБ у Opus, WAV — 9,16 МБ. Флаг проще. Заодно он чинит длительность кусков в ffprobe: без него она показывает время конца куска в исходнике, а не его длину, и таймкоды в склеенной расшифровке съезжают.
Как проверяли
- Дата: 4 августа 2026 года.
- Модель:
whisper-large-v3-turboчерезhttps://api.groq.com/openai/v1/audio/transcriptions;whisper-large-v3проверяли только на одном куске со смещением (тоже 502). - Формат: OGG/Opus 24 kbps, моно, 16 кГц, нарезка
ffmpeg -f segment. - Главный прогон: запись 2 ч 45 мин (9897 с), куски по 900 с с
-reset_timestamps 1— 11 из 11 ответили 200, 0 ошибок, 17,5 с на API суммарно. Все 10 швов просмотрели вручную: без дублей и провалов. - Лесенка: куски по 60 с, смещения 60/120/180/240/300/480 с.
- Сколько запросов: 67 за всю проверку.
- Документация ffmpeg: опция reset_timestamps сегментного мьюксера — «сбрасывает таймстемпы в начале каждого сегмента».
- Оговорка: проверено на одной длинной записи и на дату проверки. Почему Groq так реагирует на смещение, мы не знаем — описано только то, что наблюдали. Поведение API могло измениться.