Транскрибація голосових повідомлень — послуга, яку ми впроваджуємо в мобільні застосунки. Голосові повідомлення — найнезручніший формат для швидкого отримання інформації. Особливо в корпоративному листуванні: хвилинний войс замість одного рядка тексту. Ми вирішуємо цю проблему транскрибацією голосових повідомлень: захоплення аудіо, Whisper API/Deepgram, інтерактивний текст з таймстампами. Користувач говорить — застосунок перетворює мовлення на текст з точністю до 95%. При цьому текст синхронізований з аудіо: можна натиснути на будь-яке слово і прослухати його. Технічно це означає інтеграцію з Whisper API або локальними рішеннями, реалізацію захоплення аудіо Swift Kotlin, конвертацію в оптимальний формат (16 kHz моно MP3 32 kbps), відправлення на сервер і отримання транскрипту з таймстампами кожні 200–300 мс. Потім — постобробка транскрипту, фільтрація шумових нотацій і відображення в інтерактивній транскрипції. Весь цикл від натискання кнопки до видимого тексту займає від 0.5 до 3 секунд залежно від довжини запису. Один із наших проєктів у фінтехі показав скорочення часу обробки протоколів нарад на 60% — економія склала $5000 на місяць.
Як відбувається захоплення аудіо в застосунку?
На практиці мобільний застосунок працює з двома шляхами:
Запис всередині застосунку. Користувач записує прямо у вашому застосунку — нативне захоплення, повний контроль над форматом. Ми використовуємо AVAudioRecorder на iOS та MediaRecorder на Android.
Імпорт зовнішнього файлу. Отримали WAV/MP3/OGG з месенджера через share sheet. На iOS — UTType.audio в UIDocumentPickerViewController. На Android — ACTION_GET_CONTENT з "audio/*".
Формат файлу має значення. OGG Opus (формат Telegram) Whisper розуміє нативно. AMR (старі Android-месенджери) — потрібна конвертація. На сервері ffmpeg вирішує конвертацію будь-якого формату:
import subprocess
def convert_to_mp3(input_path: str, output_path: str) -> None:
subprocess.run([
"ffmpeg", "-i", input_path,
"-ar", "16000", # 16kHz достатньо для мовлення
"-ac", "1", # моно
"-b:a", "32k", # 32kbps для мовлення
output_path
], check=True)
16kHz моно MP3 32kbps — оптимум для Whisper: якість не падає, розмір файлу мінімальний.
Чому Whisper API — не єдиний варіант?
Whisper API: 10-секундне повідомлення обробляється за 0.5–1.5 с. 1-хвилинне — 3–8 с. Це час обробки на серверах OpenAI + мережа. Для користувача непогано, якщо показувати прогрес.
Deepgram Nova-2 — real-time streaming транскрипція, latency < 300 мс на коротких фрагментах. Дорожче Whisper, але швидше.
Локальний Whisper (self-hosted). faster-whisper на GPU (RTX 3090) обробляє 1 хвилину аудіо за 2–4 секунди. На CPU — 15–30 секунд. Якщо дані не можна відправляти в хмару — єдиний варіант.
Клієнтська транскрипція на iOS. SFSpeechRecognizer — нативний Apple Speech framework, працює на пристрої (з iOS 16), безкоштовний, не вимагає відправки даних. Але: підтримує лише обмежений набір мов, якість нижче Whisper, ліміт 1 хвилина на запит.
// iOS — локальна транскрипція через SFSpeechRecognizer
let recognizer = SFSpeechRecognizer(locale: Locale(identifier: "ru-RU"))
let request = SFSpeechURLRecognitionRequest(url: audioURL)
request.shouldReportPartialResults = true
recognizer?.recognitionTask(with: request) { result, error in
guard let result else { return }
DispatchQueue.main.async {
self.transcriptText = result.bestTranscription.formattedString
}
}
Для коротких особистих нотаток SFSpeechRecognizer — хороший варіант без серверних витрат. Для корпоративних записів нарад — Whisper або Deepgram. За якістю розпізнавання мовлення iOS Android краще використовувати Whisper API, який у 2-3 рази якісніше за SFSpeechRecognizer за складних аудіо.
Порівняння способів транскрибації
| Спосіб | Латентність Whisper | Якість | Вартість | Приватність |
|---|---|---|---|---|
| Whisper API | 0.5–8 с | Відмінна | Плата за хвилину | Дані йдуть на сервер |
| Deepgram Nova-2 | <300 мс | Відмінна | Вище | Дані йдуть на сервер |
| Локальний Whisper (GPU) | 2–4 с на хвилину | Відмінна | Тільки залізо | Повна локальність |
| SFSpeechRecognizer (iOS) | миттєво | Середня | Безкоштовно | Повна локальність |
Як відобразити транскрипт з таймстампами?
Проста транскрипція — просто текст. Хороша транскрипція на мобільному:
- Інтерактивний текст з таймстампами слів: натиснув слово → аудіо стрибає до цього моменту
- Пунктуація (Whisper відновлює її добре, але не ідеально — іноді потрібна постобробка)
- Параграфи по паузах (Whisper сегментує аудіо — використовуємо
segmentsдля розбивки) - Кнопка копіювання всього тексту
- Пошук по тексту транскрипту
Для месенджер-функціональності: транскрипт з'являється стрімінгово — не чекаємо повного завершення, а показуємо по мірі готовності сегментів.
Постобробка транскрипту
Whisper іноді вставляє [Музика], [Аплодисменти] у нотації Whisper, транскрибує фоновий шум. Фільтруємо:
import re
def clean_transcript(text: str) -> str:
# Видаляємо нотації Whisper типу [Музика], [Noise]
text = re.sub(r'\[.*?\]', '', text)
# Прибираємо зайві пробіли
text = re.sub(r'\s+', ' ', text).strip()
return text
Для бізнес-сценаріїв корисна LLM-постобробка: виправлення власних назв, термінів, додавання пунктуації там, де Whisper помилився.
Що входить в роботу
- Вихідний код модуля транскрибації для iOS та Android
- Документація по архітектурі та REST API (якщо серверна частина)
- Доступи до сервісів (OpenAI, Deepgram) з готовими ключами
- Навчання команди та консультації на етапі інтеграції
- Підтримка 24/7 після запуску
Як впровадити транскрибацію: покроковий план
- Аналіз — обговорюємо сценарії використання, стек, вимоги до latency та приватності.
- Проектування — архітектура захоплення, транскрибації та відображення.
- Реалізація — інтеграція Whisper/Deepgram, код для iOS/Android, серверна конвертація.
- Тестування — перевірка на реальних записах, оптимізація під ваш кейс.
- Деплой — викладка в App Store та Google Play, налаштування моніторингу.
- Документація та навчання — передаємо код, інструкції, навчаємо команду.
- Підтримка — гарантуємо стабільність 24/7 після запуску.
Строки та вартість
| Етап | Строк |
|---|---|
| Захоплення аудіо + імпорт файлів | 3–5 днів |
| Серверна транскрипція (Whisper) + прогрес | 5–7 днів |
| Постобробка та форматування | 2–3 дні |
| Мобільний UI з інтерактивним транскриптом | 5–7 днів |
| Опціонально: стрімінг, локальний SFSpeechRecognizer | +3–5 днів |
Базова транскрипція через Whisper з простим текстовим відображенням — 1–2 тижні. Повноцінний інструмент з інтерактивним текстом, таймстампами та постобробкою — 3–4 тижні. Вартість інтеграції — від $2000. Ми маємо 5+ років досвіду в розробці мобільних застосунків та 50+ успішних проектів. Оцінимо ваш проект безкоштовно. Замовте проект під ключ: ми реалізуємо за 1-4 тижні.
— Whisper API documentation (OpenAI)







