fix: Исправление выбора энкодер/декодер

This commit is contained in:
2026-01-20 14:24:51 +03:00
parent 88fc443cb6
commit 69b3a4804f
15 changed files with 457 additions and 250 deletions

37
docs/CLI_OPTIONS.md Normal file
View File

@@ -0,0 +1,37 @@
# Поддерживаемые опции CLI
## Базовый вызов
```
create-vod <input-video> [output-dir] [options]
```
## Ключевые опции
- `-r, --resolutions` — список профилей (например: `360,720@60,1080`).
- `-c, --codec``h264` | `av1` (по умолчанию auto = h264 + AV1 при наличии HW).
- `-f, --format``dash` | `hls` (по умолчанию auto = dash + hls).
- `-p, --poster` — таймкод постера (`HH:MM:SS` или секунды, по умолчанию 0:00:00).
- `-e, --encoder` — аппаратный/софт энкодер: `auto` | `cpu` | `nvenc` | `qsv` | `amf` | `vaapi` | `videotoolbox` | `v4l2`.
- `-d, --decoder` — аппаратный/софт декодер: `auto` | `cpu` | `nvenc` (cuda) | `qsv` | `vaapi` | `videotoolbox` | `v4l2`.
- `--h264-cq / --h264-crf` — ручное качество для H.264 (GPU CQ / CPU CRF).
- `--av1-cq / --av1-crf` — ручное качество для AV1 (GPU CQ / CPU CRF).
## Что передаём в FFmpeg
- `cpu` (энкодер) → H.264: `libx264`, AV1: `libsvtav1`.
- `nvenc``h264_nvenc`, `av1_nvenc` (если доступен).
- `qsv``h264_qsv`, `av1_qsv`.
- `amf``h264_amf`, `av1_amf`.
- `vaapi``h264_vaapi`, `av1_vaapi`.
- `videotoolbox``h264_videotoolbox` (macOS).
- `v4l2``h264_v4l2m2m` (зависит от SoC).
Декодеры:
- `cpu` — без `-hwaccel`.
- `nvenc``-hwaccel cuda -hwaccel_output_format cuda`.
- `qsv``-hwaccel qsv`.
- `vaapi``-hwaccel vaapi -vaapi_device /dev/dri/renderD128`.
- `videotoolbox``-hwaccel videotoolbox`.
- `v4l2``-hwaccel v4l2m2m`.
## Особенности
- В авто-режиме AV1 включается только при наличии аппаратного AV1; иначе остаётся H.264.
- `auto` выбирает лучший обнаруженный ускоритель по приоритету (nvenc → qsv → amf → vaapi → videotoolbox → v4l2 → cpu).

View File

@@ -66,7 +66,6 @@ create-vod video.mp4 -r 360 720@60 1080 1440@120
**Значения:**
- `h264` — только H.264 (максимальная совместимость)
- `av1` — только AV1 (лучшее сжатие, новые браузеры)
- `dual`оба кодека (рекомендуется)
**Примеры:**
```bash
@@ -75,35 +74,56 @@ create-vod video.mp4 -c h264
# Только AV1 (медленнее, меньше места)
create-vod video.mp4 -c av1
# Оба кодека (максимальная совместимость)
create-vod video.mp4 -c dual
```
**GPU ускорение:**
- H.264: `h264_nvenc` (NVIDIA), fallback → `libx264` (CPU)
- AV1: `av1_nvenc` (NVIDIA), `av1_qsv` (Intel), `av1_amf` (AMD), fallback → `libsvtav1` (CPU)
**По умолчанию:** `dual`
**По умолчанию:** авто (H.264 всегда, AV1 если есть аппаратный AV1)
---
### `--accel` — Аппаратный ускоритель
### `-e, --encoder` — Видео энкодер
Выбор приоритетного ускорителя. По умолчанию выбирается лучший из доступных.
Выбор приоритетного видео энкодера.
**Значения:**
- `auto` — автоопределение по приоритету (NVENC → QSV → AMF → CPU)
- `auto` — автоопределение по приоритету (NVENC → QSV → AMF → VAAPI → CPU)
- `nvenc` — NVIDIA NVENC
- `qsv` — Intel Quick Sync
- `amf` — AMD AMF
- `cpu` — принудительно без GPU
- `vaapi` — VAAPI (Linux)
- `videotoolbox` — Apple VT (macOS)
- `v4l2` — V4L2 M2M (ARM/SBC)
- `cpu` — принудительно без GPU (`libx264`/`libsvtav1`)
**Примеры:**
```bash
create-vod video.mp4 --accel nvenc
create-vod video.mp4 --accel qsv
create-vod video.mp4 --accel cpu # отключить GPU
create-vod video.mp4 -e nvenc
create-vod video.mp4 -e qsv
create-vod video.mp4 -e cpu # отключить GPU
```
---
### `-d, --decoder` — Видео декодер (hwaccel)
Выбор аппаратного декодера / hwaccel.
**Значения:**
- `auto` — автоопределение (NVDEC → QSV → VAAPI → CPU)
- `nvenc` — CUDA/NVDEC
- `qsv` — Intel Quick Sync
- `vaapi` — VAAPI (Linux)
- `videotoolbox` — Apple VT (macOS)
- `v4l2` — V4L2 M2M (ARM/SBC)
- `cpu` — программный декод
**Примеры:**
```bash
create-vod video.mp4 -d nvenc
create-vod video.mp4 -d cpu # декод только на CPU
```
---
@@ -115,7 +135,6 @@ create-vod video.mp4 --accel cpu # отключить GPU
**Значения:**
- `dash` — только DASH (MPEG-DASH)
- `hls` — только HLS (HTTP Live Streaming)
- `both`оба формата
**Примеры:**
```bash
@@ -125,8 +144,8 @@ create-vod video.mp4 -f dash
# Только HLS (для Safari/iOS)
create-vod video.mp4 -f hls
# Оба формата (максимальная совместимость)
create-vod video.mp4 -f both
# Оба формата (по умолчанию авто)
create-vod video.mp4 # формат не указывать
```
**Особенности:**
@@ -135,10 +154,9 @@ create-vod video.mp4 -f both
|--------|--------|---------------|------------|
| DASH | H.264 + AV1 | Chrome, Firefox, Edge, Safari (с dash.js) | Стандарт индустрии |
| HLS | H.264 только | Safari, iOS, все браузеры | Требует H.264 |
| both | H.264 + AV1 (DASH), H.264 (HLS) | Максимальная | Рекомендуется |
**Ограничения:**
- HLS требует `--codec h264` или `--codec dual`
- HLS требует наличие H.264 в итоговом наборе кодеков
- AV1 не поддерживается в HLS (Safari не поддерживает AV1)
**Файловая структура:**
@@ -163,12 +181,7 @@ output/
└── thumbnails.vtt
```
**Преимущества структуры:**
- Сегменты хранятся один раз (нет дублирования)
- DASH и HLS используют одни и те же .m4s файлы
- Экономия 50% места при `format=both`
**По умолчанию:** `both` (максимальная совместимость)
**По умолчанию:** генерируются DASH и HLS
---
@@ -198,7 +211,7 @@ create-vod video.mp4 -p 00:01:30
### Базовое использование
```bash
# Простейший запуск (оба формата, dual codec, автопрофили)
# Простейший запуск (оба формата, авто кодек, автопрофили)
create-vod video.mp4
# С указанием выходной директории
@@ -226,9 +239,6 @@ create-vod video.mp4 -c h264
# Лучшее сжатие (только AV1)
create-vod video.mp4 -c av1
# Максимальная совместимость
create-vod video.mp4 -c dual
```
### Выбор формата
@@ -239,19 +249,16 @@ create-vod video.mp4 -f dash
# HLS для Safari/iOS
create-vod video.mp4 -f hls -c h264
# Оба формата для всех устройств
create-vod video.mp4 -f both -c dual
```
### Комбинированные примеры
```bash
# Производственная конфигурация
create-vod video.mp4 ./cdn/videos -r 360,720,1080 -c dual -f both
create-vod video.mp4 ./cdn/videos -r 360,720,1080
# High-end конфигурация (4K, high FPS)
create-vod video.mp4 -r 720@60,1080@60,1440@120,2160@60 -c dual -f both
create-vod video.mp4 -r 720@60,1080@60,1440@120,2160@60
# Быстрая конвертация для тестов
create-vod video.mp4 -r 720 -c h264 -f dash
@@ -308,7 +315,7 @@ brew install ffmpeg gpac
### Время конвертации (примерные данные)
Видео 4K, 10 секунд, dual codec, 3 профиля:
Видео 4K, 10 секунд, h264 + av1 (авто), 3 профиля:
| Конфигурация | Время |
|--------------|-------|
@@ -322,13 +329,13 @@ brew install ffmpeg gpac
### Для максимальной совместимости
```bash
create-vod video.mp4 -c dual -f both
create-vod video.mp4
```
Генерирует:
- DASH с H.264 + AV1 (Chrome, Firefox, Edge)
- DASH с H.264 + AV1 (Chrome, Firefox, Edge при наличии поддержки)
- HLS с H.264 (Safari, iOS)
- Все современные устройства поддерживаются
- Все современные устройства поддерживаются; AV1 добавляется при наличии HW
### Для быстрой разработки
@@ -341,7 +348,7 @@ create-vod video.mp4 -r 720 -c h264 -f dash
### Для продакшена
```bash
create-vod video.mp4 -r 360,480,720,1080,1440 -c dual -f both
create-vod video.mp4 -r 360,480,720,1080,1440
```
Широкий диапазон профилей для всех устройств.
@@ -349,7 +356,7 @@ create-vod video.mp4 -r 360,480,720,1080,1440 -c dual -f both
### Для 4K контента
```bash
create-vod video.mp4 -r 720,1080,1440,2160 -c dual -f both
create-vod video.mp4 -r 720,1080,1440,2160
```
От HD до 4K для премиум контента.
@@ -367,10 +374,10 @@ create-vod video.mp4 -r 720,1080,1440,2160 -c dual -f both
**Решение:**
```bash
# Используйте h264 или dual
# Используйте h264 или auto
create-vod video.mp4 -f hls -c h264
# или
create-vod video.mp4 -f hls -c dual
create-vod video.mp4 -f hls
```
### FPS источника ниже запрошенного

View File

@@ -469,7 +469,7 @@ chmod +x test_codec.sh
# - H.264 для старых устройств (iOS < 14)
# Пример: create-vod уже реализует это
create-vod input.mp4 output/ -c dual -f both -r 360,720,1080
create-vod input.mp4 output/ -r 360,720,1080
```
### Для архивирования
@@ -555,4 +555,3 @@ done
- Протестированы кодеки: VP9, AV1 (CPU/GPU), H.264 (CPU/GPU)
- Добавлены все команды для тестирования
- Добавлены результаты сравнения на видео 1920×1080, 135 сек