@gromlab/create-vod
v0.1.17
Published
DASH/HLS video converter with hardware acceleration (NVENC/QSV/AMF/VAAPI), thumbnails and poster generation
Downloads
1,203
Maintainers
Readme
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: auto-detect encoder/decoder (NVENC / Intel QSV / AMD AMF / VAAPI / CPU)
- 🎯 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
Install
For the CLI to work correctly, FFmpeg and MP4Box must be installed in the system.
# Arch Linux
sudo pacman -S ffmpeg gpac
# Ubuntu/Debian
sudo apt install ffmpeg gpac
# macOS
brew install ffmpeg gpacQuick Start
Before running, make sure FFmpeg and MP4Box are installed (see Install).
npx @gromlab/create-vod video.mp4Output: In the current directory you'll get:
video/
├── manifest.mpd # DASH manifest
├── master.m3u8 # HLS master playlist
├── poster.jpg # Poster frame
├── thumbnails.{jpg,vtt} # Sprite + VTT cues
├── audio/ # Audio init + segments (AAC)
├── 1080p/ # H.264 1080p init + segments
├── 720p/ # H.264 720p
├── 480p/ # H.264 480p
├── 360p/ # H.264 360p
├── 1080p-av1/ # AV1 1080p (if av1 selected)
└── ... # Other profiles/codecs as {profile}-{codec}CLI Usage
create-vod <input-video> [output-dir] [-r resolutions] [-c codec] [-p poster-timecode] [-e encoder] [-d decoder] [-m]Main arguments
| Argument | Description | Default | Required |
|---------------|------------------------------|---------|----------|
| input-video | Path to input video file | - | ✅ |
| output-dir | Output directory | . | ❌ |
Options
| Option | Description | Values / Format | Default | Example |
|--------|----------------------------|----------------------------|----------|---------------------------------|
| -r, --resolutions | Quality profiles | 360, 720@60, 1080-60 | auto | -r 720,1080,1440@60 |
| -c, --codec | Video codec(s) | h264, av1 (comma/space separated) | h264 | -c h264,av1 |
| -p, --poster | Poster timecode | HH:MM:SS or seconds | 00:00:00 | -p 00:00:05 or -p 10 |
| -e, --encoder | Video encoder | auto, nvenc, qsv, amf, vaapi, videotoolbox, v4l2, cpu | auto | -e nvenc |
| -d, --decoder | Video decoder (hwaccel) | auto, nvenc, qsv, vaapi, videotoolbox, v4l2, cpu | auto | -d cpu |
| -m, --muted | Disable audio track | flag | off | -m |
Examples
# Default (DASH + HLS, auto profiles)
npx @gromlab/create-vod video.mp4
# Custom output directory
npx @gromlab/create-vod video.mp4 ./output
# Selected resolutions
npx @gromlab/create-vod video.mp4 -r 720,1080,1440
# High FPS
npx @gromlab/create-vod video.mp4 -r 720@60,1080@60
# Poster from 5th second
npx @gromlab/create-vod video.mp4 -p 5
# Force CPU encode/decode
npx @gromlab/create-vod video.mp4 -c h264 -e cpu -d cpu
# Force GPU encode + CPU decode
npx @gromlab/create-vod video.mp4 -c h264 -e nvenc -d cpu
# Combined parameters
npx @gromlab/create-vod video.mp4 ./output -r 720,1080@60,1440@60 -p 00:00:10
# No audio
npx @gromlab/create-vod video.mp4 -mSupported 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 best encoder/decoder (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
- AV1: enabled only if hardware AV1 encoder detected (in auto mode); otherwise stays on H.264
Requirements: Node.js ≥18.0.0, FFmpeg, MP4Box (gpac), optional NVIDIA/Intel/AMD GPU for acceleration
