Channel
A channel config sets where a channel's playout is, which ffmpeg it uses, and the format of its output. The lineup
points to it from channels[].config, and can merge overlays over it from channels[].overlays.
- A relative path is relative to the file that sets it (the channel config or an overlay).
versionis the format version of the file. See Config Versions.- For validation and completion in an editor such as VS Code, set
$schemato the JSON schema,https://ersatztv.org/schema/channel/0.1.2.json. ErsatzTV Next ignores$schema. - Since is the first channel config version with the property. A property marked unreleased is on
mainand not in a release yet.
{
"version": "https://ersatztv.org/channel/version/0.1.2",
"playout": { "folder": "./playout" },
"ffmpeg": {},
"normalization": {
"audio": { "format": "aac", "bitrate_kbps": 192, "channels": 2 },
"video": { "format": "h264", "width": 1920, "height": 1080, "bitrate_kbps": 4000 }
}
}
Top level
Settings for one channel: where its playout is, which ffmpeg to use, and the output format. A relative path in any of these settings is relative to the file that sets it.
fallbackWhat plays when nothing is scheduled or an item fails.
Default value
{
"show_error": false
}
ffmpegRequiredffmpeg and ffprobe settings.
normalizationRequiredOutput format for audio, video and subtitles.
playoutRequiredWhere to find the channel's playout files.
versionSchema version URI, e.g. "https://ersatztv.org/channel/version/0.1.0". Missing means 0.0.0.
Playout
playoutfolderRequiredFolder of playout files, named {start}_{finish}.json.
virtual_startPlay the playout as if the channel started at this time instead of now. RFC 3339, e.g.
2026-04-13T00:24:21.527-05:00. For testing.
FFmpeg
ffmpegdisabled_filtersffmpeg video filters to never use, even when the ffmpeg build has them, e.g.
["scale_cuda"]. Pipelines that need one use another filter or software instead.
ffmpeg_pathPath to the ffmpeg executable. Unset or empty uses ffmpeg from PATH.
ffprobe_pathPath to the ffprobe executable. Unset or empty uses ffprobe from PATH.
preferred_filtersffmpeg video filters in order of preference, used when more than one filter can do the
same step, e.g. ["tonemap_vaapi", "tonemap_opencl"].
reports_folderFolder for troubleshooting reports. When set, each failed item or fallback writes a subfolder with the ffmpeg output, the channel config and media info. Unset writes none.
Fallback
fallbackControls the content that replaces scheduled content when there is nothing to play (a gap in the playout) or when the scheduled item fails
duration_secondsUnreleasedFallback length in seconds when the fallback has no end time, e.g. after a failed
dynamic source. Default 60. Raised to the source's retry_budget_ms if shorter.
show_errorBurn the reason for the fallback into the fallback video; this is always burned, regardless of the normalization subtitle mode
Normalization
normalizationaudioRequiredAudio output settings.
subtitleSubtitle output settings.
Default value
{
"fonts_folder": null,
"force_style": null,
"mode": "burn"
}
videoRequiredVideo output settings.
Audio normalization
normalization.audiobitrate_kbpsBitrate in kbit/s. Unset leaves it to the encoder.
buffer_kbpsRate control buffer size (-bufsize) in kbit/s. Unset leaves it to the encoder.
channelsNumber of channels, e.g. 2 for stereo. Unset keeps the source channel count.
copy_formatsSource codecs to copy when mode is copy. Default: aac, ac3, eac3, mp3.
formatCodec for transcoded items. When mode is copy, used only for items that are not copied.
loudnessTargets for normalize_loudness.
modeWhether to transcode every item or copy items whose codec allows it.
normalize_loudnessNormalize loudness with the ffmpeg loudnorm filter to the loudness targets.
Not allowed when mode is copy.
sample_rate_hzSample rate in Hz, e.g. 48000. Unset keeps the source rate, or 48000 when
normalize_loudness is on.
Loudness
normalization.audio.loudnessintegrated_targetIntegrated loudness target in LUFS (loudnorm I). Unset is -16.
range_targetLoudness range target in LU (loudnorm LRA). Unset is 11.
true_peakMaximum true peak in dBTP (loudnorm TP). Unset is -1.5.
Video normalization
normalization.videoaccelHardware acceleration for decoding, filtering and encoding. Steps the device can't do use software. If the device can't be probed, the whole channel uses software. Unset or empty uses software.
amf_deviceAMF adapter index. Windows only. Unset picks the discrete AMD adapter.
bit_depthBit depth, 8 or 10. mpeg2video always uses 8.
bitrate_kbpsBitrate in kbit/s. Required for mpeg2video. Unset leaves it to the encoder.
buffer_kbpsRate control buffer size (-bufsize) in kbit/s. Unset leaves it to the encoder.
copy_formatsSource codecs to copy when mode is copy. Default: h264, hevc.
deinterlaceDeinterlace interlaced sources. Progressive sources are not changed.
filtersOptions for individual ffmpeg filters. Unset options use the filter's default.
Default value
{
"bwdif": null,
"bwdif_cuda": null,
"deinterlace_qsv": null,
"deinterlace_vaapi": null,
"libplacebo": null,
"scale": null,
"tonemap": null,
"tonemap_opencl": null,
"w3fdif": null,
"yadif": null,
"yadif_cuda": null
}
formatCodec for transcoded items. When mode is copy, this and all other video settings apply
only to items that are not copied.
frame_rateOutput frame rate, N or N/D (e.g. 25, 30000/1001).
Frames are dropped or repeated to match it.
In copy mode, only items at this rate are copied. Unset keeps the source rate.
heightHeight in pixels. Applies only when width is also set; otherwise the source size is kept.
The fallback uses 1080 when unset.
modeWhether to transcode every item or copy items whose codec allows it. In copy mode, items
with graphics, burned-in subtitles, still images, Dolby Vision profile 5 or AVI sources are
always transcoded.
scaling_modeHow a source with a different aspect ratio fits width and height.
vaapi_deviceVAAPI render node. Unset uses /dev/dri/renderD128.
vaapi_driverVAAPI driver. Unset lets libva select the driver for vaapi_device.
widthWidth in pixels. Applies only when height is also set; otherwise the source size is kept.
The fallback uses 1920 when unset.
Video filters
normalization.video.filtersEach filter has one option block. A value must contain only a-z, 0-9, _, ., + and -.
bwdifOptions for the bwdif filter, used for
software deinterlacing.
bwdif_cudaOptions for the bwdif_cuda
filter, used for CUDA deinterlacing.
deinterlace_qsvOptions for the deinterlace_qsv filter, used for QSV deinterlacing. Run
ffmpeg -h filter=deinterlace_qsv for its options.
deinterlace_vaapiOptions for the deinterlace_vaapi filter, used for VAAPI deinterlacing. Run
ffmpeg -h filter=deinterlace_vaapi for its options.
libplaceboOptions for the libplacebo filter,
used for CUDA and Vulkan tonemapping.
scaleUnreleasedOptions for the scale filter, used for
software scaling.
tonemapOptions for the tonemap filter, used
for software tonemapping.
tonemap_openclOptions for the
tonemap_opencl filter, used
for VAAPI tonemapping.
w3fdifOptions for the w3fdif filter, used for
software deinterlacing.
yadifOptions for the yadif filter, used for
software deinterlacing.
yadif_cudaOptions for the yadif_cuda
filter, used for CUDA deinterlacing.
bwdif
normalization.video.filters.bwdifmodeValue for the bwdif mode option. Allowed characters: a-z, 0-9, _, ., +, -.
bwdif_cuda
normalization.video.filters.bwdif_cudamodeValue for the bwdif_cuda mode option. Allowed characters: a-z, 0-9, _, ., +, -.
deinterlace_qsv
normalization.video.filters.deinterlace_qsvmodeValue for the deinterlace_qsv mode option. Allowed characters: a-z, 0-9, _, ., +,
-.
deinterlace_vaapi
normalization.video.filters.deinterlace_vaapimodeValue for the deinterlace_vaapi mode option. Allowed characters: a-z, 0-9, _, .,
+, -.
libplacebo
normalization.video.filters.libplacebotonemappingValue for the libplacebo tonemapping option. Allowed characters: a-z, 0-9, _, .,
+, -.
scale
normalization.video.filters.scaleflagsUnreleasedFlags for the software scale filter, e.g. bicubic, lanczos, fast_bilinear.
Default is bicubic. Also applies to graphics, image subtitles, and hardware accels that
use the software scaler.
tonemap
normalization.video.filters.tonemaptonemapValue for the tonemap tonemap option. Allowed characters: a-z, 0-9, _, ., +, -.
tonemap_opencl
normalization.video.filters.tonemap_opencltonemapValue for the tonemap_opencl tonemap option. Allowed characters: a-z, 0-9, _, .,
+, -.
w3fdif
normalization.video.filters.w3fdifmodeValue for the w3fdif mode option. Allowed characters: a-z, 0-9, _, ., +, -.
yadif
normalization.video.filters.yadifmodeValue for the yadif mode option. Allowed characters: a-z, 0-9, _, ., +, -.
yadif_cuda
normalization.video.filters.yadif_cudamodeValue for the yadif_cuda mode option. Allowed characters: a-z, 0-9, _, ., +, -.
Subtitle normalization
normalization.subtitlefonts_folderFolder of fonts for burned-in text subtitles.
force_styleASS style overrides for burned-in text subtitles, e.g. FontName=Arial,FontSize=24
(the subtitles filter's force_style option).
modeWhat to do with the selected text subtitle track. Image subtitles are always burned in.
Values
The allowed values for properties that take a fixed set of strings.
Stream mode
| Value | Since | Description |
|---|---|---|
transcode | 0.1.0 | Transcode every item. |
copy | 0.1.0 | Copy items with a source codec in copy_formats. Transcode all other items. |
Audio format
| Value | Since | Description |
|---|---|---|
aac | 0.1.0 | AAC. |
ac3 | 0.1.0 | Dolby Digital (AC-3). |
Audio copy format
Limited to codecs that mux correctly into HLS MPEG-TS.
| Value | Since | Description |
|---|---|---|
aac | 0.1.0 | AAC. |
ac3 | 0.1.0 | Dolby Digital (AC-3). |
eac3 | 0.1.0 | Dolby Digital Plus (E-AC-3). |
mp2 | 0.1.0 | MPEG-1 Audio Layer II. |
mp3 | 0.1.0 | MPEG-1 Audio Layer III. |
Video format
| Value | Since | Description |
|---|---|---|
h264 | 0.1.0 | H.264 (AVC). |
hevc | 0.1.0 | H.265 (HEVC). |
mpeg2video | 0.1.0 | MPEG-2 video. Requires bitrate_kbps. |
Scaling mode
| Value | Since | Description |
|---|---|---|
scale_and_pad | 0.1.0 | Scale to fit inside the frame and pad the rest with black. |
stretch | 0.1.0 | Scale to fill the frame, ignoring the aspect ratio. |
crop | 0.1.0 | Scale to cover the frame and crop the overflow. |
Hardware acceleration
| Value | Since | Description |
|---|---|---|
amf | 0.1.0 | AMD AMF. Windows only. |
cuda | 0.1.0 | NVIDIA NVENC/NVDEC. |
qsv | 0.1.0 | Intel Quick Sync Video. |
rkmpp | 0.1.0 | Rockchip MPP. Linux only. |
vaapi | 0.1.0 | VA-API. Linux only. |
videotoolbox | 0.1.0 | Apple VideoToolbox. macOS only. |
vulkan | 0.1.0 | Vulkan Video. |
VAAPI driver
| Value | Since | Description |
|---|---|---|
ihd | 0.1.0 | Intel media driver, for Broadwell and newer. |
i965 | 0.1.0 | Legacy Intel driver, for older Intel GPUs. |
radeonsi | 0.1.0 | Mesa driver for AMD GPUs. |
Subtitle mode
| Value | Since | Description |
|---|---|---|
burn | 0.1.0 | Burn subtitles into the video. |
convert | 0.1.0 | Convert text subtitles to a WebVTT track in the HLS stream. |