Добавить в корзинуПозвонить
Найти в Дзене

ЛОКАЛЬНЫЕ РАСШИФРОВКИ ВИДЕО С WHISPER LARGE 3

Если вы делали расшифровки в Premiere или Resolve, то можете себе представить их качество. Часто слова не расслышанные превращаются в набор букв, а если вы используете англоязычные термины, то в лучшем случае будет транскрипция на русском, в худшем набор букв или похожее слово.
И в принципе для монтажа по тексту этого достаточно, но для работы с текстом, например для написания сценария или для подготовки описания этого может быть недостаточно.
Лучший результат на мой взгляд выдает elevenlabs, там и разные языки корректно определяются и спикеров можно разделить, и потом конвертнуть в субтитры нормальные. НО за это надо платить кредитами, а стоят расшифровки там почти как генерации речи.
Вопрос, что делать если нужны просто расшифровки? Я выход себе нашел, я с ChatGPT смастерил себе скрипт, который используя модель WHISPER LARGE 3 делает расшифровки локально на своей машине. При этом ей даже не нужно GPU, так как она работает и на CPU просто в несколько раз дольше. На вход принимает
Оглавление

Если вы делали расшифровки в Premiere или Resolve, то можете себе представить их качество. Часто слова не расслышанные превращаются в набор букв, а если вы используете англоязычные термины, то в лучшем случае будет транскрипция на русском, в худшем набор букв или похожее слово.

И в принципе для монтажа по тексту этого достаточно, но для работы с текстом, например для написания сценария или для подготовки описания этого может быть недостаточно.

Лучший результат на мой взгляд выдает elevenlabs, там и разные языки корректно определяются и спикеров можно разделить, и потом конвертнуть в субтитры нормальные. НО за это надо платить кредитами, а стоят расшифровки там почти как генерации речи.

Вопрос, что делать если нужны просто расшифровки?

Я выход себе нашел, я с ChatGPT смастерил себе скрипт, который используя модель WHISPER LARGE 3 делает расшифровки локально на своей машине. При этом ей даже не нужно GPU, так как она работает и на CPU просто в несколько раз дольше. На вход принимает видео файл на выходе TXT с расшифровками и Таймкодами по 3 минуты.

Что с ними дальше можно делать? Мне допустим они нужны для подготовки описания к видео и урокам. Я закидываю расшифровки в любую GPT систему и на выходе получаю описание к видео и таймкоды по темам.

Рецептом как это сделать я и делюсь. Попробую сделать это максимально подробно, чтобы каждый мог повторить. если вылетают какие то ошибки закидывайте их скринами или текстом в любой GPT там подскажут ответ. Я опишу в целом алгоритм.

ШАГ 1. Установить Python

Если ещё нет, скачиваем Python 3.10 или 3.11 с

https://www.python.org

Во время установки обязательно поставить галочку: Add Python to PATH

Для чего это нужно? Все приложения добавленные в PATH потом запускаются по командной строке. В данном случае по команде python будут обращения к питону

Возможно вы спросите: Как запускать командную?

Переходим в папку где хотите запустить и прямо в адресной строке пишите CMD либо powershell. Я предпочитаю powershell, потому что там больше возможностей и в целом круче звучит.

После установке в терминале можно запустить "python --version" без кавычек и если питон установлен и прописан в PATH то команда пройдёт и будет написана версия питона

ШАГ 2. Установить FFmpeg

FFmpeg будет преобразовывать входной файл в wav 16 kHz, ну и в принципе нужен для чтения всего видеозвукообразного.

Можно с сайта просто папку с архивом, тогда её надо будет прописать в PATH https://ffmpeg.org/download.html

Либо через командную строку "winget install ffmpeg"

Проверка "ffmpeg -version"

Если проверка не проходит скорее всего он не прописался в PATH, тогда надо прописать его там вручную.

Можно через командную строку, команда выглядит так "setx PATH "%PATH%;C:\путь\к\программе""

Одни из кавычек убрать и нужно дать права администратора.

ШАГ 3. Установить PyTorch c CUDA(если делать на CPU, то можно пропустить).

В powershell запускаем "pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121"

Проверка - python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"

На выходе должно быть название видеокарты

-2

ШАГ 4. Устанавливаем whisper

pip install openai-whisper

ШАГ 5. Запуск скрипта

Мы в папку где запускаем кладём файл скрипта, файл для анализа без русских букв и без пробелов в названии.

Сама команда запуска состоит из трёх частей -- "python (команда обращение к python) ПРОБЕЛ названиескрипта.py ПРОБЕЛ названиефайла.mp4"

Всё это делаете в командной строке изнутри папки.

Дальше будет два варианта скрипта для CUDA и для CPU. Этот текст засовываете в блокнот. Сохраняете с расширением .py и кладёте в папку, где всё будете расшифровывать. После чего запускаете скрипт и ждёте.

Наслаждайтесь!

СКРИПТ ДЛЯ CUDA

import sys

import os

import whisper

import torch

import subprocess

BLOCK_SECONDS = 120

def format_time(seconds):

seconds = int(seconds)

h = seconds // 3600

m = (seconds % 3600) // 60

s = seconds % 60

return f"{h:02}:{m:02}:{s:02}"

def convert_to_wav(input_file):

output_file = os.path.splitext(input_file)[0] + "_16k.wav"

if not os.path.exists(output_file):
print("Конвертация в WAV 16kHz mono...")
subprocess.run([
"ffmpeg",
"-y",
"-i", input_file,
"-ar", "16000",
"-ac", "1",
output_file
], check=True)

return output_file

def main(audio_path):

if not os.path.isfile(audio_path):
print("Файл не найден")
return

device = "cuda" if torch.cuda.is_available() else "cpu"
print("Используем устройство:", device)

wav_path = convert_to_wav(audio_path)

print("Загрузка модели large-v3...")
model = whisper.load_model("large-v3", device=device)

print("Распознавание...")

result = model.transcribe(
wav_path,
language="ru",
task="transcribe",
temperature=0.0,
beam_size=5,
best_of=5,
condition_on_previous_text=False,
compression_ratio_threshold=2.4,
logprob_threshold=-1.0,
no_speech_threshold=0.6,
fp16=(device == "cuda")
)

segments = result["segments"]

output_path = os.path.splitext(audio_path)[0] + "_blocks_cuda.txt"

current_block = []
block_start = None

with open(output_path, "w", encoding="utf-8") as f:

for segment in segments:

if block_start is None:
block_start = segment["start"]

current_block.append(segment)

if segment["end"] - block_start >= BLOCK_SECONDS:
text = " ".join(s["text"].strip() for s in current_block)
f.write(f"[{format_time(block_start)}] {text}\n\n")
current_block = []
block_start = None

if current_block:
text = " ".join(s["text"].strip() for s in current_block)
f.write(f"[{format_time(block_start)}] {text}\n\n")

print("Готово.")
print("Файл сохранён:", output_path)

if name == "main":

main(sys.argv[1])

КОНЕЦ СКРИПТА

СКРИПТ ДЛЯ CPU

import sys

import os

import whisper

import torch

BLOCK_SECONDS = 120

def format_time(seconds):

seconds = int(seconds)

h = seconds // 3600

m = (seconds % 3600) // 60

s = seconds % 60

return f"{h:02}:{m:02}:{s:02}"

def main(audio_path):

if not os.path.isfile(audio_path):
print("Файл не найден")
return

device = "cpu"
print("Используем CPU")

print("Загрузка модели...")
model = whisper.load_model("large-v3", device=device)

print("Распознавание...")

result = model.transcribe(
audio_path,
language="ru",
task="transcribe",
temperature=0.0,
beam_size=5,
best_of=5,
condition_on_previous_text=False,
compression_ratio_threshold=2.4,
logprob_threshold=-1.0,
no_speech_threshold=0.6,
fp16=False
)

segments = result["segments"]

output_path = os.path.splitext(audio_path)[0] + "_blocks.txt"

current_block = []
block_start = None

with open(output_path, "w", encoding="utf-8") as f:

for segment in segments:

if block_start is None:
block_start = segment["start"]

current_block.append(segment)

if segment["end"] - block_start >= BLOCK_SECONDS:
text = " ".join(s["text"].strip() for s in current_block)
f.write(f"[{format_time(block_start)}] {text}\n\n")
current_block = []
block_start = None

if current_block:
text = " ".join(s["text"].strip() for s in current_block)
f.write(f"[{format_time(block_start)}] {text}\n\n")

print("Готово.")
print("Файл сохранён:", output_path)

if name == "main":

main(sys.argv[1])

КОНЕЦ СКРИПТА

Если дошли досюда, то напоминаю, лучшие курсы по монтажу видео на Zernovlab.academy