114 lines
3.7 KiB
Markdown
114 lines
3.7 KiB
Markdown
# Create VOD 🎬
|
||
|
||
🇷🇺 Russian README: https://gromlab.ru/vod/create-vod/src/branch/master/README_RU.md
|
||
|
||
CLI tool to convert videos to DASH and HLS with hardware acceleration (NVENC / Intel QSV / AMD AMF / VAAPI), adaptive streaming, and automatic thumbnails/poster.
|
||
|
||
**Features:**
|
||
- ⚡ Hardware acceleration: NVENC / Intel QSV / AMD AMF / VAAPI (auto priority)
|
||
- 🎯 Formats: DASH and HLS (shared segments)
|
||
- 📊 Quality profiles: multiple bitrates/FPS (auto or custom)
|
||
- 🖼️ Preview: thumbnail sprite + VTT, poster from the first frame
|
||
- ⏱️ Progress: per-profile and overall CLI progress bars
|
||
|
||
## Quick Start
|
||
|
||
```bash
|
||
# Run via npx (no install)
|
||
npx @gromlab/create-vod video.mp4
|
||
|
||
# Or install globally
|
||
npm install -g @gromlab/create-vod
|
||
create-vod video.mp4
|
||
```
|
||
|
||
**System requirements:**
|
||
```bash
|
||
# Arch Linux
|
||
sudo pacman -S ffmpeg gpac
|
||
|
||
# Ubuntu/Debian
|
||
sudo apt install ffmpeg gpac
|
||
|
||
# macOS
|
||
brew install ffmpeg gpac
|
||
```
|
||
|
||
**Output:** A folder `video/` in the current directory with segments under `{profile}-{codec}/`, DASH/HLS manifests in the root, poster, and thumbnail sprite/VTT.
|
||
|
||
## CLI Usage
|
||
|
||
```bash
|
||
create-vod <input-video> [output-dir] [-r resolutions] [-c codec] [-f format] [-p poster-timecode]
|
||
```
|
||
|
||
### Main arguments
|
||
|
||
| Argument | Description | Default | Required |
|
||
|---------------|------------------------------|---------|----------|
|
||
| `input-video` | Path to input video file | - | ✅ |
|
||
| `output-dir` | Output directory | `.` | ❌ |
|
||
|
||
### Options
|
||
|
||
| Option | Description | Format | Example |
|
||
|--------|----------------------------|----------------------------|---------------------------------|
|
||
| `-r, --resolutions` | Quality profiles | `360`, `720@60`, `1080-60` | `-r 720,1080,1440@60` |
|
||
| `-c, --codec` | Video codec | `h264`, `av1`, `dual` | `-c dual` (default) |
|
||
| `-f, --format` | Streaming format | `dash`, `hls`, `both` | `-f both` (default) |
|
||
| `-p, --poster` | Poster timecode | `HH:MM:SS` or seconds | `-p 00:00:05` or `-p 10` |
|
||
| `--accel` | Hardware accelerator | `auto`, `nvenc`, `qsv`, `amf`, `cpu` | `--accel nvenc` |
|
||
|
||
### Examples
|
||
|
||
```bash
|
||
# Default (DASH + HLS, dual codec, auto profiles)
|
||
create-vod video.mp4
|
||
|
||
# Custom output directory
|
||
create-vod video.mp4 ./output
|
||
|
||
# Selected resolutions
|
||
create-vod video.mp4 -r 720,1080,1440
|
||
|
||
# High FPS
|
||
create-vod video.mp4 -r 720@60,1080@60
|
||
|
||
# DASH only
|
||
create-vod video.mp4 -f dash
|
||
|
||
# HLS only (Safari/iOS)
|
||
create-vod video.mp4 -f hls -c h264
|
||
|
||
# Poster from 5th second
|
||
create-vod video.mp4 -p 5
|
||
|
||
# Combined parameters
|
||
create-vod video.mp4 ./output -r 720,1080@60,1440@60 -c dual -f both -p 00:00:10
|
||
```
|
||
|
||
### Supported resolutions
|
||
|
||
| Resolution | Label | FPS options |
|
||
|------------|----------------|------------------|
|
||
| `360` | 360p (640×360) | 30, 60, 90, 120 |
|
||
| `480` | 480p (854×480) | 30, 60, 90, 120 |
|
||
| `720` | 720p (1280×720)| 30, 60, 90, 120 |
|
||
| `1080` | 1080p (1920×1080)| 30, 60, 90, 120|
|
||
| `1440` | 1440p (2560×1440)| 30, 60, 90, 120|
|
||
| `2160` | 2160p (3840×2160)| 30, 60, 90, 120|
|
||
|
||
High FPS (60/90/120) are generated only if the source supports that FPS.
|
||
|
||
## Defaults & Automation
|
||
|
||
- Segment duration: 2 seconds
|
||
- Hardware accel: auto-detect (GPU if available, else CPU)
|
||
- Profiles: auto-selected based on source resolution
|
||
- Bitrate: BPP-based dynamic calculation
|
||
- Thumbnails: auto sprite (160×90, 1s interval) + VTT
|
||
- Poster: first frame (0:00:00, configurable via `-p`)
|
||
- Parallel encoding: enabled
|
||
|
||
**Requirements:** Node.js ≥18.0.0, FFmpeg, MP4Box (gpac), optional NVIDIA/Intel/AMD GPU for acceleration
|