Skip to content

Repository files navigation

VidCropper

CI License Release

Оставьте главное. Локальный редактор для кадрирования, уменьшения и AI-увеличения видео и фотографий с тёмным интерфейсом в браузере.

Перетащите файл, выберите область и задайте масштаб — получите готовый MP4, PNG, JPEG или WebP. Файлы обрабатываются на вашем компьютере через FFmpeg и не отправляются в интернет.

Для запуска готовой версии Visual Studio не нужна. .NET включён в portable-сборку; FFmpeg автоматически загружается при первом запуске.

Возможности

  • Отдельные вертикальные вкладки видео и фото с независимыми файлами и настройками в пределах открытой страницы.
  • Открытие статических JPG, PNG и WebP через выбор файла, drag-and-drop или вставку из буфера обмена.
  • Экспорт фото в PNG, JPEG или WebP, сохранение прозрачности в PNG/WebP и удаление EXIF/GPS.
  • Открытие видео перетаскиванием, через выбор файла или по HTTP/HTTPS-ссылке через yt-dlp.
  • Обрезка по времени: два бегунка на общей шкале, точное время границ и длительность отрезка.
  • Проигрыватель с перемоткой и переключением между исходником и предпросмотром кропа.
  • Рамка с изменением размера мышью и точными координатами в пикселях.
  • Пропорции: свободные, оригинальные, 1:1, 16:9, 9:16, 4:3, 3:4, 4:5 и 21:9.
  • Уменьшение до 1–100% от выбранной области с показом итогового разрешения.
  • Выбор FPS и сохранение звука, включённое по умолчанию.
  • Четыре уровня качества видео с отображением CRF: 16, 20, 23 и 28.
  • Локальный Upscaler: восемь AI-моделей, допустимый для модели масштаб и проба до трёх секунд с синхронным сравнением.
  • Интерполяция RIFE ×2/×3 от исходного FPS, отдельно или вместе с Upscaler; длительность и скорость звука сохраняются.
  • Метаданные исходника, реальный прогресс, отмена и скачивание результата.
  • Настраиваемый порт, включая автоматический выбор свободного.

Работа с фото

Откройте вкладку «Фото» слева. Фото можно выбрать кнопкой, перетащить в окно или вставить через Ctrl+V, если фокус не находится в поле ввода. При перетаскивании приложение само переключается между режимами видео и фото. В каждой вкладке сохраняются собственный файл, crop и настройки до перезагрузки страницы; после запуска всегда открывается видео.

Поддерживаются только статические JPG/JPEG, PNG и WebP. GIF, APNG, анимированный WebP, BMP, TIFF и HEIC не открываются. URL-импорт предназначен только для видео. При загрузке фактический формат проверяется независимо от расширения, EXIF-ориентация применяется к пикселям, а служебные метаданные удаляются. Защитные лимиты задаются параметрами Media:MaxPhotoSide (32768) и Media:MaxPhotoPixels (100 000 000).

Фото можно кадрировать теми же пресетами и точными координатами, уменьшить до 1–100% либо увеличить существующим Upscaler. Без AI сохраняются точные размеры crop, включая нечётные стороны; с AI размер равен crop × выбранный множитель. Статичное окно «До / После» поддерживает разделитель, переключение, размещение рядом, масштаб и панораму.

Результат сохраняется в PNG, JPEG или WebP. Для JPEG/WebP доступно качество 1–100, по умолчанию 92. PNG и WebP сохраняют прозрачность; JPEG заменяет прозрачные области белым. EXIF, GPS, дата съёмки и сведения о камере в результат не переносятся. Готовый файл сохраняется в output, временные нормализованные и AI-файлы удаляются после успеха, ошибки или отмены.

Видеоэкспорт, фотоэкспорт, AI-пробы и установка моделей используют общую блокировку: одновременно выполняется одна тяжёлая операция. Между вкладками можно переключаться и готовить второй файл, пока текущая операция продолжается.

Быстрый старт — без Visual Studio

Готовая сборка предназначена для Windows x64. Нужен браузер с поддержкой кодека вашего видео; для начала подойдёт MP4/H.264.

  1. Откройте Releases.
  2. Скачайте VidCropper-win-x64.zip.
  3. Полностью распакуйте архив в отдельную папку.
  4. Запустите Start.cmd двойным щелчком. При первом запуске потребуется интернет: приложение загрузит FFmpeg 7.0.2 с GitHub сборщика Gyan.dev, проверит SHA-256 и распакует инструменты в свою папку tools. Затем откроется редактор. Следующие запуски работают без этой загрузки.
  5. Перетащите видео, настройте рамку и нажмите «Экспортировать видео».
  6. После завершения нажмите «Скачать MP4».

Не требуется устанавливать Visual Studio, .NET, Node.js или Python. FFmpeg подготавливается автоматически, без изменения PATH и установки служб. Не переносите один VidCropper.exe отдельно: для работы нужна вся распакованная папка.

Source code (zip) в Releases и Code → Download ZIP — это исходники, а не готовая программа. Если portable-архива пока нет, используйте инструкцию ниже.

Для завершения работы нажмите «Завершить» в редакторе или Ctrl+C в консоли сервера. Закрытие вкладки само по себе не останавливает приложение.

Предупреждения антивируса

Антивирус или защита браузера могут заблокировать скачивание либо запуск portable-сборки. Ложные срабатывания возможны, однако конкретное предупреждение нельзя считать ложным без дополнительной проверки.

Если сработала защита, не отключайте антивирус и не добавляйте файл в исключения только на основании этого README. Посмотрите название обнаруженной угрозы и при необходимости отправьте файл на проверку поставщику антивируса. Файл SHA256SUMS.txt в релизе позволяет проверить совпадение архива с опубликованным, но сам по себе не доказывает его безопасность.

Вы всегда можете проверить код и собрать приложение самостоятельно из исходников, не используя готовый ZIP. Visual Studio для этого не нужна: достаточно .NET 10 SDK и FFmpeg. Пошаговая инструкция — в разделе «Запуск из исходников». Самостоятельная сборка позволяет контролировать используемый код, но не гарантирует отсутствия предупреждений антивируса.

Запуск из исходников — тоже без Visual Studio

Потребуются только .NET 10 SDK и FFmpeg с ffprobe. Редактор кода и Git необязательны.

  1. Установите .NET 10 SDK для Windows x64. Выбирайте раздел SDK, одного Runtime для сборки исходников недостаточно.

  2. Скачайте Windows-сборку FFmpeg по ссылке с официальной страницы загрузки. Нужны ffmpeg.exe, ffprobe.exe и поддержка libx264/AAC; проверена FFmpeg 7.0.2.

  3. Скачайте репозиторий через Code → Download ZIP и распакуйте его либо клонируйте через Git.

  4. Укажите полные пути к FFmpeg и ffprobe в appsettings.json, например:

    "FfmpegPath": "D:\\Tools\\ffmpeg\\bin\\ffmpeg.exe",
    "FfprobePath": "D:\\Tools\\ffmpeg\\bin\\ffprobe.exe"

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

  5. Запустите Start.cmd из корня проекта. Приложение соберётся и откроет браузер. При первой сборке может потребоваться интернет для восстановления компонентов .NET.

Альтернативный запуск из PowerShell в папке проекта:

dotnet run -- --OpenBrowser=true

Для проверки установки SDK выполните dotnet --list-sdks: в списке должна быть версия 10.0.x.

Открытие видео по ссылке

Нажмите «Открыть видео по ссылке», вставьте адрес и нажмите «Проверить ссылку». Приложение запрашивает информацию об источнике до скачивания видео, затем показывает подходящий выбор качества:

  • Для прямого файла — «Оригинал». Исходное разрешение, в том числе нестандартное или вертикальное, не сравнивается с прежним выбором 1080p. Тип определяется по данным источника, а не расширению: поддерживаются ссылки без .mp4 и перенаправления.
  • Для страниц видеосервисов и потоков — «Лучшее доступное» и разрешения, которые сообщил источник. Число p означает высоту кадра. Если варианты разрешения не сообщаются, доступен только автоматический выбор.

Нажмите «Скачать», чтобы открыть видео в редакторе. При фиксированном качестве потоков приложение не подставляет меньшее разрешение и не увеличивает исходник. Изменение ссылки сбрасывает список качества; проверка также повторяется, если информация устарела. Доступность форматов на сервисе может измениться между проверкой и скачиванием.

Инструменты yt-dlp.exe и deno.exe проверяются только по нажатию кнопки, в папке tools рядом с приложением (при запуске из исходников — в корне проекта).

Если инструменты отсутствуют, popup предложит скачать их с официальных GitHub Releases. После нажатия «Скачать инструменты» приложение скачает только отсутствующие файлы, проверит SHA-256 по данным GitHub и автоматически проверит источник видео. Установка предназначена для Windows x64; PATH и системные настройки не меняются. Уже установленные файлы автоматически не обновляются.

Для ручной установки скачайте yt-dlp.exe и архив Deno для Windows x64 (deno-x86_64-pc-windows-msvc.zip). Поместите yt-dlp.exe и извлечённый deno.exe в tools, затем нажмите «Проверить установку и ссылку». Deno нужен для обработки JavaScript на YouTube. FFmpeg и ffprobe используются из существующей настройки приложения.

Popup показывает этап и прогресс, позволяет отменить операцию. Закрытие popup или вкладки также отменяет текущую загрузку. Незавершённые файлы удаляются; ранее установленный инструмент остаётся в tools.

Полученное видео автоматически открывается в редакторе с локального сервера, без повторной передачи файла из браузера. Приложение подготавливает MP4: совместимые H.264/AAC-дорожки копируются, остальные преобразуются в H.264/AAC. Преобразование может занять время и изменить качество. Готовый исходник сохраняется в папке downloads в корне VidCropper и остаётся после завершения сессии. Отредактированный результат сохраняйте через экспорт.

Поддерживаются одиночные видео с сайтов, поддерживаемых yt-dlp, и прямые ссылки на видео. Плейлисты отклоняются до загрузки; используйте отдельную ссылку на ролик. Прямые трансляции не поддерживаются. На размер скачанного и подготовленного файла распространяется Media:MaxUploadBytes (по умолчанию 10 ГБ); для временных дорожек и обработки потребуется дополнительное место. Максимальное время операции — 2 часа.

Видео с возрастным ограничением на YouTube могут не скачаться. Приложение не читает cookies браузера, не выполняет вход в аккаунт и игнорирует внешние конфигурации и плагины yt-dlp. Закрытые, удалённые или ограниченные сайтом видео могут быть недоступны. При изменениях сайтов может потребоваться вручную обновить yt-dlp в tools.

Upscaler — локальное AI-увеличение

В секции Upscaler включите «Включить AI-увеличение», выберите модель и доступный для неё итоговый масштаб. По умолчанию AI выключен, выбраны Nomos8k SPAN Weak и ×2. Настройки сохраняются при смене видео в открытой странице, но сбрасываются после её перезагрузки.

Модель Назначение
Nomos8k SPAN Weak Относительно чистый исходник, мягкое восстановление
Nomos8k SPAN Medium Умеренные дефекты
Nomos8k SPAN Strong Более сильные дефекты; возможна потеря мелких деталей
4x-SPANkendata Чистое реалистичное видео и фотографии без сильных дефектов
Real-ESRGAN x4plus Универсальное увеличение обычного видео
Real-ESRGAN General x4v3 (RealisticVideo) Быстрое мягкое восстановление реалистичного видео
OpenProteus Бережное увеличение чистого HD/FHD-видео; только ×2
Real-ESRGAN AnimeVideo v3 Аниме и рисованное видео

Модели обрабатывают кадры локально. Python и PyTorch не требуются. Нужны Windows x64 и совместимая с исполнителем видеокарта/драйвер Vulkan; наличие GPU само по себе не гарантирует совместимость. Проверка модели выполняется перед активацией пакета; её можно повторить кнопкой «Проверить GPU / файлы». Автоматического перехода на CPU нет.

Установка по требованию. Нажмите «Скачать необходимые компоненты». Семейство SPAN использует официальный архив 20240831-055257 (16 553 410 байт), уже содержащий Nomos8k и SPANkendata. Real-ESRGAN x4plus и AnimeVideo используют закреплённый realesrgan-ncnn-vulkan-20220424-windows.zip (45 474 481 байт). Для компактных RealisticVideo и OpenProteus используется совместимый upscayl-bin вместе с двумя закреплёнными NCNN-архивами моделей; общий объём этого пакета — 5 827 553 байта. Каждый артефакт имеет отдельные ожидаемые размер и SHA-256, а установка сохраняет их контрольные суммы в квитанции пакета. При переключении между моделями установленного семейства повторная загрузка не нужна. При обычном запуске ничего не скачивается. Пакеты хранятся в tools/ai, не меняют PATH и не включаются в portable-поставку.

Обновление и откат. Новый каталог приходит с новой версией VidCropper. Если для семейства доступен более новый проверенный пакет, появляется кнопка «Обновить AI-модуль». Он устанавливается рядом со старым и активируется только после проверки файлов и модели на GPU. При неудаче прежняя версия остаётся активной. Кнопка «Вернуться к предыдущей версии» переключает на сохранённый рабочий пакет; выбор сохраняется между запусками. При повреждении файлов доступно явное восстановление. Фоновых обновлений, обращения к upstream latest и автоматического удаления старых версий нет. Обновления блокируются на время обработки.

Размер и качество. AI получает область crop в исходном разрешении. Процент уменьшения временно блокируется; после выключения AI он снова действует с прежним значением. Итоговый масштаб считается от crop. Модели Nomos8k, SPANkendata, x4plus и RealisticVideo работают в родном ×4 с последующим уменьшением Lanczos до выбранных ×2/×3; AnimeVideo использует родную модель соответствующего масштаба. OpenProteus нативно работает в ×2, поэтому для неё доступен только ×2. Выбор ×2 для модели ×4 не сокращает собственно вычисления модели. Размер результата округляется вниз до чётных пикселей; родной AI-результат ограничен 32768 пикселями по стороне. Без интерполяции FPS, звук и CRF применяются как при обычном экспорте. При включённой интерполяции частота рассчитывается от исходника, а увеличение разрешения выполняется перед RIFE.

Проба до 3 секунд. Создаёт сравнение от текущей позиции внутри выбранного отрезка; на его конце берёт последние доступные до трёх секунд. Окно «До / После» синхронно воспроизводит два клипа без звука и позволяет перематывать их. Используются выбранные crop, масштаб, CRF и все включённые AI-эффекты. При интерполяции вариант «До» сохраняет исходную частоту, а вариант «После» получает ×2/×3 FPS. Проба не заменяет результат полного экспорта. Закрытие окна отменяет обработку пробы и освобождает её файлы.

Ресурсы и отмена. AI может работать значительно медленнее обычного экспорта и изменять мелкие детали или давать мерцание между кадрами. Для оценки используйте пробу. При включённом Upscaler весь выбранный отрезок сначала извлекается в PNG без потерь: 00000001.png, 00000002.png и далее. Кадры хранятся в temp/ai/<сессия>/<задача> в корне приложения. Затем модель запускается один раз на всю папку, после проверки результатов собирается MP4. Для пробы вариант «До» собирается из той же исходной последовательности. PNG могут занимать десятки гигабайт; все кадры в RAM одновременно не загружаются. При остатке менее 512 МиБ на диске обработка прекращается; этот резерв не гарантирует места для всего ролика. Кадры очищаются после успеха, ошибки и отмены; после аварийного завершения папка может остаться, автоматическая очистка старых сессий не выполняется. Обычный экспорт без AI не создаёт PNG. Одновременно выполняется одна обработка: экспорт или проба. Отмена останавливает дочерние процессы и удаляет незавершённые результаты. Установленные пакеты остаются на диске.

Интерполяция кадров — RIFE

Включите «Интерполяция кадров», выберите модель и ×2 или ×3. По умолчанию выбраны RIFE 4.26 и ×2, сам эффект выключен. Например, исходные 30 FPS превращаются в 60 или 90 FPS. Длительность отрезка и скорость звука сохраняются; SlowMo нет. Обычный выбор FPS блокируется и восстанавливает прежнее значение после выключения эффекта. Дробные частоты, включая 24000/1001 и 30000/1001, сохраняются точно при расчёте.

Установка. Кнопка «Скачать полный пакет» загружает неизменённый windows.zip из TNTwise/rife-ncnn-vulkan 20250112: 826 923 873 байта (788,6 МиБ). SHA-256: 42ed35e115b026f222386648920218cb8a9c7ae1e23698a7363bdd2e1455aba3. Все 47 моделей сохраняются в tools/ai/rife/20250112, включая старые. В выборе доступны 37 моделей семейства v4 и v3.9, поддерживающих оба множителя. Переключение не требует повторной загрузки. Пакет не включён в portable-архив приложения.

Установка, восстановление и откат RIFE проверяют файлы без запуска GPU. Кнопка «Проверить GPU / файлы» запускает проверку выбранной модели по запросу. Нужны Windows x64, Vulkan и совместимый драйвер. Успешная проверка файлов не означает, что модель уже проверена на вашей видеокарте.

Обработка. Сначала применяются обрезка и crop, затем изменение разрешения (включая Upscaler), после него RIFE. Множитель кадров независим от масштаба Upscaler: можно одновременно выбрать увеличение разрешения ×4 и частоты ×3. Видео с переменным FPS нормализуется по временным меткам к постоянной средней частоте исходника; исходная переменная сетка в результате не сохраняется. На обнаруженных монтажных склейках (scdet, порог 10) промежуточные кадры заменяются предыдущим исходным кадром. Последний кадр удерживается до конца отрезка; точность длительности ограничена итоговым кадром.

Проба и ресурсы. «Проба до 3 секунд» в любом AI-блоке применяет все включённые эффекты. Выполните пробу самостоятельно: на быстрых движениях, перекрытиях объектов и мелких деталях возможны артефакты. PNG-кадры хранятся в temp/ai и удаляются после обработки или отмены. Интерполяция увеличивает их количество в 2/3 раза; сочетание с Upscaler требует больше дискового пространства и времени. Экспорт, проба и установка используют общую блокировку обработки.

Потоки подготовки PNG. Параметр Media.PngThreads в appsettings.json управляет кодированием временных PNG при извлечении кадров и подготовке итогового разрешения. По умолчанию 0: половина доступных процессу логических процессоров, с округлением вниз, минимум один поток. Например, при 16 доступных потоках используется 8. Положительное значение задаёт число потоков явно; 1 возвращает последовательное кодирование, отрицательные значения не допускаются. Изменение применяется после перезапуска приложения. Качество и параметры сжатия PNG сохраняются; увеличение числа потоков может повысить расход оперативной памяти. Этот параметр не управляет RIFE, Upscaler или финальным H.264-кодированием.

Если порт занят

По умолчанию используется 5180. Из PowerShell в папке приложения можно запустить:

.\Start.cmd 5300  # Использовать порт 5300
.\Start.cmd 0     # Автоматически выбрать свободный порт

Браузер откроется по фактическому адресу. Для постоянного изменения отредактируйте секцию в appsettings.json рядом с запускаемым приложением:

"LocalServer": { "Port": 5300 }

Изменения применяются после перезапуска. Аргумент запуска имеет приоритет над настройкой. Также поддерживается переменная окружения LocalServer__Port. Сервер доступен только через 127.0.0.1, а не другим компьютерам в сети.

Как работает редактор

Кадрирование. Пресет задаёт пропорции рамки. Переключение на «Свободно» сохраняет её положение и размер, снимая ограничение пропорций. Рамку можно двигать стрелками, а с Shift — с шагом 10 пикселей. «Сбросить» возвращает полный кадр.

Обрезка по времени. Под видео выберите начало и конец двумя бегунками. Выделение применяется к предпросмотру и экспорту. Перетаскивание границы ставит видео на паузу и показывает кадр у границы; воспроизведение останавливается в конце отрезка, повторное нажатие запускает его с начала. Стрелки меняют время на 0,01 с, Page Up / Down — на 1 с, Home / End перемещают выбранную границу до допустимого предела. «Сбросить обрезку» возвращает полный файл. Минимальный отрезок — 0,01 с либо весь файл, если он короче; фактическая точность ограничена кадрами видео и аудио. При экспорте изменение границ заблокировано.

Размер. Процент считается от области кропа: 1080×1080 при 50% даёт 540×540. Итоговые размеры округляются вниз до чётных значений, минимум 2×2.

FPS. Без интерполяции доступны 24, 25, 30, 50 и 60 FPS. Повышение с 30 до 60 повторяет кадры и не добавляет плавности. Предпросмотр показывает композицию, а не результат преобразования FPS или сжатия.

Звук. По умолчанию сохраняется при наличии аудиодорожки. Звук проигрывателя включается отдельно и не влияет на экспорт.

Качество видео. Максимальное · CRF 16 (по умолчанию), Высокое · CRF 20, Сбалансированное · CRF 23 и Компактное · CRF 28. Чем ниже CRF, тем выше качество и обычно больше файл; размер файла не фиксирован. Предпросмотр не показывает потери от сжатия. Выбор сохраняется при смене видео в текущей странице и сбрасывается после перезагрузки. Во время экспорта настройка заблокирована. Она не меняет разрешение, FPS, звук или подготовку видео, скачанного по ссылке.

Экспорт. MP4, H.264/libx264, выбранный CRF (по умолчанию 16), preset medium, Lanczos, квадратные пиксели и yuv420p. Аудио кодируется в AAC 192 кбит/с. Одновременно выполняется один экспорт. Отмена останавливает FFmpeg и удаляет незавершённый файл.

Файлы и приватность

Предпросмотр читает выбранное видео прямо в браузере. Оригинал также передаётся локальному процессу на вашем компьютере для чтения метаданных и экспорта. Внешние серверы не используются, перекодированные копии для предпросмотра не создаются.

  • Временная копия открытого локального файла удаляется при замене видео.
  • Видео по ссылке сохраняется в downloads в корне VidCropper (при запуске из исходников — в корне проекта). Это готовый MP4 для редактора; он сохраняется после смены видео и завершения сессии. Откройте его повторно кнопкой «Открыть видео» без повторного скачивания. Совпадающие имена получают суффиксы (1), (2); существующие файлы не перезаписываются. Незавершённые загрузки очищаются при отмене. Папка не включается в Git и публикацию приложения.
  • Полные экспорты автоматически сохраняются в output в корне VidCropper. Они остаются после следующего экспорта, смены исходника и завершения приложения; совпадающие имена получают суффикс (1), (2) без перезаписи. Пробы остаются временными. Незавершённый экспорт в output не публикуется. Папка исключена из Git и portable-сборки.
  • Скачанные пользователем файлы приложение не удаляет.
  • Рабочая папка: %TEMP%\VidCropper\<идентификатор-запуска>. Она очищается при штатном завершении; после аварийного отключения может остаться.
  • Лимит одного исходника по умолчанию — 10 ГБ. Его можно изменить полем Media.MaxUploadBytes в appsettings.json. Для исходника и результата должно хватать места на диске с временной папкой.

Частые вопросы

Проблема Что сделать
Браузер не открылся Откройте адрес, напечатанный в консоли сервера.
Порт занят Запустите Start.cmd 0 или задайте другой порт.
Команда dotnet не найдена Для исходников установите .NET 10 SDK и заново откройте терминал; portable-сборке он не нужен.
Не найден FFmpeg или ffprobe Перезапустите portable-версию через Start.cmd с доступом к интернету. Либо скачайте FFmpeg самостоятельно и поместите ffmpeg.exe и ffprobe.exe в папку tools рядом с приложением. Для исходников укажите пути в appsettings.json.
Видео не воспроизводится Кодек должен поддерживаться браузером. Автоматической конвертации для предпросмотра нет.
Экспорт завершился ошибкой Проверьте свободное место; подробности FFmpeg выводятся в консоль сервера.

Разработка и сборка релиза

Стек: C# / ASP.NET Core .NET 10, ванильные HTML + CSS + JavaScript, нативные FFmpeg и ffprobe. Фронтенд находится в wwwroot, сервер обработки — в Backend. Сборщик JavaScript и npm-пакеты не используются.

Проверки

GitHub Actions автоматически собирает проект и запускает тесты на Windows при push в main и в pull request, направленных в main. Статус виден на бейдже CI в начале README; нажатие открывает журнал проверок. Запуск вручную: Actions → CI → Run workflow. Конфигурация находится в .github/workflows/ci.yml.

Из корня проекта:

dotnet build -c Release -o artifacts/backend-build
node --test --test-concurrency=1 tests/geometry.test.mjs tests/trim.test.mjs tests/backend.test.mjs tests/ai.test.mjs tests/interpolation.test.mjs tests/processing-time.test.mjs
dotnet run --project tests/AiChecks/AiChecks.csproj -c Release

Для этих тестов нужны Node.js 22+ и FFmpeg/ffprobe в PATH. Node нужен только для тестов. Интеграционные проверки создают синтетические видео и отдельный сервер на свободном порту: проверяются кроп, звук, FPS, поворот, временная обрезка (включая содержимое кадров и синхронизацию звука), отмена, валидация и очистка временных файлов.

Проверки AiChecks используют тестовый исполнитель и локальный HTTP-сервер: они проверяют установку из ZIP и дополнительных tar.gz, контрольные суммы каждого артефакта, обновление, откат, повреждение файлов, отмену на каждом этапе, нехватку места и обработку полной последовательности одним запуском, но не качество моделей. Для RIFE проверяются также полный пакет без автоматического GPU-запуска, ×2/×3, совместная работа с Upscaler, дробный FPS, VFR, монтажные склейки и отмена. Эти проверки используют подставной исполнитель; RIFE не запускается. Реальные GPU-проверки запускаются отдельно (скачивают AI-пакеты по необходимости):

$env:VIDCROPPER_GPU_TESTS = '1'
node --test tests/ai.test.mjs
Remove-Item Env:VIDCROPPER_GPU_TESTS

Они проверяют все пять моделей в ×2/×3/×4, временные границы, поворот, порядок кадров и звук на синтетических роликах. Для проверки качества деталей и мерцания используйте также свои короткие реальные клипы. Тесты запускайте последовательно: существующие проверки очистки сравнивают общую временную папку до/после запуска.

Подготовка portable-архива для GitHub Releases

Publish.ps1 нужен автору сборки, а не пользователю готового приложения. Запустите его в PowerShell из папки проекта:

.\Publish.ps1

Скрипт создаст папку artifacts/release/portable со встроенным .NET runtime, лицензиями и загрузчиком FFmpeg. Сам FFmpeg не включается в публикуемый архив. Выходная папка должна быть пустой; для следующей сборки можно выбрать другую через -OutputDirectory.

Создайте архив до первого запуска этой сборки, чтобы в него не попали загруженные инструменты:

Compress-Archive -Path .\artifacts\release\portable\* -DestinationPath .\artifacts\VidCropper-win-x64.zip -Force
Get-FileHash .\artifacts\VidCropper-win-x64.zip -Algorithm SHA256

Создайте релиз в GitHub → Releases → Draft a new release и прикрепите ZIP как файл релиза. Папка artifacts исключена из Git: обычный push исходников не публикует готовую программу.

Лицензия

Код VidCropper распространяется под MIT. У .NET, FFmpeg и их зависимостей собственные лицензии: см. THIRD-PARTY-NOTICES.md. Публичный архив не включает FFmpeg; его сборка загружается напрямую у поставщика при первом запуске.

HTTP API для разработки
Метод и путь Назначение
GET /api/config Доступность инструментов и лимит загрузки
PUT /api/media/{guid}?name=... Поток исходника с типом application/octet-stream; ответ содержит метаданные
DELETE /api/media/{guid} Освобождение исходника после завершения использующего его экспорта
POST /api/exports Запуск: mediaId, crop: {x,y,width,height}, scale, fps, audio, sourceWidth, sourceHeight, необязательное поле quality (maximum / high / balanced / compact; отсутствующее или null — maximum, неизвестное — HTTP 400), необязательный upscale: { modelId, scale } (отсутствие/null — обычный экспорт, scale — 2/3/4), необязательные startSeconds и endSeconds (секунды от начала исходника; по умолчанию — полный файл)
GET /api/exports/{guid} Статус
GET /api/exports/{guid}/events Прогресс через SSE
POST /api/exports/{guid}/cancel Отмена
GET /api/exports/{guid}/download Скачивание MP4
DELETE /api/exports/{guid} Отмена при необходимости и удаление результата
GET /api/ai/catalog Модели, актуальные/активные/предыдущие версии, установка, обновление, объём загрузки, поддержка платформы и занятость
POST /api/ai/models/{modelId}/{action} action: install (также обновление/восстановление), rollback, check; возвращает задачу
GET /api/ai/operations/{id} Статус установки/проверки, этап, прогресс и ошибка
POST /api/ai/operations/{id}/cancel Отмена установки/проверки
POST /api/ai/previews { export: <запрос экспорта с upscale>, position: <секунды> }; возвращает задачу экспорта с preview: true
GET /api/ai/previews/{id}/before Пробный MP4 без AI, поддерживает Range
GET /api/ai/previews/{id}/after Пробный MP4 с AI, поддерживает Range
POST /api/shutdown Штатное завершение приложения

Изменяющие запросы требуют заголовок X-VidCropper: 1 и при наличии Origin — собственный локальный адрес приложения. Параметры проверяются сервером; FFmpeg запускается через ArgumentList, без командной оболочки.

AI-проба использует существующие /api/exports/{id} для статуса, SSE, отмены и удаления. Снимок задачи дополнен stage, framesDone, framesTotal, preview. Идентификаторы моделей: nomos-weak, nomos-medium, nomos-strong, spankendata, realesrgan, realesr-general-x4v3, openproteus, anime-video. Поле allowedScales каталога задаёт допустимые масштабы каждой модели: OpenProteus принимает только ×2, остальные модели — ×2/×3/×4. Неизвестные модели/масштабы отклоняются с HTTP 400; отсутствующий пакет или занятая обработка — HTTP 409. Пути инструментов и моделей клиент не передаёт.

Добавление проверенной версии AI-пакета

В AiCatalog добавить новый дескриптор семейства после прежних, сохранив старые дескрипторы для работы установленных версий и отката. Задать уникальную версию, неизменяемый URL, точный размер и SHA-256 архива, состав/пути моделей, родные масштабы и сведения об исходниках/лицензиях. Перед выпуском проверить установку, все модели, экспорт, неудачное обновление и откат. Активный пакет выбирается отдельно от последнего в каталоге; после отката автоматического переключения не происходит.

Прогресс AI-задач: stageId (extract, upscale, encode, compare), stageProgress (0–100), framesDone, framesTotal, framesTotalEstimated. Общий progress использует фиксированные веса: извлечение 15%, AI 65%, сборка 19% (в пробе 10% плюс сравнение 9%), завершение 1%. Это не оценка времени. В окне пробы кнопка «Отменить» ждёт остановки процессов и очистки; затем доступны повтор и закрытие. elapsedSeconds — общее время обработки задачи без загрузки исходника; stageElapsedSeconds — время текущего этапа; remainingSeconds — приблизительный остаток текущего этапа по средней фактической скорости, либо null до появления измерений. Оценка пересчитывается на каждом этапе и может меняться. После завершения, ошибки или отмены общий таймер фиксируется. В интерфейсе время показано как ЧЧ:ММ:СС; часы не сбрасываются после 24 часов.

About

Локальный видеоредактор: кадрирование, изменение размера и FPS, предпросмотр и экспорт через FFmpeg. ASP.NET Core .NET 10.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages