Команда transcribe¶
stt-ru transcribe
Описание¶
Команда распознает речь в файлах и каталогах. Без --output-dir она печатает результат в консоль, с ним - сохраняет результат каждого файла в выбранных форматах. Каналы стереозаписи распознаются отдельно: в записи разговора каждый канал - свой говорящий, «Канал 0» и «Канал 1». Каналы, которые отличаются только громкостью и небольшим сдвигом, распознаются один раз. Стереозапись одного источника (лекция или диктовка на стереомикрофон) сводите в один канал --mono: иначе каждая фраза выйдет дважды.
stt-ru transcribe call.wav # текст в консоль
stt-ru transcribe call.mp3 -f srt > call.srt # субтитры в файл
stt-ru transcribe calls/ -o out/ # txt, srt и json каждого файла в out/
stt-ru transcribe calls/ -r -o out/ -f srt,ass,csv --summary out/all.csv
stt-ru transcribe calls/ -o out/ --watch --delete-source # мониторинг папки
Файлы¶
- Файл из аргументов берется с любым расширением: формат определяется по содержимому.
- Из каталога берутся файлы с расширениями аудио и видео:
.wav,.flac,.ogg,.oga,.opus,.mp3,.m4a,.aac,.amr,.wma,.aif,.aiff,.au,.caf,.w64,.3gp,.mp4,.mov,.mkv,.avi,.webmв любом регистре. Скрытые файлы и каталоги (имя с точки) пропускаются,-rищет и во вложенных каталогах. - Один файл, переданный разными путями, распознается один раз.
- M4A, AAC, AMR, WMA и звук из видео читает ffmpeg (см. Установка).
Результат¶
Без --output-dir результат печатается в одном формате, по умолчанию txt. Для нескольких файлов подряд печатаются txt - с заголовком ==> файл <== перед каждым файлом, jsonl и csv - с одним заголовком и путем файла, как в аргументах; остальные форматы печатаются только для одного файла. Вывод в файл или конвейер всегда в UTF-8.
С --output-dir результат каждого файла сохраняется в форматах --formats (по умолчанию txt, srt и json) под именем файла: calls/2026/a.wav из каталога calls дает out/2026/a.txt, out/2026/a.srt и out/2026/a.json. Каждый файл результата пишется целиком или никак. Файл, у которого все результаты уже есть, пропускается: повторный запуск продолжает прерванный пакет, --overwrite распознает такие файлы заново. Два файла с одинаковым путем результата (без учета регистра) - ошибка до начала работы, так же с --summary; если результат только печатается, такие файлы распознаются.
--summary собирает фрагменты всех файлов, распознанных в этом запуске, в один файл CSV или JSONL с путем файла в первой колонке. Если общий файл уже есть, строки дописываются, заголовок CSV - один раз.
Параметры¶
| Параметр | По умолчанию | Описание |
|---|---|---|
ПУТЬ... |
- | Файлы и каталоги |
-o, --output-dir |
- | Каталог для результатов каждого файла |
-f, --formats |
txt; txt,srt,json с -o |
Форматы через запятую: txt, json, jsonl, srt, vtt, ass, csv |
--summary |
- | Общий файл .csv или .jsonl с фрагментами файлов этого запуска |
--overwrite |
выключен | Распознавать файлы, у которых результаты уже есть |
-r, --recursive |
выключен | Искать файлы и во вложенных каталогах |
--delete-source |
выключен | Удалять файл после распознавания и записи результатов |
-j, --workers |
1 |
Сколько файлов распознавать одновременно |
--watch |
выключен | Следить за каталогами и распознавать новые файлы |
--interval |
10 |
Пауза между просмотрами каталогов, с |
--min-age |
10 |
Сколько секунд файл не должен меняться, чтобы его взять |
-q, --quiet |
выключен | Не выводить ход работы; ошибки выводятся всегда |
Параметры модели, устройства и поиска речи (-m, --quantization, --model-dir, --device, --mono, --ffmpeg, --vad-*) общие для всех команд и описаны на странице Модели. Все параметры и файлы проверяются до загрузки модели: в том числе что каталог результатов и общий файл можно записать, а каталоги из аргументов - прочитать. Недоступный вложенный каталог пропускается с сообщением, код выхода тогда 1. Если файлов нет, модель не загружается.
Удаление исходников¶
--delete-source удаляет файл после того, как распознаны и записаны все его результаты и строки общего файла. Ему нужен --output-dir или --summary, чтобы результат не терялся. Файл, у которого результаты уже есть, не удаляется: это может быть другая запись с тем же именем. Файл, который изменился, пока распознавался (его еще копируют), тоже не удаляется. Если удалить файл не удалось или он изменился, это ошибка файла.
Мониторинг каталогов¶
--watch просматривает каталоги каждые --interval секунд и берет файл в работу, когда он не менялся --min-age секунд, а в WAV данных столько, сколько указано в заголовке: так не распознается запись, которую еще копируют. О недописанном WAV выводится сообщение, пока он ждет. Нужен --output-dir, пути - только каталоги. Новые файлы не ждут, пока распознаются длинные из прошлых просмотров: одновременно распознается -j файлов.
Файл, который изменился после распознавания, распознается заново: результаты перезаписываются, строки в общий файл дописываются еще раз. Файл с ошибкой распознавания повторяется, только когда изменится; если не записались результаты (общий файл открыт в Excel, кончилось место), файл повторяется в следующем просмотре. Пропавший или недоступный каталог и файлы с одинаковыми именами результатов не останавливают мониторинг, в том числе при перезапуске: о них пишется сообщение. Мониторинг работает до Ctrl+C.
stt-ru transcribe /archive/wav -r -o /archive/out -f csv,ass --summary /archive/out/all.csv --watch --delete-source
Ход работы и коды выхода¶
Ход работы выводится в stderr, результат в консоль - в stdout:
Загрузка модели gigaam-v3-e2e-rnnt...
[1/2] calls/a.wav: фрагментов 5, 15.8 с записи за 0.3 с
[2/2] calls/b.wav: ошибка - ffmpeg не прочитал файл calls/b.wav: Error opening input: Invalid data found when processing input
Готово: распознано 1 из 2, пропущено 0, с ошибкой 1
Ошибка одного файла не останавливает остальные. Ctrl+C отменяет очередь и дожидается файлов в работе, повторный Ctrl+C выходит сразу.
| Код | Когда |
|---|---|
0 |
Все файлы распознаны или пропущены |
1 |
Ошибка файла или загрузки модели, закрытый вывод (например, конвейер в head) |
2 |
Неверные аргументы |
130 |
Прерывание Ctrl+C |