Расшифровки аудио из всех видеофайлов формата mp4
Назначение и описание:
Этот скрипт на Python используется для расшифровки аудио из всех видеофайлов формата .mp4
, расположенных в текущей папке. В результате работы скрипта будут созданы субтитры (.srt), текстовый файл (.txt) с расшифровкой без временных меток и JSON файл (.json), содержащий подробные данные о процессе расшифровки. Все ошибки и информация о процессе также логируются в два файла: transcription_log.txt
и transcription_errors.txt
.
Шаги для запуска:
- Установка зависимостей:
Чтобы скрипт работал, нужно установить необходимые библиотеки. Для этого выполните следующую команду в командной строке или терминале:
pip install openai-whisper srt
- openai-whisper — это библиотека для работы с моделью Whisper от OpenAI, которая позволяет расшифровывать аудио.
- srt — это библиотека для работы с субтитрами в формате
.srt
.
- Поместите скрипт
whisper_streaming.py
в папку, содержащую видеофайлы с расширением.mp4
. - Убедитесь, что в этой папке есть хотя бы один файл с расширением
.mp4
.
Для запуска скрипта, просто откройте терминал или командную строку, перейдите в папку с этим скриптом и выполните команду:
python whisper_streaming.py
- Результат работы:
- После выполнения скрипта, в той же папке будут созданы файлы:
- .srt — файл субтитров с временными метками.
- .txt — файл с расшифровкой речи без временных меток.
- .json — файл с подробной информацией о процессе расшифровки.
- transcription_log.txt — файл с логом о процессе расшифровки.
- transcription_errors.txt — файл с логом ошибок (если они возникнут).
- После выполнения скрипта, в той же папке будут созданы файлы:
Подробное описание кода:
- Импорт библиотек и переменных:
В начале скрипта импортируются необходимые библиотеки, такие какwhisper
,srt
, а также модули для работы с файлами и логами (os
,json
,datetime
). - Логирование сообщений:
Функцииlog
иlog_error
предназначены для записи сообщений в два файла:- transcription_log.txt — основной лог с информацией о процессе.
- transcription_errors.txt — лог, в который записываются ошибки.
Логирование сопровождается выводом сообщений в консоль с добавлением метки времени.
- Функция
transcribe_file
:
Это основная функция для расшифровки видеофайла. Она выполняет несколько ключевых действий:- Загрузка модели Whisper.
- Расшифровка аудио в видеофайле.
- Генерация субтитров в формате
.srt
. - Генерация текстового файла
.txt
с расшифровкой без временных меток. - Сохранение результатов в формате JSON для дальнейшего анализа.
Для каждого видеофайла создаются три файла:
- Субтитры в формате
.srt
. - Простой текст в формате
.txt
. - JSON с подробной информацией о процессе расшифровки.
- Основная функция
main
:
Это функция, которая управляет всей логикой скрипта:- Она получает список всех файлов
.mp4
в текущей папке. - Проверяет, есть ли такие файлы.
- Загружает модель Whisper и вызывает функцию
transcribe_file
для каждого файла. - Обрабатывает ошибки и записывает их в лог.
- Она получает список всех файлов
- Запуск модели Whisper:
Модель Whisper загружается с помощью функцииwhisper.load_model("small", device="cpu")
. Это означает, что используется модель с размером "small" для работы на CPU. - Папка с видеофайлами:
Все видеофайлы, которые должны быть обработаны, находятся в текущей рабочей директории. Скрипт автоматически находит все файлы с расширением.mp4
. - Ошибки и логирование:
Если во время расшифровки возникает ошибка (например, файл поврежден или не может быть прочитан), скрипт записывает ошибку в файлtranscription_errors.txt
. - Завершение работы:
Когда все файлы обработаны, скрипт записывает сообщение о завершении работы.
Пример работы:
Предположим, в вашей папке есть два видеофайла:
video1.mp4
video2.mp4
После запуска скрипта в той же папке появятся файлы:
video1.srt
,video1.txt
,video1.json
video2.srt
,video2.txt
,video2.json
transcription_log.txt
(лог всего процесса)transcription_errors.txt
(если были ошибки)
Пояснения по ошибкам:
- Если в папке нет файлов
.mp4
, скрипт выведет сообщение:❌ В текущей папке нет .mp4 файлов.
. - Если возникнут ошибки при обработке каждого файла (например, файл поврежден или не поддерживается), они будут записаны в
transcription_errors.txt
.
Заключение:
Этот скрипт автоматически расшифровывает аудио из всех видеофайлов .mp4
в текущей папке, генерирует субтитры и текст, и сохраняет все
результаты в удобных форматах. Это полезно для создания расшифровок
видео, автоматизации работы с мультимедийными материалами и сохранения
логов процессов и ошибок.
ChatGPT сказал:
Вот полный код скрипта:
# whisper_streaming.py # Назначение: Расшифровка всех .mp4 файлов в текущей папке. # Как настроить: # 1. Установить whisper и srt: pip install openai-whisper srt # 2. Поместить скрипт в папку с видеофайлами. # 3. Запустить: python whisper_streaming.py # Результат: .srt, .txt, .json + transcription_log.txt + transcription_errors.txt import whisper import srt import os import json import datetime from datetime import timedelta # Пути к логам LOG_FILE = "transcription_log.txt" ERROR_LOG_FILE = "transcription_errors.txt" def log(message): """Пишет сообщение в общий лог и консоль.""" timestamp = datetime.datetime.now().strftime("[%Y-%m-%d %H:%M:%S]") line = f"{timestamp} {message}" print(line) with open(LOG_FILE, "a", encoding="utf-8") as f: f.write(line + "n") def log_error(message): """Пишет сообщение в лог ошибок и в основной лог.""" log("❌ " + message) with open(ERROR_LOG_FILE, "a", encoding="utf-8") as f: timestamp = datetime.datetime.now().strftime("[%Y-%m-%d %H:%M:%S]") f.write(f"{timestamp} {message}n") def transcribe_file(model, input_path): folder = os.path.dirname(input_path) base_name = os.path.splitext(os.path.basename(input_path))[0] output_srt = os.path.join(folder, base_name + ".srt") output_txt = os.path.join(folder, base_name + ".txt") output_json = os.path.join(folder, base_name + ".json") log(f"→ Расшифровка начата: {input_path}") result = model.transcribe(input_path, verbose=False) # Сохраняем .srt (субтитры) subs = [] for i, segment in enumerate(result["segments"]): subs.append( srt.Subtitle( index=i + 1, start=timedelta(seconds=segment["start"]), end=timedelta(seconds=segment["end"]), content=segment["text"].strip() ) ) with open(output_srt, "w", encoding="utf-8") as f: f.write(srt.compose(subs)) log(f" ✅ Субтитры сохранены: {output_srt}") # Сохраняем .txt (простой текст без времени) with open(output_txt, "w", encoding="utf-8") as f: f.write(result["text"].strip()) log(f" ✅ Текст сохранён: {output_txt}") # Сохраняем .json (подробности) with open(output_json, "w", encoding="utf-8") as f: json.dump(result, f, ensure_ascii=False, indent=2) log(f" ✅ JSON сохранён: {output_json}") def main(): os.environ["XDG_CACHE_HOME"] = r"D:yt-dlp" folder_path = os.getcwd() log("=== Старт обработки видео ===") log(f"Рабочая папка: {folder_path}") try: log("Загружаю модель 'small' на CPU...") model = whisper.load_model("small", device="cpu") except Exception as e: log_error(f"Не удалось загрузить модель Whisper: {e}") return files = sorted([ f for f in os.listdir(folder_path) if f.lower().endswith(".mp4") ]) if not files: log("❌ В текущей папке нет .mp4 файлов.") return log(f"Найдено .mp4 файлов: {len(files)}") for filename in files: full_path = os.path.join(folder_path, filename) try: transcribe_file(model, full_path) except Exception as e: log_error(f"Ошибка при обработке {filename}: {e}") log("🎉 Обработка завершена.n") if __name__ == "__main__": main()
Как это работает:
- Зависимости:
- Используются библиотеки
whisper
для расшифровки аудио иsrt
для создания субтитров. - Также используется стандартные библиотеки Python для работы с файлами и датой (
os
,json
,datetime
, и т. д.).
- Используются библиотеки
- Логирование:
- Функции
log
иlog_error
записывают сообщения в два лог-файла (transcription_log.txt
иtranscription_errors.txt
), а также выводят их в консоль с добавлением временной метки.
- Функции
- Процесс расшифровки:
- Скрипт обрабатывает все
.mp4
файлы в текущей папке, используя модель Whisper для расшифровки аудио. - Для каждого файла генерируются три файла: субтитры
.srt
, текст без временных меток.txt
и подробности в формате.json
.
- Скрипт обрабатывает все
- Запуск:
- Просто скопируйте скрипт в папку с
.mp4
файлами, установите зависимости, и запустите скрипт командойpython whisper_streaming.py
.
- Просто скопируйте скрипт в папку с