Skip to content

Используем нейронку для пересказа YouTube

В этой статье мы рассмотрим, как с помощью нейросети и Python создать пересказ видео на YouTube на основе его субтитров. Мы будем использовать Ollama для запуска модели и yt-dlp для извлечения субтитров.

Требования

  1. Операционная система: Linux.
  2. Программы: установленные yt-dlp, Ollama (инструкции ниже).
  3. Доступ в интернет для загрузки утилит.
  4. Права администратора (требуется установка в системные папки).
  5. Процессов: чем больше ядер, тем быстрее ответит нейронка.
  6. Память: минимум в 2 раза больше размера модели нейронки (для 4b ≈ 8 ГБ)
  7. Диск: достаточно свободного места для файлов (модель нейронки занимает несклько гигабайт).

Инструкция

  • Установить Ollama сервер:
    curl -fsSL https://ollama.com/install.sh | sh
    
  • Настроить Ollama на автоматический запуск:

    systemctl edit ollama.service
    

    Добавьте в открывшийся редактор следующие строки:

    [Service]
    Environment="OLLAMA_HOST=0.0.0.0"
    

    Сохраните файл и перезапустите сервис:

    systemctl restart ollama.service
    
    - Открыть порт 11434 если используете фаерволл
    ufw allow 11434/tcp
    
    - Скачать модель нейронки:
    ollama pull gemma3:4b
    
    - Установить yt_dlp:
    pip install yt-dlp
    
    - Создайте файл yt_sum.py со следующим кодом:
    #!/usr/bin/env python3
    
    import os
    import json
    import requests
    import re
    import yt_dlp
    
    OLLAMA_URL = 'http://192.168.3.14:11434/api/chat'
    YOUTUBE_URL = 'https://www.youtube.com/watch?v=umbtgR77mR8'
    
    for lang in ['ru', 'en']:
        try:
            YDL = yt_dlp.YoutubeDL({'skip_download': True, 'quiet': True, 'writesubtitles': True, 'writeautomaticsub': True, 'subtitlesformat': 'json3', 'subtitleslangs': [lang], 'outtmpl': {'default': 'temp_subtitles_%(id)s'}})
            VIDEO_INFO = YDL.extract_info(YOUTUBE_URL, download=True)
            VIDEO_NAME = VIDEO_INFO.get('title', 'Unknown')
            VIDEO_ID = VIDEO_INFO.get('id', 'unknown')
            break
        except yt_dlp.utils.DownloadError:
            continue
    
    with open(f"temp_subtitles_{VIDEO_ID}.{lang}.json3", "r", encoding="utf-8") as f:
        JSON_SUBTITLES = json.load(f)
    
    SUBTITLE_TEXT = ""
    for event in JSON_SUBTITLES.get("events", []):
        if "segs" in event:
            for seg in event["segs"]:
                text = seg.get("utf8", "")
                if text != "\n":
                    SUBTITLE_TEXT += text
    
    os.remove(f"temp_subtitles_{VIDEO_ID}.{lang}.json3")
    
    LLM_REQUEST = f"""
    Ты — инструмент извлечения фактической информации. 
    Тебе даны субтитры из видео: "{VIDEO_NAME}".
    
    Твоя ЗАДАЧА:
    Извлечь строго и только ТО, что ПРЯМО и ЯВНО содержится в предоставленном тексте:
    
    — факты
    — утверждения
    — конкретные тезисы
    — имена, фамилии, названия
    — даты, временные указания
    — числовые данные
    — явно упомянутые объекты и события
    
    Ответ строго на русском языке.
    
    Текст субтитров:
    
    {SUBTITLE_TEXT}
    """
    
    JSON_REQUEST = {"model": "gemma3:4b", "stream": False, "messages": [{ "role": "user", "content": f"{LLM_REQUEST}" }], "options": { "num_ctx": 8192 }}
    response = requests.post(OLLAMA_URL, json=JSON_REQUEST, headers={"Content-Type": "application/json"})
    LLM_RESPONSE_CONTENT = response.json()["message"]["content"]
    

    Код на GitHub - Сделайте исполняемым (chmod +x) и запустить файл yt_sum.py:

    python3 yt_sum.py
    

Итог

Мы запустили Ollama сервер, на котором запустили нейронную модель Gemma. Мы создали Python скрипт, который извлекает субтитры по ссылке YouTube, отправляет их в нейросеть для анализа и получает структурированный пересказ видео.

Этот подход можно использовать для быстрого анализа содержимого видео, создания кратких выжимок или для поиска конкретной информации в длинных видео.

Библиотека моделей Ollama

yt-dlp на GitHub