Руководство по Faster-Whisper: быстрее речь в текст с CTranslate2

Руководство по Faster-Whisper: быстрее речь в текст с CTranslate2


Руководство по Faster-Whisper: быстрее речь в текст с CTranslate2

Faster-whisper — высокопроизводительная реализация модели Whisper от OpenAI на CTranslate2, быстром движке инференса трансформеров. Даёт в 2–4× более быструю транскрипцию при схожей точности; подходит для продакшена и пакетной обработки.
В этом руководстве — всё необходимое о faster-whisper: установка, примеры, оптимизация и когда выбрать его вместо стандартного OpenAI Whisper.

Что такое Faster-whisper?

Faster-whisper — оптимизированная реализация OpenAI Whisper с CTranslate2 для более быстрого инференса. Сохраняет ту же точность, заметно ускоряет работу и снижает потребление памяти.

Ключевые возможности

  • В 2–4× более быстрый инференс по сравнению с OpenAI Whisper
  • Меньше памяти за счёт квантования
  • Та же точность, что у исходных моделей Whisper
  • Поддержка GPU и CPU с оптимизированными бэкендами
  • Пакетная обработка нескольких файлов
  • Временные метки на уровне слов
  • Варианты квантования (FP32, FP16, INT8, INT8_FLOAT16)
  • Детекция голосовой активности (VAD) для фильтрации

Как это устроено

Faster-whisper конвертирует модели Whisper в формат CTranslate2 с оптимизированным C++-кодом для инференса. Это даёт:
  • Более быстрые матричные операции с оптимизированными библиотеками BLAS
  • Лучшее управление памятью с меньшими накладными расходами
  • Квантование для снижения потребления памяти
  • Пакетную обработку для роста пропускной способности

Faster-whisper и OpenAI Whisper

Сравнение производительности

ХарактеристикаOpenAI WhisperFaster-whisper
СкоростьБазав 2–4× быстрее
ПамятьВышеНиже (с квантованием)
ТочностьВысокаяТа же (те же модели)
GPUДаДа (оптимизировано)
CPUДаДа (оптимизировано)
КвантованиеОграниченоПолная поддержка (INT8, FP16)
ПакетыВручнуюВстроено
УстановкаПростаяПростая (включает CTranslate2)

Когда выбирать Faster-whisper

Выбирайте faster-whisper, если:
  • Нужна более быстрая транскрипция под продакшен
  • Обрабатываете много файлов пакетами
  • Работаете на слабых машинах (используйте INT8)
  • Делаете почти реальное время
  • Нужно меньше памяти при развёртывании
Оставайтесь на OpenAI Whisper, если:
  • Нужна максимальная совместимость с текущим кодом
  • Используете дообученные модели (для faster-whisper нужна конвертация)
  • Предпочитаете более простой API (у faster-whisper он похож)
  • Нужны экспериментальные функции, которые сначала появляются в OpenAI Whisper

Установка

Требования

  • Python 3.9+ (обязательно)
  • FFmpeg (по желанию: faster-whisper использует PyAV, но для части форматов может понадобиться FFmpeg)
  • GPU NVIDIA (по желанию, для ускорения на GPU)

Базовая установка

Установите faster-whisper через pip:
pip install faster-whisper
Автоматически ставятся:
  • пакет faster-whisper
  • ctranslate2 (движок CTranslate2)
  • pyav (декодирование аудио, заменяет зависимость от FFmpeg)

Установка GPU (NVIDIA CUDA)

Для GPU нужны библиотеки CUDA:
CUDA 12 (рекомендуется):
pip install nvidia-cublas-cu12 nvidia-cudnn-cu12==9.*
Задайте путь к библиотекам:
export LD_LIBRARY_PATH=$(python3 -c 'import os; import nvidia.cublas.lib; import nvidia.cudnn.lib; print(os.path.dirname(nvidia.cublas.lib.__file__) + ":" + os.path.dirname(nvidia.cudnn.lib.__file__))')
CUDA 11 (устаревшая):
При CUDA 11 используйте более старую версию CTranslate2:
pip install ctranslate2==3.24.0 faster-whisper

Проверка установки

from faster_whisper import WhisperModel

# Test basic import
print("Faster-whisper installed successfully!")

Базовое использование

Простая транскрипция

from faster_whisper import WhisperModel

# Load model (automatically downloads if not present)
model = WhisperModel("base", device="cpu", compute_type="int8")

# Transcribe audio
segments, info = model.transcribe("audio.mp3")

# Print detected language
print(f"Detected language: {info.language} (probability: {info.language_probability:.2f})")

# Print transcription
for segment in segments:
    print(f"[{segment.start:.2f}s -> {segment.end:.2f}s] {segment.text}")

Получить полный текст

from faster_whisper import WhisperModel

model = WhisperModel("base")
segments, info = model.transcribe("audio.mp3")

# Collect all text
full_text = " ".join([segment.text for segment in segments])
print(full_text)

С метками времени по словам

from faster_whisper import WhisperModel

model = WhisperModel("base", device="cpu", compute_type="int8")

segments, info = model.transcribe(
    "audio.mp3",
    word_timestamps=True,
    beam_size=5
)

for segment in segments:
    print(f"[{segment.start:.2f}s - {segment.end:.2f}s] {segment.text}")
    
    # Word-level timestamps
    for word in segment.words:
        print(f"  {word.word} [{word.start:.2f}s - {word.end:.2f}s]")

Устройство и тип вычислений

Устройство

  • device="cpu" — инференс на CPU (везде)
  • device="cuda" — на GPU (нужны NVIDIA GPU и CUDA)

Типы вычислений

Выбирайте по железу и балансу скорость/точность:
ТипСкоростьПамятьТочностьКогда
int8Самый быстрыйМинимумЧуть нижеCPU, мало ресурсов
int8_float16Очень быстроМалоВысокаяGPU с малым VRAM
float16БыстроСреднеВысокаяGPU (рекомендуется)
float32Медленнее всегоМаксимумМаксимумМаксимум точности

Примеры по железу

CPU (Intel/AMD):
# Best for CPU: INT8
model = WhisperModel("base", device="cpu", compute_type="int8")
GPU (NVIDIA):
# Best for GPU: FP16
model = WhisperModel("large-v2", device="cuda", compute_type="float16")
GPU с малым VRAM:
# Use INT8_FLOAT16 for large models
model = WhisperModel("large-v2", device="cuda", compute_type="int8_float16")
Максимальная точность:
# Use FP32 (slower but most accurate)
model = WhisperModel("large-v2", device="cuda", compute_type="float32")

Расширенные возможности

1. Пакетная обработка

Эффективно обрабатывайте несколько файлов:
from faster_whisper import WhisperModel
from pathlib import Path

model = WhisperModel("base", device="cuda", compute_type="float16")

audio_files = ["audio1.mp3", "audio2.mp3", "audio3.mp3"]

for audio_file in audio_files:
    print(f"Transcribing: {audio_file}")
    segments, info = model.transcribe(audio_file)
    
    text = " ".join([seg.text for seg in segments])
    print(f"Result: {text[:100]}...")
    print()

2. VAD

Отфильтруйте тишину и неречевые фрагменты:
from faster_whisper import WhisperModel

model = WhisperModel("base")

segments, info = model.transcribe(
    "audio.mp3",
    vad_filter=True,  # Enable VAD filtering
    vad_parameters=dict(
        min_silence_duration_ms=500,  # Minimum silence duration
        threshold=0.5  # VAD threshold
    )
)

for segment in segments:
    print(f"[{segment.start:.2f}s] {segment.text}")

3. Язык

Укажите язык для лучшей точности и скорости:
from faster_whisper import WhisperModel

model = WhisperModel("base")

# Specify language (faster and more accurate)
segments, info = model.transcribe(
    "audio.mp3",
    language="en"  # English
)

# Or let it auto-detect
segments, info = model.transcribe("audio.mp3")  # Auto-detect
print(f"Detected: {info.language}")

4. Размер луча и другие параметры

from faster_whisper import WhisperModel

model = WhisperModel("base")

segments, info = model.transcribe(
    "audio.mp3",
    beam_size=5,  # Higher = more accurate but slower (default: 5)
    best_of=5,    # Number of candidates to consider
    temperature=0.0,  # Lower = more deterministic
    condition_on_previous_text=True,  # Use context from previous segments
    initial_prompt="This is a technical meeting about AI and machine learning."
)

5. Свои пути к моделям

Локальные или конвертированные модели:
from faster_whisper import WhisperModel

# Use local model directory
model = WhisperModel(
    "base",
    device="cpu",
    compute_type="int8",
    download_root="./models"  # Custom download directory
)

# Or specify full path to converted model
model = WhisperModel(
    "/path/to/converted/model",
    device="cuda",
    compute_type="float16"
)

Бенчмарки

GPU (NVIDIA RTX 3070 Ti)

Транскрипция ~13 минут аудио:
КонфигурацияВремяVRAMУскорение
OpenAI Whisper (FP16, beam=5)~2m 23s~4708 MBБаза
Faster-whisper (FP16, beam=5)~1m 03s~4525 MBв 2.3× быстрее
Faster-whisper (INT8, beam=5)~59s~2926 MBв 2.4× быстрее
Faster-whisper (FP16, batch=8)~17s~6090 MBв 8.4× быстрее
Faster-whisper (INT8, batch=8)~16s~4500 MBв 8.9× быстрее

CPU (Intel Core i7-12700K)

КонфигурацияВремяRAMУскорение
OpenAI Whisper (FP32, beam=5)~6m 58s~2335 MBБаза
Faster-whisper (FP32, beam=5)~2m 37s~2257 MBв 2.7× быстрее
Faster-whisper (INT8, beam=5)~1m 42s~1477 MBв 4.1× быстрее
Faster-whisper (FP32, batch=8)~1m 06s~4230 MBв 6.3× быстрее
Faster-whisper (INT8, batch=8)~51s~3608 MBв 8.2× быстрее

Выводы

  • Пакеты дают самый большой выигрыш (8×+ на GPU)
  • INT8 режет память ~40% с малой потерей точности
  • GPU критична для больших моделей и пакетов
  • CPU + INT8 уместны для маленьких моделей и одного файла

Полный пример: транскрипция для продакшена

from faster_whisper import WhisperModel
from pathlib import Path
import json
from datetime import datetime

class TranscriptionService:
    """Production-ready transcription service using faster-whisper."""
    
    def __init__(self, model_size="base", device="cpu", compute_type="int8"):
        """Initialize the transcription service."""
        print(f"Loading model: {model_size} on {device} ({compute_type})")
        self.model = WhisperModel(
            model_size,
            device=device,
            compute_type=compute_type
        )
        print("Model loaded successfully!")
    
    def transcribe_file(self, audio_path, output_format="txt", **kwargs):
        """
        Transcribe an audio file.
        
        Args:
            audio_path: Path to audio file
            output_format: Output format (txt, json, srt, vtt)
            **kwargs: Additional transcription parameters
        """
        audio_path = Path(audio_path)
        if not audio_path.exists():
            raise FileNotFoundError(f"Audio file not found: {audio_path}")
        
        print(f"Transcribing: {audio_path.name}")
        
        # Transcribe
        segments, info = self.model.transcribe(
            str(audio_path),
            word_timestamps=True,
            **kwargs
        )
        
        # Collect results
        result = {
            "file": str(audio_path),
            "language": info.language,
            "language_probability": info.language_probability,
            "duration": info.duration,
            "segments": []
        }
        
        full_text_parts = []
        for segment in segments:
            segment_data = {
                "start": segment.start,
                "end": segment.end,
                "text": segment.text,
                "words": [
                    {
                        "word": word.word,
                        "start": word.start,
                        "end": word.end,
                        "probability": word.probability
                    }
                    for word in segment.words
                ]
            }
            result["segments"].append(segment_data)
            full_text_parts.append(segment.text)
        
        result["text"] = " ".join(full_text_parts)
        
        # Save based on format
        output_path = audio_path.parent / f"{audio_path.stem}_transcript"
        
        if output_format == "txt":
            self._save_txt(result, output_path.with_suffix(".txt"))
        elif output_format == "json":
            self._save_json(result, output_path.with_suffix(".json"))
        elif output_format == "srt":
            self._save_srt(result, output_path.with_suffix(".srt"))
        elif output_format == "vtt":
            self._save_vtt(result, output_path.with_suffix(".vtt"))
        
        print(f"✓ Transcription saved: {output_path}.{output_format}")
        return result
    
    def _save_txt(self, result, path):
        """Save as plain text."""
        with open(path, "w", encoding="utf-8") as f:
            f.write(result["text"])
    
    def _save_json(self, result, path):
        """Save as JSON."""
        with open(path, "w", encoding="utf-8") as f:
            json.dump(result, f, indent=2, ensure_ascii=False)
    
    def _save_srt(self, result, path):
        """Save as SRT subtitles."""
        with open(path, "w", encoding="utf-8") as f:
            for i, seg in enumerate(result["segments"], start=1):
                start = self._format_srt_time(seg["start"])
                end = self._format_srt_time(seg["end"])
                f.write(f"{i}\n{start} --> {end}\n{seg['text']}\n\n")
    
    def _save_vtt(self, result, path):
        """Save as WebVTT."""
        with open(path, "w", encoding="utf-8") as f:
            f.write("WEBVTT\n\n")
            for seg in result["segments"]:
                start = self._format_vtt_time(seg["start"])
                end = self._format_vtt_time(seg["end"])
                f.write(f"{start} --> {end}\n{seg['text']}\n\n")
    
    def _format_srt_time(self, seconds):
        """Format time for SRT."""
        hours = int(seconds // 3600)
        minutes = int((seconds % 3600) // 60)
        secs = int(seconds % 60)
        millis = int((seconds % 1) * 1000)
        return f"{hours:02d}:{minutes:02d}:{secs:02d},{millis:03d}"
    
    def _format_vtt_time(self, seconds):
        """Format time for VTT."""
        hours = int(seconds // 3600)
        minutes = int((seconds % 3600) // 60)
        secs = int(seconds % 60)
        millis = int((seconds % 1) * 1000)
        return f"{hours:02d}:{minutes:02d}:{secs:02d}.{millis:03d}"

# Usage
if __name__ == "__main__":
    # Initialize service
    service = TranscriptionService(
        model_size="base",
        device="cpu",  # Change to "cuda" for GPU
        compute_type="int8"  # Use "float16" for GPU
    )
    
    # Transcribe file
    result = service.transcribe_file(
        "meeting.mp3",
        output_format="json",
        beam_size=5,
        language="en"
    )
    
    print(f"\nLanguage: {result['language']}")
    print(f"Duration: {result['duration']:.2f}s")
    print(f"Text: {result['text'][:200]}...")

Рекомендации

1. Размер модели

# For speed (CPU)
model = WhisperModel("tiny", device="cpu", compute_type="int8")

# For balance
model = WhisperModel("base", device="cpu", compute_type="int8")

# For accuracy (GPU recommended)
model = WhisperModel("large-v2", device="cuda", compute_type="float16")

2. Под железо

Только CPU:
model = WhisperModel("base", device="cpu", compute_type="int8")
GPU с достаточным VRAM:
model = WhisperModel("large-v2", device="cuda", compute_type="float16")
GPU с малым VRAM:
model = WhisperModel("medium", device="cuda", compute_type="int8_float16")

3. Пакеты для нескольких файлов

# Process multiple files efficiently
audio_files = ["file1.mp3", "file2.mp3", "file3.mp3"]
model = WhisperModel("base", device="cuda", compute_type="float16")

for audio_file in audio_files:
    segments, info = model.transcribe(audio_file)
    # Process results...

4. VAD при шуме

segments, info = model.transcribe(
    "noisy_audio.mp3",
    vad_filter=True,
    vad_parameters=dict(
        min_silence_duration_ms=1000,
        threshold=0.5
    )
)

5. Язык, если известен

# Faster and more accurate when language is known
segments, info = model.transcribe(
    "audio.mp3",
    language="en"  # Specify instead of auto-detect
)

6. Переиспользование модели

# Load model once, reuse for multiple files
model = WhisperModel("base")

# Process multiple files with same model
for audio_file in audio_files:
    segments, info = model.transcribe(audio_file)

Переход с OpenAI Whisper

Сравнение кода

OpenAI Whisper:
import whisper

model = whisper.load_model("base")
result = model.transcribe("audio.mp3")
print(result["text"])
Faster-whisper:
from faster_whisper import WhisperModel

model = WhisperModel("base", device="cpu", compute_type="int8")
segments, info = model.transcribe("audio.mp3")
text = " ".join([seg.text for seg in segments])
print(text)

Отличия

  1. Загрузка: WhisperModel() вместо whisper.load_model()
  2. Формат ответа: кортеж (segments, info) вместо dict
  3. Сегменты: итератор объектов, не список
  4. Device/compute_type: нужно задавать явно
  5. Текст: склеить сегменты

Вспомогательная функция

def convert_to_whisper_format(segments, info):
    """Convert faster-whisper output to OpenAI Whisper format."""
    return {
        "text": " ".join([seg.text for seg in segments]),
        "language": info.language,
        "segments": [
            {
                "id": i,
                "start": seg.start,
                "end": seg.end,
                "text": seg.text,
                "words": [
                    {
                        "word": word.word,
                        "start": word.start,
                        "end": word.end
                    }
                    for word in seg.words
                ] if hasattr(seg, 'words') else []
            }
            for i, seg in enumerate(segments)
        ]
    }

# Usage
segments, info = model.transcribe("audio.mp3", word_timestamps=True)
result = convert_to_whisper_format(segments, info)
# Now compatible with OpenAI Whisper format

Устранение неполадок

Проблема 1: не хватает памяти CUDA

Проблема: на больших моделях GPU переполняется.
Решения:
# Use smaller model
model = WhisperModel("base", device="cuda", compute_type="float16")

# Or use INT8 quantization
model = WhisperModel("large-v2", device="cuda", compute_type="int8_float16")

# Or use CPU
model = WhisperModel("large-v2", device="cpu", compute_type="int8")

Проблема 2: медленный CPU

Проблема: транскрипция на CPU медленная.
Решения:
# Use INT8 quantization
model = WhisperModel("base", device="cpu", compute_type="int8")

# Use smaller model
model = WhisperModel("tiny", device="cpu", compute_type="int8")

# Reduce beam size
segments, info = model.transcribe("audio.mp3", beam_size=1)

Проблема 3: не найдены библиотеки CUDA

Проблема: RuntimeError: CUDA runtime not found
Решение:
# Install CUDA libraries
pip install nvidia-cublas-cu12 nvidia-cudnn-cu12==9.*

# Set library path
export LD_LIBRARY_PATH=$(python3 -c 'import os; import nvidia.cublas.lib; import nvidia.cudnn.lib; print(os.path.dirname(nvidia.cublas.lib.__file__) + ":" + os.path.dirname(nvidia.cudnn.lib.__file__))')

Проблема 4: сбой загрузки модели

Проблема: таймаут или ошибка загрузки.
Решение:
# Specify download directory
model = WhisperModel(
    "base",
    download_root="./models",  # Custom directory
    local_files_only=False
)

# Or download manually from Hugging Face
# Then use local path
model = WhisperModel("/path/to/local/model")

Когда использовать Faster-whisper

Faster-whisper, если:

Продакшен и нужна скорость
Пакетная обработка файлов
Ограниченные ресурсы (INT8)
Почти реальное время
✅ Есть GPU
✅ Важна экономия памяти

OpenAI Whisper, если:

✅ Нужна максимальная совместимость
Дообученные модели (проще интеграция)
Проще API
Экспериментальные функции сначала там
Обучение (больше примеров в документации)

Заключение

Faster-whisper существенно ускоряет работу по сравнению с OpenAI Whisper при той же точности. При правильных настройках возможно ускорение в 2–4× на CPU и до 8× на GPU с пакетами.
Кратко:
  • INT8 для CPU и слабых систем
  • FP16 для GPU с достаточным VRAM
  • Включайте пакеты для нескольких файлов
  • Указывайте язык, если известен
  • Переиспользуйте загруженную модель

Нужен профессиональный сервис «речь в текст»? Загляните на SayToWords — платформа транскрипции на ИИ с оптимизированной производительностью и разными форматами вывода.

Попробовать бесплатно

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

Звук в текст онлайнЗвук в текст бесплатноКонвертер звука в текстЗвук в текст MP3Звук в текст WAVЗвук в текст с метками времениЗвук в текст для встречSound to Text Multi LanguageЗвук в текст субтитрыКонвертировать WAV в текстГолос в ТекстГолос в Текст ОнлайнРечь в ТекстКонвертировать MP3 в текстКонвертировать голосовую запись в текстГолосовой Ввод ОнлайнГолос в Текст с Временными МеткамиГолос в Текст в Реальном ВремениГолос в Текст для Длинного АудиоГолос в Текст для ВидеоГолос в Текст для YouTubeГолос в Текст для ВидеомонтажаГолос в Текст для СубтитровГолос в Текст для ПодкастовГолос в Текст для ИнтервьюАудио интервью в текстГолос в Текст для ЗаписейГолос в Текст для ВстречГолос в Текст для ЛекцийГолос в Текст для ЗаметокГолос в Текст МногоязычныйГолос в Текст ТочныйГолос в Текст БыстроАльтернатива Premiere Pro Голос в ТекстАльтернатива DaVinci Голос в ТекстАльтернатива VEED Голос в ТекстАльтернатива InVideo Голос в ТекстАльтернатива Otter.ai Голос в ТекстАльтернатива Descript Голос в ТекстАльтернатива Trint Голос в ТекстАльтернатива Rev Голос в ТекстАльтернатива Sonix Голос в ТекстАльтернатива Happy Scribe Голос в ТекстАльтернатива Zoom Голос в ТекстАльтернатива Google Meet Голос в ТекстАльтернатива Microsoft Teams Голос в ТекстАльтернатива Fireflies.ai Голос в ТекстАльтернатива Fathom Голос в ТекстАльтернатива FlexClip Голос в ТекстАльтернатива Kapwing Голос в ТекстАльтернатива Canva Голос в ТекстГолос в Текст для Длинного АудиоИИ Голос в ТекстГолос в Текст БесплатноГолос в Текст Без РекламыГолос в Текст для Шумного АудиоГолос в Текст с ВременемГенерировать Субтитры из АудиоТранскрипция Подкастов ОнлайнТранскрибировать Звонки КлиентовГолос TikTok в ТекстАудио TikTok в ТекстYouTube Голос в ТекстYouTube Аудио в ТекстГолосовая Заметка в ТекстГолосовое Сообщение WhatsApp в ТекстГолосовое Сообщение Telegram в ТекстТранскрипция Звонка DiscordГолос Twitch в ТекстГолос Skype в ТекстГолос Messenger в ТекстГолосовое Сообщение LINE в ТекстТранскрибировать Влоги в ТекстКонвертировать Аудио Проповеди в ТекстПреобразовать Речь в ПисьмоПеревести Аудио в ТекстПреобразовать Аудио Заметки в ТекстГолосовой ВводГолосовой Ввод для ВстречГолосовой Ввод для YouTubeГовори и ПечатайПечать Без РукГолос в СловаРечь в СловаРечь в Текст ОнлайнOnline Transcription SoftwareРечь в Текст для ВстречБыстрая Речь в ТекстReal Time Speech to TextLive Transcription AppРечь в Текст для TikTokЗвук в Текст для TikTokРечь в Слова (говоря)Речь в ТекстTalk to Text FreeTalk to Text OnlineTalk to Text for YouTubeTalk to Text for SubtitlesTalk to Text for Content CreatorsTalk to Text for MeetingsАудио в ПечатьЗвук в ТекстИнструмент Голосового ПисанияИнструмент Речевого ПисанияГолосовая ДиктовкаИнструмент Юридической ТранскрипцииИнструмент Медицинской ДиктовкиЯпонская Аудио ТранскрипцияКорейская Транскрипция ВстречИнструмент Транскрипции ВстречАудио встречи в текстКонвертер Лекций в ТекстАудио лекции в текстТранскрипция Видео в ТекстГенератор Субтитров для TikTokТранскрипция Колл-ЦентраИнструмент Reels Аудио в ТекстТранскрибировать MP3 в ТекстТранскрибировать WAV файл в текстCapCut Голос в ТекстCapCut Голос в ТекстVoice to Text in EnglishАудио в текст на английскомVoice to Text in SpanishVoice to Text in FrenchАудио в текст на французскомVoice to Text in GermanАудио в текст на немецкомVoice to Text in JapaneseАудио в текст на японскомVoice to Text in KoreanАудио в текст на корейскомVoice to Text in PortugueseVoice to Text in ArabicVoice to Text in ChineseVoice to Text in HindiVoice to Text in RussianWeb Voice Typing ToolVoice Typing Website