Перейти к содержанию

Команда 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