Skip to content

Repository files navigation

Offline Lecture Transcriber

Локальная и облачная система пакетной расшифровки аудиозаписей через faster-whisper.

Проект не использует OpenAI API: модель запускается на CPU или NVIDIA GPU, а результаты сохраняются в TXT, SRT и JSON.

Возможности

  • обработка .mp3, .m4a, .wav, .ogg, .flac, .aac;
  • одиночная и пакетная расшифровка;
  • запуск локально или в Google Colab;
  • prompts со словарями терминов для каждого предмета;
  • автоматическое продолжение после остановки;
  • пропуск уже готовых записей;
  • отдельная папка результата для каждой записи;
  • имена выходных файлов содержат название исходной записи;
  • журнал ошибки для каждого неудачно обработанного файла.

Структура проекта

lecture_transcriber/
├── app/
│   ├── asr/
│   │   └── transcriber.py
│   ├── audio/
│   │   └── converter.py
│   ├── export/
│   │   ├── json_exporter.py
│   │   ├── srt_exporter.py
│   │   └── txt_exporter.py
│   ├── utils/
│   │   └── time_format.py
│   ├── batch_main.py
│   ├── config.py
│   ├── main.py
│   └── migrate_output_names.py
├── prompts/
│   ├── algebra.txt
│   ├── numerical_methods.txt
│   ├── statistic.txt
│   └── others.txt
├── output/
├── requirements.txt
├── run_transcriber.ipynb
└── README.md

Аудиозаписи могут находиться как внутри проекта, так и в отдельной папке.

Рекомендуемая структура Google Drive:

MyDrive/
├── lecture_transcriber/
│   ├── app/
│   ├── prompts/
│   ├── output/
│   ├── requirements.txt
│   └── run_transcriber.ipynb
└── записи/
    ├── algebra/
    ├── numerical_methods/
    ├── statistic/
    └── others/

Название папки предмета должно совпадать с названием общего prompt-файла:

записи/algebra/             → prompts/algebra.txt
записи/numerical_methods/   → prompts/numerical_methods.txt
записи/statistic/           → prompts/statistic.txt
записи/others/              → prompts/others.txt

Формат результата

Для файла:

записи/numerical_methods/Копия ЧМА лекция 14.05.2026.m4a

batch создаст:

output/
└── numerical_methods/
    └── Копия ЧМА лекция 14.05.2026/
        ├── Копия ЧМА лекция 14.05.2026.txt
        ├── Копия ЧМА лекция 14.05.2026_clean.txt
        ├── Копия ЧМА лекция 14.05.2026.srt
        ├── Копия ЧМА лекция 14.05.2026.json
        └── DONE
  • <название>.txt — расшифровка с таймкодами;
  • <название>_clean.txt — сплошной текст без таймкодов;
  • <название>.srt — субтитры;
  • <название>.json — структурированные сегменты и параметры запуска;
  • DONE — маркер полностью завершённой обработки.

Если процесс остановился до создания DONE, запись будет обработана повторно при следующем batch-запуске.

Требования

  • Python 3.10–3.12;
  • ffmpeg;
  • faster-whisper;
  • для GPU — NVIDIA GPU и совместимые CUDA-библиотеки.

Локальная установка

1. Создать виртуальное окружение

python -m venv .venv
.venv\Scripts\Activate.ps1

2. Установить Python-зависимости

python -m pip install --upgrade pip
pip install -r requirements.txt

3. Установить ffmpeg

Windows:

winget install Gyan.FFmpeg

Проверка:

ffmpeg -version
ffprobe -version

После установки может потребоваться полностью перезапустить PowerShell или PyCharm.

Локальный запуск

Один файл на CPU

python -m app.main "D:\recordings\algebra\Алгебра лекция 28.03.2026.m4a" `
  --model medium `
  --language ru `
  --device cpu `
  --compute-type int8 `
  --prompt-file prompts/algebra.txt

Один файл на NVIDIA GPU

python -m app.main "D:\recordings\algebra\Алгебра лекция 28.03.2026.m4a" `
  --model large-v3 `
  --language ru `
  --device cuda `
  --compute-type float16 `
  --prompt-file prompts/algebra.txt

Проверить batch без запуска модели

python -m app.batch_main `
  --input-dir "D:\recordings" `
  --output-dir output `
  --prompts-dir prompts `
  --dry-run

Тестировать только одну ещё не обработанную запись

python -m app.batch_main `
  --input-dir "D:\recordings" `
  --output-dir output `
  --prompts-dir prompts `
  --model small `
  --language ru `
  --device cpu `
  --compute-type int8 `
  --limit 1

Полный batch на CPU

python -m app.batch_main `
  --input-dir "D:\recordings" `
  --output-dir output `
  --prompts-dir prompts `
  --model medium `
  --language ru `
  --device cpu `
  --compute-type int8

Полный batch на GPU

python -m app.batch_main `
  --input-dir "D:\recordings" `
  --output-dir output `
  --prompts-dir prompts `
  --model large-v3 `
  --language ru `
  --device cuda `
  --compute-type float16

Пересчитать готовые записи

python -m app.batch_main `
  --input-dir "D:\recordings" `
  --output-dir output `
  --prompts-dir prompts `
  --model large-v3 `
  --language ru `
  --device cuda `
  --compute-type float16 `
  --force

Без --force полностью готовые записи пропускаются.

Запуск в Google Colab

В проект включён ноутбук:

run_transcriber.ipynb

Подготовка Drive

На Google Drive должны существовать:

/content/drive/MyDrive/lecture_transcriber
/content/drive/MyDrive/записи

Аудиозаписи не требуется копировать внутрь проекта. Путь к внешней папке передаётся через --input-dir.

Порядок запуска

  1. Открыть run_transcriber.ipynb в Google Colab.
  2. Выбрать GPU runtime.
  3. Выполнять ячейки сверху вниз.
  4. Проверить dry-run.
  5. Обработать одну запись на small.
  6. Запустить полный batch на large-v3 или medium.

Ноутбук не изменяет app/config.py. Параметры Colab передаются непосредственно в команду:

--device cuda --compute-type float16

Поэтому тот же проект можно затем запустить локально с:

--device cpu --compute-type int8

Возобновление после остановки Colab

Повторно выполните ячейки подключения Drive, установки зависимостей и batch-запуска. Записи с полным комплектом результатов и файлом DONE будут пропущены.

Prompts

Общий prompt предмета:

prompts/<subject>.txt

Например:

prompts/algebra.txt
prompts/numerical_methods.txt
prompts/statistic.txt
prompts/others.txt

Дополнительно поддерживается prompt конкретной записи:

prompts/<subject>/<filename_without_extension>.txt

Приоритет:

  1. prompt конкретной записи;
  2. общий prompt предмета;
  3. запуск без prompt.

Миграция старых результатов

Старые версии проекта создавали файлы:

transcript.txt
transcript_clean.txt
transcript.srt
transcript.json

Их можно переименовать без повторной расшифровки:

python -m app.migrate_output_names --output-dir output

Предварительная проверка:

python -m app.migrate_output_names --output-dir output --dry-run

В Colab:

!python -m app.migrate_output_names \
  --output-dir "/content/drive/MyDrive/lecture_transcriber/output"

Частые ошибки

No module named app

Команда запущена не из корня проекта.

cd lecture_transcriber

Audio file not found

Проверьте точное имя и путь, включая пробелы и регистр букв.

ffmpeg was not found

Проверьте:

ffmpeg -version

После установки перезапустите терминал или IDE.

CUDA или cuDNN error

Проверьте наличие GPU:

nvidia-smi

Для временного CPU-запуска используйте:

--device cpu --compute-type int8

No prompt found

Название предметной папки и prompt-файла не совпадает.

записи/statistic/ → prompts/statistic.txt

Конфиденциальность

Распознавание выполняется локально в выбранной среде выполнения. OpenAI API не используется. При работе через Colab аудио читается из подключённого Google Drive и обрабатывается в среде выполнения Colab.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages