Пишем скрипт, который автоматически транскрибирует русскую и английскую речь из видеофайлов в текст с использованием модели Whisper от OpenAI и Python.
Что такое Whisper?
Whisper — это мощная модель от OpenAI, предназначенная для распознавания речи. Она способна обрабатывать аудиофайлы и преобразовывать их в текст, поддерживая множество языков и акцентов. Модель может быть использована для различных задач, включая транскрибацию видео.
Установка библиотек
Какие версии библиотек нужны? Зайдем на страницу загрузки pytorch и узнаем версии библиотек.
Нам понадобятся torch 12.4 и CUDA 12.4 ^_^
Установка CUDA
Скачаем CUDA 12.4 на странице загрузки и затем установим
Установка cuDNN
Скачаем cuDNN 9.4.0 на странице загрузки и затем установим
Установка torch, torchvision, torchaudio
Установим torch
, torchvision
, torchaudio
с помощью команды
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
Установка whisper
Установим whisper
с помощью команды
python -m pip install git+https://github.com/openai/whisper.git
Код
Функция transcribe
Эта функция отвечает за транскрипцию аудио из видеофайла в текст.
def transcribe(video_file, language, beam_size, patience, initial_prompt):
result = whisper_model.transcribe(
video_file,
language=language,
beam_size=beam_size,
patience=patience,
initial_prompt=initial_prompt
)
return result["segments"]
- Параметры:
video_file
: Путь к видеофайлу, который необходимо транскрибировать.language
: Язык транскрипции (например,en
для английского).beam_size
: Определяет количество путей, которые алгоритм поиска будет рассматривать одновременно при генерации текста.patience
: Определяет, насколько долго алгоритм должен продолжать поиск, прежде чем принять окончательное решениеinitial_prompt
: Начальная подсказка, которая может помочь модели лучше понять контекст транскрипции.
Внимание!
Увеличение размера beam_size
(10 и выше) приводит к тому, что Whisper «забывает» транскрибировать некоторые предложения.
Функция create_txt
Эта функция сохраняет транскрибированные сегменты текста в текстовый файл.
def create_txt(segments, output_file):
with open(output_file, 'w', encoding='utf-8') as f:
for segment in segments:
f.write(f"{segment['text']}\n")
Функция process_video_file
Основная функция для обработки видеофайла, которая координирует процесс транскрипции и сохранения результата.
def process_video_file(video_file_path, language, beam_size, patience, initial_prompt):
try:
print(f"Processing video file: {video_file_path}")
transcribed_segments = transcribe(video_file_path, language=language, beam_size=beam_size,
patience=patience, initial_prompt=initial_prompt)
# Сохраняем транскрибацию в TXT файл
transcription_txt = os.path.splitext(video_file_path)[0] + '_transcription.txt'
create_txt(transcribed_segments, transcription_txt)
print(f"TXT file created successfully: {transcription_txt}")
except Exception as e:
print(f"Error processing {video_file_path}: {str(e)}")
Полный код
Полный код доступен в репозитории на Гитхабе.