Skip to content

Instantly share code, notes, and snippets.

@mahenzon
Last active February 11, 2023 21:47
Show Gist options
  • Save mahenzon/b6aa845c971dcd946d0a29542a4ddbcd to your computer and use it in GitHub Desktop.
Save mahenzon/b6aa845c971dcd946d0a29542a4ddbcd to your computer and use it in GitHub Desktop.
Как установить и настроить Whisper на mac, чтобы выполнять транскрипцию аудио

Установка

Скачиваем 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 - сделать перевод
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment