Files
create-vod/README.md

114 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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