feat(cli): добавлен батч-режим и конфигурационный файл (шаги 8–12)

- Зачем:
  - обработка нескольких файлов за один вызов с загрузкой модели один раз.
  - хранение дефолтов (модель, язык, устройство) в .transcriber.toml.
- Что:
  - добавлен config.py: поиск .transcriber.toml (CWD → ~/.config), парсинг, валидация, приоритет CLI > конфиг > хардкод.
  - рефакторинг transcriber.py: выделены load_model() и _transcribe_file() с TranscribeFileResult для переиспользования модели в батче.
  - добавлены expand_globs() с дедупликацией и has_existing_transcript() в utils.py.
  - CLI: files: list[Path], --force/-f, prescan-first батч с итоговой статистикой и временем, Status-спиннер для прогресса.
  - README: секции батч-режим, конфигурационный файл, --force в таблице опций.
  - ADR-002: зафиксированы архитектурные решения (prescan-first, TranscribeFileResult, конфиг без мержа).
- Проверка:
  - uv run pytest -q — 94 passed, 1 skipped.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-18 20:57:19 +03:00
co-authored by Claude Opus 4.6
parent b46827a283
commit e28232ef50
13 changed files with 1227 additions and 103 deletions
+39
View File
@@ -56,6 +56,44 @@ transcribe podcast.wav --model small --device cpu
transcribe interview.m4a --output result.md
```
### Батч-режим
Обработка нескольких файлов за один вызов — модель загружается один раз:
```bash
# Все mp4 в директории
transcribe ./recordings/*.mp4
# Несколько файлов
transcribe meeting1.mp3 meeting2.mp3
# Перезаписать существующие транскрипты
transcribe *.mp4 --force
```
- Файлы с существующим транскриптом (`*-transcript.md`) автоматически пропускаются
- `--force` / `-f` — перезаписать существующие транскрипты
- В конце выводится итоговая статистика: обработано, пропущено, ошибок
- При ошибке в одном файле остальные продолжают обрабатываться
- `--output` несовместим с несколькими файлами
### Конфигурационный файл
Дефолтные параметры можно задать в `.transcriber.toml`:
```toml
model = "small"
language = "ru"
device = "cpu"
compute_type = "int8"
```
Порядок поиска:
1. `.transcriber.toml` в текущей директории (проектный конфиг)
2. `~/.config/transcriber/config.toml` (глобальный конфиг пользователя)
Приоритет: **CLI-аргумент > конфиг > встроенный дефолт**.
### Опции CLI
| Опция | Сокращение | По умолчанию | Описание |
@@ -65,6 +103,7 @@ transcribe interview.m4a --output result.md
| `--output` | `-o` | `<файл>-transcript.md` | Путь к выходному файлу |
| `--device` | `-d` | `auto` | Устройство (auto, cpu, cuda) |
| `--compute-type` | — | `int8` | Тип вычислений |
| `--force` | `-f` | — | Перезаписать существующие транскрипты |
| `--verbose` | `-v` | — | Подробный вывод |
## Модели