Skip to content

About

Automatic movie clipping for YouTube Shorts. Scene detection, LLM scoring, face tracking, subtitles, vertical crop.

Topics

Resources

Stars

15 stars

Watchers

1 watching

Forks

Repository files navigation

MovieShort AI

Automatic movie clipping for YouTube Shorts — intelligently extracts the best moments from full-length movies, crops them to 9:16 vertical format, adds proper subtitles, and prepares them for YouTube Shorts publishing.

Built with PySceneDetect, faster-whisper, FFmpeg, and LLM scoring (Yandex AI Studio DeepSeek V4 / Gemini / OpenRouter / OpenCode Zen).

Status Python FFmpeg Platform License Release


🌐 English  |  Русский


English

MovieShort AI automatically extracts the best moments from full-length movies and prepares them for YouTube Shorts:

  • Scene detection → transcription → LLM scoring → vertical crop → subtitles
  • AI-powered clip selection with knowledge-aware scoring (1-10)
  • Fully automated pipeline — just select a movie and pick the best clips

Features

  • Smart scene detection — PySceneDetect finds scene boundaries, merges short scenes, splits by dialogue pauses
  • AI-powered clip selection — LLM (DeepSeek / Gemini) scores each scene (1-10) with names, uses knowledge about the movie
  • Person tracking — OpenCV detects faces (frontal+profile) and persons (HOG), centers crop on the most active person
  • Vertical crop (9:16) — Professional vertical format for YouTube Shorts with blurred background
  • Word-level subtitles — faster-whisper transcription with word-level timestamps, customizable font/size/color/position
  • Batch processing — Process multiple movies in sequence with full progress tracking
  • Smart centering — For long scenes, finds the dialogue-dense window to start the clip
  • Diversity filter — Evenly distributes clips across the full movie runtime
  • Bilingual interface — English and Russian UI, translatable LLM prompts
  • Anti-copyright mode — Horizontal flip + contrast correction to avoid Content ID flags

Quick Start

# 1. Install (one-time)
setup.bat

# 2. Run
run.bat

Opens at http://localhost:7860.

Screenshots

Support

If you find this project useful, you can support it:

  • ⭐ Star on GitHub — helps others discover the project
  • 💰 Donate: Boosty | DonateX

Prerequisites

  • Python 3.9+ (if missing, setup.bat shows a download link to python.org)
  • FFmpeg (auto-installed via setup.bat)
  • NVIDIA GPU (optional, speeds up transcription 5-10x)

Interface

Modes

Mode Description
Contextual (LLM) Default. Block-based pipeline: scenes merged into ~120s super-blocks with dialogue, cut count, RMS envelope. LLM batches by 4 for 1M models (deepseek-v4-flash, nemotron-3-ultra-free), 3 for 190-262K (big-pickle, mimo-v2.5-free, hy3-free, nemotron-3.5-lightning-free), 2 default blocks, returns clips with absolute timestamps. Validation + smart centering fallback.
Standard (no LLM) Random scene selection. No API key required. No clip names generated.
Manual Enter custom timestamps — clips are cut exactly at those points.

Editing Options

Option Default Description
Subtitles On Speech recognition + subtitle overlay
Smart centering On Person detection (faces + HOG), centers frame on active person
Banner areas On Top/bottom padding for banners (300px configurable)
Blurred background On Fills empty space with blurred video
Anti-copyright On Mirror + contrast for Content ID avoidance

Setup

Yandex AI Studio (recommended)

  1. Get an API key from Yandex AI Studio
  2. Go to Settings in the app → Provider: Yandex AI Studio
  3. Enter API Key and Folder ID, select model (e.g., deepseek-v4-flash)
  4. Click Verify key

Gemini

  1. Get an API key from Google AI Studio
  2. Go to Settings > Gemini and paste the key

OpenRouter

  1. Get an API key from OpenRouter
  2. Go to Settings in the app → Provider: OpenRouter
  3. Enter API Key, select model (default stealth/ox-alpha)
  4. Click Verify key

OpenCode Zen

  1. Get an API key from OpenCode Zen
  2. Go to Settings in the app → Provider: OpenCode Zen
  3. Enter API Key, select model (default nemotron-3-ultra-free)
  4. Click Verify key

Pipeline

  1. Scene detection — PySceneDetect finds boundaries by frame changes
  2. Short scene merging — Buffer algorithm merges short scenes (max 120s)
  3. Transcription — faster-whisper (medium) once for the full movie
  4. Block assembly — Scenes carry metadata: dialogue pauses, cut count (action proxy), audio RMS envelope. Adjacent blocks are merged into ~120s super-blocks.
  5. Silent block filter — Blocks without dialogue are excluded entirely (no clips from silent scenes).
  6. Batch LLM processing — Super-blocks are grouped in batches of 4 for 1M models (deepseek-v4-flash, nemotron-3-ultra-free), 3 for 190-262K (big-pickle, mimo-v2.5-free, hy3-free, nemotron-3.5-lightning-free), 2 default. A single prompt PROMPT_BATCH_TO_CLIPS lists blocks with full dialogue, cut count, and pauses. LLM returns JSON with absolute timestamps and per-block indices.
  7. Validation + fallback — Per-block validation (duration 20-75s, score 1-10, within block bounds). If LLM returns no clips for a block but dialogue exists → _find_best_window() (smart centering).
  8. Clip selection — Score ≥ 7, diversity filter spreads clips across movie, deduplication (min gap 120s), short clip expansion.
  9. FFmpeg processing — Cut → 9:16 crop → subtitles → blurred background → 1080×1920

License

MIT — free to use, modify, and distribute.


Русский

MovieShort AI — автоматическая нарезка фильмов на YouTube Shorts. Интеллектуально извлекает лучшие моменты из полнометражных фильмов, обрезает их в вертикальный формат 9:16, добавляет субтитры и готовит к публикации.

Сделано с PySceneDetect, faster-whisper, FFmpeg и скорингом через LLM (Yandex AI Studio DeepSeek V4 / Gemini / OpenRouter / OpenCode Zen).

Возможности

  • Умный поиск сцен — PySceneDetect находит границы сцен, объединяет короткие, делит по паузам в диалогах
  • AI-выбор клипов — LLM (DeepSeek / Gemini) оценивает каждую сцену (1-10) и даёт название, используя знания о фильме
  • Person tracking — OpenCV находит лица (фронтальные+профильные) и людей (HOG), центрирует кадр по самому активному человеку
  • Вертикальный кроп (9:16) — Профессиональный формат YouTube Shorts с размытым фоном
  • Субтитры по словам — faster-whisper с таймстемпами на уровне слов; шрифт, размер, цвет, положение настраиваются
  • Пакетная обработка — Несколько фильмов подряд с полным отслеживанием прогресса
  • Smart centering — Для длинных сцен находит окно с максимальной плотностью диалога
  • Diversity-фильтр — Равномерно распределяет клипы по всему фильму
  • Двуязычный интерфейс — Русский и английский язык интерфейса, промпты LLM на языке фильма
  • Anti-copyright — Зеркало + коррекция контраста для обхода Content ID

Быстрый старт

# 1. Установка (один раз)
setup.bat

# 2. Запуск
run.bat

Откроется http://localhost:7860.

Скриншоты

Поддержка

Если проект оказался полезным, поддержать можно так:

  • ⭐ Звёздочка на GitHub — помогает другим найти проект
  • 💰 Донат: Boosty | DonateX

Зависимости

  • Python 3.9+ (если нет — setup.bat покажет ссылку на python.org)
  • FFmpeg (установится автоматически через setup.bat)
  • NVIDIA GPU (опционально, ускоряет транскрипцию в 5-10×)

Интерфейс

Режимы работы

Режим Описание
Контекстный (LLM) По умолчанию. Block-based pipeline: сцены сливаются в супер-блоки ~120с с диалогом, сменами кадра, RMS. LLM батчами по 4 для 1M-моделей (deepseek, nemotron), по 3 для 190-262K, по 2 по умолчанию, возвращает клипы с абсолютными таймстемпами. Валидация + smart centering fallback.
Стандартный (без LLM) Случайный выбор сцен. Не требует API-ключа. Названия не генерируются.
Ручной Укажи таймкоды — программа нарежет клипы по ним.

Опции монтажа

Опция По умолч. Описание
Субтитры Вкл Распознавание речи + наложение субтитров
Smart centering Вкл Детекция лиц, центровка кадра
Баннерные поля Вкл Поля сверху/снизу для баннеров (300px)
Размытый фон Вкл Заполняет пустое пространство размытым видео
Anti-copyright Вкл Зеркало + контраст для обхода Content ID

Настройка

Yandex AI Studio (рекомендуется)

  1. Получи ключ: Yandex AI Studio → создать сервисный аккаунт
  2. В интерфейсе: Settings → провайдер Yandex AI Studio
  3. Введи API Key, Folder ID, выбери модель (например, deepseek-v4-flash)
  4. Нажми Verify key — зелёный = работает

Gemini

  1. Получи ключ: Google AI Studio
  2. Вставь API-ключ в Settings > Gemini — приложение само определит OpenRouter или Google AI

OpenRouter

  1. Получи ключ: OpenRouter
  2. В интерфейсе: Settings → провайдер OpenRouter
  3. Введи API Key, выбери модель (по умолчанию stealth/ox-alpha)
  4. Нажми Verify key — зелёный = работает

OpenCode Zen

  1. Получи ключ: OpenCode Zen
  2. В интерфейсе: Settings → провайдер OpenCode Zen
  3. Введи API Key, выбери модель (по умолчанию nemotron-3-ultra-free)
  4. Нажми Verify key — зелёный = работает

Пайплайн обработки

  1. Детекция сцен — PySceneDetect находит границы сцен по изменению кадра
  2. Слияние коротких сцен — Буферный алгоритм объединяет короткие сцены (макс. 120с)
  3. Транскрипция — faster-whisper (medium) распознаёт речь 1 раз для всего фильма
  4. Сборка блоков — Сцены получают метаданные: паузы в диалоге, количество смен кадра (косвенный показатель экшна), RMS-огибающая аудио. Соседние блоки сливаются в супер-блоки ~120с.
  5. Фильтр тихих блоков — Блоки без диалога полностью исключаются (клипы из них не делаются).
  6. Батч LLM — Супер-блоки группируются батчами по 4 для 1M-моделей (deepseek, nemotron), по 3 для 190-262K, по 2 по умолчанию. Один промпт PROMPT_BATCH_TO_CLIPS содержит блоки с полным диалогом, сменами кадра и паузами. LLM возвращает JSON с абсолютными таймстемпами и индексами блоков.
  7. Валидация + fallback — Поблочная проверка (длительность 20-75с, оценка 1-10, в границах блока). Если LLM не дала клипов для блока, но есть диалог → _find_best_window() (smart centering).
  8. Выбор клипов — Оценка ≥ 7, diversity-фильтр распределяет по фильму, дедупликация (мин. 120с), расширение коротких клипов.
  9. FFmpeg обработка — Нарезка → кроп 9:16 → субтитры → размытый фон → 1080×1920

Структура проекта

MovieShort-AI/
├── main.py              # Точка входа (+ monkey-patch gradio_client)
├── config.py            # Конфигурация (Whisper, FFmpeg, API, баннеры)
├── core/
│   ├── pipeline.py      # Пайплайн обработки одного клипа
│   ├── processor.py     # Person tracking (faces + HOG) + вертикальный кроп
│   ├── batch.py         # Пакетная обработка фильма
│   └── subtitle.py      # Генерация SRT (word-group, JSON persistence)
├── analyzers/
│   ├── detector.py      # Стандартный режим (без LLM)
│   ├── scene_analyzer.py# Детекция сцен, слияние, транскрипция
│   └── text_analyzer.py # LLM анализ (промпты, API, парсинг)
├── gui/
│   └── app.py           # Gradio веб-интерфейс
├── utils/
│   ├── ffmpeg_utils.py  # FFmpeg команды
│   ├── user_config.py   # Сохранение настроек
│   └── log_capture.py   # Захват лога для GUI
├── models/
│   └── haarcascade_frontalface_default.xml
├── output/              # Выходные файлы (создаётся автоматически)
├── requirements.txt     # Зависимости
├── setup.bat           # Установка (venv + CUDA)
└── run.bat             # Запуск

Технические детали

Видео на выходе

  • Полный кадр — исходное 16:9 масштабируется до 1080×1320 (контентная область)
  • Размытый фон (вкл/выкл) — контент накладывается на размытый full-frame фон (1080×1920)
  • Баннерные поля (вкл/выкл, настраивается) — поля сверху/снизу для баннеров
  • Anti-copyright (вкл/выкл) — горизонтальный флип + коррекция контраста/яркости

Субтитры

  • Word-group SRT — группировка слов по 2-4, одна строка без переносов
  • Выше баннера — субтитры подняты на position_y px от низа
  • Точная синхронизация — по word-level таймстемпам Whisper
  • Транскрипция фильма делается 1 раз, сохраняется в JSON, переиспользуется для всех клипов

Smart Centering

Для длинных сцен (>60с) алгоритм ищет окно с максимальной плотностью слов — клип начинается там, где самый насыщенный диалог. Шаг скользящего окна — 1с.

GPU auto-detection

При запуске Whisper: проверка CUDA → проба compute types (float16 → int8_float16 → CPU int8) → печать модели GPU и расчётного времени.

Слияние сцен (без снежного кома)

Буферный алгоритм: короткие сцены (<15с) объединяются, но никогда не расширяют уже готовую сцену. Паузы >2с создают границу. Итог: осмысленные фрагменты 15-120с вместо гигантских 400-секундных сцен.

Лицензия

MIT — можно свободно использовать, модифицировать и распространять.

About

Automatic movie clipping for YouTube Shorts. Scene detection, LLM scoring, face tracking, subtitles, vertical crop.

Topics

Resources

Stars

15 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages