184 lines
7.5 KiB
Markdown
184 lines
7.5 KiB
Markdown
# 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`.
|