Use this guide to choose the right vtx job style and the minimum config fields to edit.
flowchart TD
A[Start with one source video file or RTMP stream] --> B{What do you want to create}
B --> C[One output video]
C --> C1[Use jobs/example-basic.conf]
C1 --> C2[Set input, one profile, output path]
C2 --> Z[Validate, dry-run, transcode]
B --> D[Several MP4 videos]
D --> D1{Prefer simplest processing}
D1 -->|Yes| D2[Use jobs/example-multi-video.conf]
D2 --> D3[Default mode is sequential]
D3 --> D4[Set input and outputs list]
D4 --> Z
D1 -->|No| E[Use jobs/example-multi-output-mode.conf]
E --> E1[Set mode=multi-output]
E1 --> E2[Use one profile per MP4 output]
E2 --> Z
B --> F[HLS from file input]
F --> F1[Use jobs/example-hls.conf]
F1 --> F2[Set mode=hls]
F2 --> F3[Set m3u8 outputs and hls_master_playlist]
F3 --> F4[Test with docs/hls-player.html]
F4 --> Z
B --> L[Live RTMP to HLS]
L --> L1[Use jobs/example-live-hls.conf]
L1 --> L2[Set input_mode=rtmp and mode=live-hls]
L2 --> L3[Set hls_master_playlist and live outputs]
L3 --> Z
Z --> Z1[validate --job JOB_FILE]
Z1 --> Z2[transcode --job JOB_FILE --dry-run --verbose]
Z2 --> Z3[transcode --job JOB_FILE]
If this block appears as plain code in your editor preview, the editor does not render Mermaid diagrams by default. GitHub renders Mermaid blocks natively; VS Code may need a Mermaid preview extension.
Use this when you want one input video converted to one output preset, such as 720p or 1080p.
Start from:
./bin/vtx.sh transcode --job ./jobs/example-basic.conf --dry-run --verboseJob fields to check:
input: source video pathffmpeg: usuallyffmpegoverwrite:trueorfalseoutputs: one profile file
Profile fields to check:
name: readable output namepreset: preset name such as720p,1080p, or a custom preset pathoutput: final MP4 path
Use this when you want several output videos and prefer the simplest, safest behavior. vtx runs one FFmpeg command per profile, one after another.
Start from:
./bin/vtx.sh transcode --job ./jobs/example-multi-video.conf --dry-run --verboseJob fields to check:
input: source video pathoutputs: comma-separated profile filescpu_limit: optional job-level processing limit such as50%
Profile fields to check:
preset: one preset per output videooutput: one MP4 path per profile- optional overrides:
video_bitrate,audio_bitrate,quality,width,height
Choose this mode first unless you specifically need one FFmpeg process.
Use this when you want several MP4 outputs from one FFmpeg process. This is useful when you want the source decoded once and split into multiple renditions.
Start from:
./bin/vtx.sh transcode --job ./jobs/example-multi-output-mode.conf --dry-run --verboseJob fields to check:
mode=multi-outputinput: source video pathoutputs: comma-separated profile filescpu_limit: optional job-level processing limit such as50%
Profile fields to check:
preset: one preset per output videooutput: one MP4 path per profile
Use dry-run first and review the generated filter_complex command. Multi-output mode is more efficient for some workflows, but it is less simple than sequential mode.
Use this when you want HLS playlists and segments from a normal source file.
Start from:
./bin/vtx.sh transcode --job ./jobs/example-hls.conf --dry-run --verboseJob fields to check:
mode=hlsinput: source video pathhls_master_playlist: required master playlist path, for example./out/hls/master.m3u8hls_segment_time: optional target segment length, default6hls_playlist_type: optional, usuallyvodhls_flags: optional, usuallyindependent_segmentsoutputs: comma-separated HLS profile files
Profile fields to check:
preset: one preset per HLS renditionoutput: variant playlist path ending with.m3u8, for example./out/hls/720p/index.m3u8
Use this when OBS or another publisher sends an RTMP stream and you want vtx to produce HLS on the fly.
Start from:
./bin/vtx.sh transcode --job ./jobs/example-live-hls.conf --dry-run --verboseJob fields to check:
input_mode=rtmpinput: RTMP URL such asrtmp://127.0.0.1:1935/live/browserinput_args: optional live ingest tuning such as-fflags nobuffermode=live-hlshls_master_playlist: required master playlist pathhls_segment_time: default2hls_list_size: default8hls_delete_segments: defaulttruehls_append_list: defaulttrueoutputs: comma-separated live HLS profile files
Profile fields to check:
preset: one preset per live renditionoutput: variant playlist path ending with.m3u8
The first live version is RTMP-first and does not include built-in restart supervision or watch mode.
After generating HLS files, test playback with the browser test page:
python3 -m http.server 8080Open:
http://localhost:8080/docs/hls-player.html?src=/out/hls/master.m3u8
For every job, use the same safe command flow:
./bin/vtx.sh validate --job ./jobs/example-live-hls.conf
./bin/vtx.sh transcode --job ./jobs/example-live-hls.conf --dry-run --verbose
./bin/vtx.sh transcode --job ./jobs/example-live-hls.conf --verbose --log ./logs/live-hls.logvalidate catches config problems. --dry-run --verbose lets you inspect the generated FFmpeg command. --log saves details for later review.