Скачиваем https://github.com/ggerganov/whisper.cpp
По-простому это нажать Code и выбрать Download ZIP
По-нормальному это скачать через git:
- нажать Code и скопировать ссылку
- в терминале сделать
git clone {вставить ссылку}
Переходим в папку
В терминале необходимо перейти в папку. Можно написать cd
(с пробелом) и туда перетянуть папку, чтобы путь автоматически поставился. Энтер чтобы перейти.
Первая сборка, нужно выполнить команду:
make
Скорее всего не пройдёт, если у вас не установлены command line tools, так что их надо установить. Проще всего сделать это установив brew. Сам brew устанавливается одной командой, но после установки не закрывайте терминал. Обратите внимание на последние строчки. Там будет выведено две строчки, которые нужно выполнить тут же в терминале (начинаются на echo и eval). Скопируйте и вставьте их в терминал по очереди, тогда brew будет установлен. После этого можно снова попробовать сделать make
. Не должно быть ошибок.
Проверяем, что всё ок:
./main
Ожидаемый ответ это
./main
error: no input files specified
usage: ./main [options] file0.wav file1.wav ...
options:
-h, --help [default] show this help message and exit
-t N, --threads N [4 ] number of threads to use during computation
-p N, --processors N [1 ] number of processors to use during computation
-ot N, --offset-t N [0 ] time offset in milliseconds
-on N, --offset-n N [0 ] segment index offset
-d N, --duration N [0 ] duration of audio to process in milliseconds
-mc N, --max-context N [-1 ] maximum number of text context tokens to store
-ml N, --max-len N [0 ] maximum segment length in characters
-sow, --split-on-word [false ] split on word rather than on token
-bo N, --best-of N [5 ] number of best candidates to keep
-bs N, --beam-size N [-1 ] beam size for beam search
-wt N, --word-thold N [0.01 ] word timestamp probability threshold
-et N, --entropy-thold N [2.40 ] entropy threshold for decoder fail
-lpt N, --logprob-thold N [-1.00 ] log probability threshold for decoder fail
-su, --speed-up [false ] speed up audio by x2 (reduced accuracy)
-tr, --translate [false ] translate from source language to english
-di, --diarize [false ] stereo audio diarization
-nf, --no-fallback [false ] do not use temperature fallback while decoding
-otxt, --output-txt [false ] output result in a text file
-ovtt, --output-vtt [false ] output result in a vtt file
-osrt, --output-srt [false ] output result in a srt file
-owts, --output-words [false ] output script for generating karaoke video
-ocsv, --output-csv [false ] output result in a CSV file
-of FNAME, --output-file FNAME [ ] output file path (without file extension)
-ps, --print-special [false ] print special tokens
-pc, --print-colors [false ] print colors
-pp, --print-progress [false ] print progress
-nt, --no-timestamps [true ] do not print timestamps
-l LANG, --language LANG [en ] spoken language ('auto' for auto-detect)
--prompt PROMPT [ ] initial prompt
-m FNAME, --model FNAME [models/ggml-base.en.bin] model path
-f FNAME, --file FNAME [ ] input WAV file path
Оно же помощь.
Доступные модели:
tiny.en
tiny
base.en
base
small.en
small
medium.en
medium
large-v1
large
Например, вам нужна самая большая (самая классная):
make large
Проверяем, что скачалась:
ls -lh models/ggml-large.bin
Получаем в ответ
-rw-r--r-- 1 suren staff 2.9G Feb 9 19:48 models/ggml-large.bin
Можно ещё хэш проверить:
shasum models/ggml-large.bin
Вернёт 0f4c8e34f21cf1a914c59d8b3ce882345ad349d6 models/ggml-large.bin
И ещё
shasum -a 256 models/ggml-large.bin
Вернёт 9a423fe4d40c82774b6af34115b8b935f34152246eb19e80e376071d3f999487 models/ggml-large.bin
Эту проверку можно не делать, если у вас нет сомнений, что всё скачалось правильно. Если же циферки и буковки различаются, что-то пошло не так, и надо скачать файл заново.
Проверяем вообще работает ли. Закиньте пример, например скачав отсюда https://raw.githubusercontent.com/ggerganov/whisper.cpp/master/samples/jfk.wav
Можно также перетащить в терминал:
./main -m models/ggml-large.bin -f /Users/suren/Downloads/samples_jfk.wav
Ура, вы восхитительны
Конвертим аудио. Вы можете сделать любым удобным инструментом. Нужен .wav с частотой 16Кгц. Другое не примет
Я делаю это через ffmpeg (его поставить можно через brew командой brew install ffmpeg
. А если у вас до сих пор на маке нет brew, надо исправляться)
ffmpeg -i suren-voice.m4a -ac 1 -ar 16000 suren-voice.wav
Остаётся выполнить транскрипцию. Находясь в терминале по пути whisper.cpp
выполните команду:
./main -l ru -m models/ggml-large.bin -f /Users/suren/MyFiles/Projects/suren-voice.wav
Можно добавить параметры. Например, цвета, а также сколько тредов использовать:
./main -pc -t 8 -l ru -m models/ggml-large.bin -f /Users/suren/MyFiles/Projects/suren-voice.wav
Флаги (параметры с минусиками) это разные настройки. Их описание можно почитать выше.
# путь к файлу не нужно печатать руками, достаточно перетащить файл в терминал
# имя выходного файла надо задать, обязательно `.wav`
ffmpeg -i /path/to/video.mp4 -ac 1 -ar 16000 my-audio.wav
В папке с whisper нужно выполнить следующую команду:
./main --output-srt --language ru -t 8 -m models/ggml-large.bin -f /path/to/my-audio.wav
--output-srt
сделает субтитры--language ru
это язык, на котором делать-t 8
- это сколько потоков запускать-m models/ggml-large.bin
это модель, скачана ранее-f /path/to/my-audio.wav
это путь к аудиофайлу, сделанному шагом ранее. Можно просто перетащить файл в терминал
Чтобы сделать сабы на английском (whisper умеет переводить на английский, через ту же модель), нужно выполнить ту же команду, только добавить флаг --translate
. Ниже пример с этим флагом и указанным выходным файлом:
./main --output-srt --language ru -t 8 -m models/ggml-large.bin -f /path/to/my-audio.wav --output-file my-subs-file-en --translate
Новые параметры:
--output-file my-subs-file-en
- имя файла. Тут без расширения, программа сама добавит.srt
. Файл будет сохранен по указанному пути (можно передать полный путь)--translate
- сделать перевод