Локальная и облачная система пакетной расшифровки аудиозаписей через 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-библиотеки.
python -m venv .venv
.venv\Scripts\Activate.ps1python -m pip install --upgrade pip
pip install -r requirements.txtWindows:
winget install Gyan.FFmpegПроверка:
ffmpeg -version
ffprobe -versionПосле установки может потребоваться полностью перезапустить PowerShell или PyCharm.
python -m app.main "D:\recordings\algebra\Алгебра лекция 28.03.2026.m4a" `
--model medium `
--language ru `
--device cpu `
--compute-type int8 `
--prompt-file prompts/algebra.txtpython -m app.main "D:\recordings\algebra\Алгебра лекция 28.03.2026.m4a" `
--model large-v3 `
--language ru `
--device cuda `
--compute-type float16 `
--prompt-file prompts/algebra.txtpython -m app.batch_main `
--input-dir "D:\recordings" `
--output-dir output `
--prompts-dir prompts `
--dry-runpython -m app.batch_main `
--input-dir "D:\recordings" `
--output-dir output `
--prompts-dir prompts `
--model small `
--language ru `
--device cpu `
--compute-type int8 `
--limit 1python -m app.batch_main `
--input-dir "D:\recordings" `
--output-dir output `
--prompts-dir prompts `
--model medium `
--language ru `
--device cpu `
--compute-type int8python -m app.batch_main `
--input-dir "D:\recordings" `
--output-dir output `
--prompts-dir prompts `
--model large-v3 `
--language ru `
--device cuda `
--compute-type float16python -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 полностью готовые записи пропускаются.
В проект включён ноутбук:
run_transcriber.ipynb
На Google Drive должны существовать:
/content/drive/MyDrive/lecture_transcriber
/content/drive/MyDrive/записи
Аудиозаписи не требуется копировать внутрь проекта. Путь к внешней папке передаётся через --input-dir.
- Открыть
run_transcriber.ipynbв Google Colab. - Выбрать GPU runtime.
- Выполнять ячейки сверху вниз.
- Проверить dry-run.
- Обработать одну запись на
small. - Запустить полный batch на
large-v3илиmedium.
Ноутбук не изменяет app/config.py. Параметры Colab передаются непосредственно в команду:
--device cuda --compute-type float16
Поэтому тот же проект можно затем запустить локально с:
--device cpu --compute-type int8
Повторно выполните ячейки подключения Drive, установки зависимостей и batch-запуска. Записи с полным комплектом результатов и файлом DONE будут пропущены.
Общий prompt предмета:
prompts/<subject>.txt
Например:
prompts/algebra.txt
prompts/numerical_methods.txt
prompts/statistic.txt
prompts/others.txt
Дополнительно поддерживается prompt конкретной записи:
prompts/<subject>/<filename_without_extension>.txt
Приоритет:
- prompt конкретной записи;
- общий prompt предмета;
- запуск без 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"Команда запущена не из корня проекта.
cd lecture_transcriberПроверьте точное имя и путь, включая пробелы и регистр букв.
Проверьте:
ffmpeg -versionПосле установки перезапустите терминал или IDE.
Проверьте наличие GPU:
nvidia-smiДля временного CPU-запуска используйте:
--device cpu --compute-type int8
Название предметной папки и prompt-файла не совпадает.
записи/statistic/ → prompts/statistic.txt
Распознавание выполняется локально в выбранной среде выполнения. OpenAI API не используется. При работе через Colab аудио читается из подключённого Google Drive и обрабатывается в среде выполнения Colab.