# Express Video Encoder BAT-скрипт для Windows для подготовки видео к отправке через мессенджер **Express**. Скрипт перекодирует видео в **AV1** с помощью **FFmpeg / SVT-AV1** и автоматически подбирает видеобитрейт под заданный размер файла. По умолчанию скрипт старается получить итоговый MP4 размером около **39,5 МБ**. ## Возможности - кодирование видео в AV1 через `libsvtav1`; - двухпроходное кодирование; - автоматический расчет видеобитрейта по длительности ролика; - целевой размер файла около 39,5 МБ; - выбор разрешения; - выбор частоты кадров; - 10-битный формат `yuv420p10le`; - AAC-аудио 128 кбит/с, стерео; - чтение характеристик исходника через FFprobe; - сохранение пропорций исходного изображения; - удобный запуск перетаскиванием видео на BAT-файл. ## Требования Необходима Windows с PowerShell и FFmpeg, содержащим: - `ffmpeg.exe`; - `ffprobe.exe`; - кодировщик `libsvtav1`. ### Скачать FFmpeg для Windows Готовую полную сборку FFmpeg для Windows можно скачать здесь: [Скачать FFmpeg (.zip)](https://cloud.kolbox.duckdns.org/f/5d6304d9a1804cf78908/?dl=1) После распаковки архива найдите в папке `bin` файлы: ```text ffmpeg.exe ffprobe.exe ``` Их можно скопировать в папку: ```text express-video-encoder/ffmpeg/ ``` Скрипт ищет FFmpeg в следующем порядке: 1. В локальной папке `ffmpeg` внутри репозитория. 2. В системной переменной `PATH`. Для автономного варианта положите файлы сюда: ```text express-video-encoder/ffmpeg/ffmpeg.exe express-video-encoder/ffmpeg/ffprobe.exe ``` Если этих файлов нет, скрипт попробует использовать установленный в системе FFmpeg. ### Проверка SVT-AV1 Откройте PowerShell или CMD и выполните: ```powershell ffmpeg -encoders | findstr svtav1 ``` В списке должен присутствовать `libsvtav1`. ## Пути к файлам Скрипт поддерживает пути, содержащие пробелы и русские символы. Видео можно хранить, например, в папках вида: ```text E:\Моя библиотека\Видео\ ``` ## Совместимость с путями Для чтения параметров видео скрипт использует временные файлы, поэтому корректно обрабатывает исходные файлы, расположенные в каталогах с пробелами и русскими символами. ## Использование 1. Скачайте или клонируйте репозиторий. 2. Положите `ffmpeg.exe` и `ffprobe.exe` в папку `ffmpeg`. 3. Убедитесь, что используемая сборка FFmpeg поддерживает SVT-AV1. 4. Перетащите нужный видеофайл мышью на `encode-for-express.bat`. 5. Проверьте информацию об исходном видео. 6. Выберите выходное разрешение. 7. Выберите частоту кадров. 8. Подтвердите запуск кодирования. 9. Дождитесь завершения двух проходов. Готовый MP4 сохраняется в папку `output` внутри проекта: ```text express-video-encoder/output/ ``` Папка создаётся автоматически при первом запуске, если её ещё нет. Пример имени: ```text 2026-08-09_09-45-12_Express_1920x1080_24fps.mp4 ``` ## Доступные разрешения - 1920×1080 — Full HD; - 1600×900; - 1536×864; - 1280×720 — HD; - произвольная ширина и высота. При масштабировании пропорции исходного видео сохраняются. Если соотношение сторон отличается от выбранного, недостающее пространство заполняется полями. ## Частота кадров Можно выбрать: - 24 FPS; - 30 FPS; - исходную частоту кадров; - произвольное значение. ## Параметры кодирования По умолчанию: | Параметр | Значение | | -------------- | ------------- | | Видеокодек | AV1 / SVT-AV1 | | Контейнер | MP4 | | Pixel format | `yuv420p10le` | | Целевой размер | ~39,5 МБ | | Аудиокодек | AAC | | Аудиобитрейт | 128 кбит/с | | Аудиоканалы | 2 (стерео) | | Первый проход | preset 8 | | Второй проход | preset 3 | Основные настройки находятся в начале `encode-for-express.bat`: ```bat set "TARGET_BYTES=39500000" set "TARGET_MB=39.5" set "AUDIO_KBPS=128" set "OVERHEAD_KBPS=20" set "FIRST_PASS_PRESET=8" set "SECOND_PASS_PRESET=3" ``` ## Как рассчитывается размер Скрипт получает длительность видео через FFprobe и рассчитывает доступный видеобитрейт с учетом: - целевого размера файла; - длительности ролика; - аудиобитрейта; - небольшого запаса на контейнер MP4. Итоговый размер может немного отличаться от 39,5 МБ. Если рассчитанный видеобитрейт оказывается ниже 300 кбит/с, кодирование не запускается. В таком случае рекомендуется выбрать меньшее разрешение либо увеличить целевой размер. ## Двухпроходное кодирование Первый проход анализирует видео и создает служебную статистику. Второй проход выполняет итоговое кодирование AV1 с использованием рассчитанного битрейта. Временные файлы статистики удаляются после завершения. ## Примечания AV1 обеспечивает высокую эффективность сжатия, но кодирование может занимать значительно больше времени, чем H.264 или H.265. Скорость особенно зависит от разрешения видео, длительности ролика, процессора и значения `preset`. ## Лицензия Проект распространяется по лицензии MIT. См. файл `LICENSE`.