Release Notes
Added
- Next engine:
- Properly rotate content that contains orientation metadata (e.g. from phones)
- Add
mpeg2videoencoder support (software, some Intel QSV and Intel VAAPI devices) - Add song playback support, using legacy-generated background image and text
- Song Video Mode
With Progressis not supported yet; these songs play without a progress bar
- Song Video Mode
- Support FFmpeg Profile
Normalize Frame Rate- As with the legacy engine, the target is the lowest frame rate above 23 fps among the channel's scheduled items
- Frames are dropped or duplicated to reach the target, instead of blended
- With video copy, only items already at the target rate are copied; others are transcoded
- Add
Deep Scan Librarybutton to local libraries- A deep scan re-probes every file and refreshes all metadata and artwork, even when files appear unchanged
- This forces a refresh of e.g. NFO files or posters that were edited without changing their modified time
Changed
- Migrate all channels to the next streaming engine, and use it by default for new channels
- To roll back a channel, set
Streaming EnginetoLegacyin the channel editor - Streaming mode
MPEG-TS (Legacy)has been migrated toMPEG-TS - Streaming mode
HLS Directhas been migrated toHLS Segmenter- Content is now transcoded continuously; disable
Normalize VideoorNormalize Audioin the FFmpeg Profile to copy that stream instead
- Content is now transcoded continuously; disable
- Cached
ts-legacyandhls-directURLs continue to work, and stream through the next engine - FFmpeg Profiles with audio format
aac (latm)now useaac - FFmpeg Profiles with
V4l2m2mhardware acceleration now use software encoding - The next engine ignores these FFmpeg Profile settings:
Thread Count,Pad Mode, videoProfile, videoPreset,Allow B-Frames,VAAPI Display,QSV Extra Hardware FramesandNormalize Colors- These settings are now labeled
Legacy engine only
- These settings are now labeled
- The next engine ignores channel
Slug Seconds, so it is hidden for next channels - Playback troubleshooting now defaults to the next engine
- To roll back a channel, set
- Use ErsatzTV-ffmpeg
8.1.2-4in docker images, Windows packages and macOS packages- ErsatzTV-ffmpeg releases are now immutable; docker images pin them by digest
- Docker images no longer include
libfdk_aac; the built-inaacencoder is unchanged - macOS packages now include ffmpeg and ffprobe, so Homebrew ffmpeg is no longer needed
- On first start, existing macOS installs switch from their configured ffmpeg and ffprobe paths to the bundled builds
- The FFmpeg Version health check now applies to macOS
- Drop support for ARM32v7 docker and native versions
- Remove
av1video format from FFmpeg Profiles; it has not worked sincev25.7.1- Existing
av1FFmpeg Profiles have been migrated tohevc
- Existing
- Add
vprefix to docker version numbers; matching all other versions - Develop builds:
- Use expected upcoming version number in develop builds
- e.g. if latest release is
v26.10.0, develop builds will usev26.11.0
- e.g. if latest release is
- Show unreleased changelog notes on home page of develop builds
- Publish immutable develop builds to a separate new repository
- Use expected upcoming version number in develop builds
- Local libraries: use video stream duration instead of container duration for scheduling
- This fixes playback failures caused by e.g. embedded subtitles longer than the video itself
- Ask for confirmation before deep scanning a library or external collections
- Next engine:
- Improve watermark quality with VAAPI and QSV by avoiding an unnecessary lossy color conversion
- Optimize intermittent watermarks by converting the watermark image once instead of on every frame
- FFmpeg Profiles with
Normalize VideoorNormalize Audiodisabled now copy that stream; they were previously transcoded toh264/aac- Items that cannot be copied are transcoded using the profile's settings
- e.g. items with burned-in subtitles, still images, and source codecs that are not copied by default
h264/hevcvideo can be copied by default,aac/ac3/eac3/mp3audio can be copied by default- These items are transcoded without hardware acceleration; to use hardware acceleration, set
accelin a channel config overlay- e.g.
{"version":"https://ersatztv.org/channel/version/0.1.0","normalization":{"video":{"accel":"qsv"}}}
- e.g.
- Watermarks and graphics are not applied to copied video, matching the legacy engine
- Loudness normalization is never applied to copied audio
- Items that cannot be copied are transcoded using the profile's settings
- BREAKING: channel config overlays (
next/channel-config-overlays/default.jsonand{number}.jsonin ETV's config folder) must include"version": "https://ersatztv.org/channel/version/0.1.0"- Overlays without this version are rejected, and the channel will not start
- e.g.
{"version":"https://ersatztv.org/channel/version/0.1.0","fallback":{"show_error":false}} - Overlays that used
"format": nullto copy should use"mode": "copy"instead
Fixed
- Next engine:
- QSV: enable hardware acceleration on legacy Intel Media SDK devices on Windows (e.g. Haswell)
- Windows packages now include
libvpl.dll, which next engine uses to detect QSV capabilities - Find the runtime when the Intel GPU is not the primary display adapter, or when the runtime does not report a device ID
- Fix
Error synchronizing the operation: -17at the start of a stream - Fix
device failed (-17)fromvpp_qsvandoverlay_qsv
- Windows packages now include
- QSV: pad in software when the runtime cannot pad the current pixel format in hardware (e.g. 10-bit on legacy Media SDK runtimes)
- QSV: do not upload 10-bit frames to hardware on runtimes that cannot copy them (e.g. Haswell)
- QSV: fix
Cannot allocate memoryerror when using loudness normalization and the graphics engine - VideoToolbox: fix HEVC output bit depth not matching the FFmpeg Profile
- VideoToolbox: fix missing sample aspect ratio in H264 output
- NVIDIA: fix ffmpeg warning when CUDA and Vulkan are used together
- Fix AMD VAAPI hardware acceleration when FFmpeg Profile is configured with VAAPI Driver
Default - Fix performance regression with permanent and intermittent watermarks by overlaying them directly instead of using the graphics engine
- Fix watermark opacity having no effect on images without transparency (e.g. JPG)
- Fix subtitle selection preferring embedded text subtitles that have not been extracted
- These subtitles were selected over usable sidecar subtitles, and then dropped, leaving no subtitles
- The FFmpeg
Use Embedded Subtitlessetting is now respected by next engine channels
- Fix playback of audio-only content (e.g. audio files with embedded cover art), which now plays over a black background
- Fix image playback
- Fix image and remote stream duration
- Fix process signal handling to prevent orphaned processes
- When ErsatzTV exits unexpectedly (crash, killed), next engine channels now stop within a few seconds instead of running for up to 90 seconds
- When a next engine channel process is killed, its ffmpeg process now stops too (Linux and Windows)
- Stopping a next engine channel with
SIGTERMorSIGINTnow also stops its ffmpeg process
- Fix channels going permanently empty when content ends before its scheduled duration
- e.g. files with an embedded subtitle track that runs longer than the audio and video
- The rest of the scheduled time now plays the black/silence fallback
- Fix audio/video sync loss at the end of such content
- Fix timestamps restarting at zero between items when
ffprobeis not on the systemPATH - Ignore unextracted text subtitles when using custom stream selector
- Fix channel playback troubleshooting, which always used the legacy engine
- Channel troubleshooting plays 30 seconds from the selected time, including transitions between items and fallback filler for gaps
- Fix troubleshooting playback stopping before the end of the transcoded content
- QSV: enable hardware acceleration on legacy Intel Media SDK devices on Windows (e.g. Haswell)
- Improve performance of graphics engine subtitle elements
- Fix Jellyfin 12 shows that belong to a Jellyfin collection being replaced by the collection itself
- The collection would appear as a show, and the real show would be flagged as missing
- To repair affected libraries after updating:
- Scan the affected Jellyfin show libraries
- Empty the trash to remove the bogus collection shows
- Deep scan Jellyfin collections to restore collection search results
- Fix
Unified Dockerhealth check incorrectly warning about a deprecated docker tag on arm64 hardware using the default docker image - Fix bug where block schedules could skip and/or repeat items
- Fix songs changing their background ~40 seconds after joining a channel
- Fix troubleshooting playback to start exactly at the specified seek point (hls.js player often started a segment or two late)