Расшифровки аудио из всех видеофайлов формата mp4

Назначение и описание:

Этот скрипт на Python используется для расшифровки аудио из всех видеофайлов формата .mp4, расположенных в текущей папке. В результате работы скрипта будут созданы субтитры (.srt), текстовый файл (.txt) с расшифровкой без временных меток и JSON файл (.json), содержащий подробные данные о процессе расшифровки. Все ошибки и информация о процессе также логируются в два файла: transcription_log.txt и transcription_errors.txt.

Шаги для запуска:

  1. Установка зависимостей:
    Чтобы скрипт работал, нужно установить необходимые библиотеки. Для этого выполните следующую команду в командной строке или терминале:
  • pip install openai-whisper srt
    
    
    • openai-whisper — это библиотека для работы с моделью Whisper от OpenAI, которая позволяет расшифровывать аудио.
    • srt — это библиотека для работы с субтитрами в формате .srt.
  • Настройка файлов:
    • Поместите скрипт whisper_streaming.py в папку, содержащую видеофайлы с расширением .mp4.
    • Убедитесь, что в этой папке есть хотя бы один файл с расширением .mp4.
  • Запуск скрипта:
    Для запуска скрипта, просто откройте терминал или командную строку, перейдите в папку с этим скриптом и выполните команду:
    1. python whisper_streaming.py
    2. Результат работы:
      • После выполнения скрипта, в той же папке будут созданы файлы:
        • .srt — файл субтитров с временными метками.
        • .txt — файл с расшифровкой речи без временных меток.
        • .json — файл с подробной информацией о процессе расшифровки.
        • transcription_log.txt — файл с логом о процессе расшифровки.
        • transcription_errors.txt — файл с логом ошибок (если они возникнут).

    Подробное описание кода:

    1. Импорт библиотек и переменных:
      В начале скрипта импортируются необходимые библиотеки, такие как whisper, srt, а также модули для работы с файлами и логами (os, json, datetime).
    2. Логирование сообщений:
      Функции log и log_error предназначены для записи сообщений в два файла:
      • transcription_log.txt — основной лог с информацией о процессе.
      • transcription_errors.txt — лог, в который записываются ошибки.

      Логирование сопровождается выводом сообщений в консоль с добавлением метки времени.

    3. Функция transcribe_file:
      Это основная функция для расшифровки видеофайла. Она выполняет несколько ключевых действий:
      • Загрузка модели Whisper.
      • Расшифровка аудио в видеофайле.
      • Генерация субтитров в формате .srt.
      • Генерация текстового файла .txt с расшифровкой без временных меток.
      • Сохранение результатов в формате JSON для дальнейшего анализа.

      Для каждого видеофайла создаются три файла:

      • Субтитры в формате .srt.
      • Простой текст в формате .txt.
      • JSON с подробной информацией о процессе расшифровки.
    4. Основная функция main:
      Это функция, которая управляет всей логикой скрипта:
      • Она получает список всех файлов .mp4 в текущей папке.
      • Проверяет, есть ли такие файлы.
      • Загружает модель Whisper и вызывает функцию transcribe_file для каждого файла.
      • Обрабатывает ошибки и записывает их в лог.
    5. Запуск модели Whisper:
      Модель Whisper загружается с помощью функции whisper.load_model("small", device="cpu"). Это означает, что используется модель с размером "small" для работы на CPU.
    6. Папка с видеофайлами:
      Все видеофайлы, которые должны быть обработаны, находятся в текущей рабочей директории. Скрипт автоматически находит все файлы с расширением .mp4.
    7. Ошибки и логирование:
      Если во время расшифровки возникает ошибка (например, файл поврежден или не может быть прочитан), скрипт записывает ошибку в файл transcription_errors.txt.
    8. Завершение работы:
      Когда все файлы обработаны, скрипт записывает сообщение о завершении работы.

    Пример работы:

    Предположим, в вашей папке есть два видеофайла:

    • 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()

    Как это работает:

    1. Зависимости:
      • Используются библиотеки whisper для расшифровки аудио и srt для создания субтитров.
      • Также используется стандартные библиотеки Python для работы с файлами и датой (os, json, datetime, и т. д.).
    2. Логирование:
      • Функции log и log_error записывают сообщения в два лог-файла (transcription_log.txt и transcription_errors.txt), а также выводят их в консоль с добавлением временной метки.
    3. Процесс расшифровки:
      • Скрипт обрабатывает все .mp4 файлы в текущей папке, используя модель Whisper для расшифровки аудио.
      • Для каждого файла генерируются три файла: субтитры .srt, текст без временных меток .txt и подробности в формате .json.
    4. Запуск:
      • Просто скопируйте скрипт в папку с .mp4 файлами, установите зависимости, и запустите скрипт командой python whisper_streaming.py.
    Могут быть ошибки. Рекомендуем проверять важную информацию.