Release Notes
Added
- Next engine:
- Properly rotate content that contains orientation metadata (e.g. from phones)
- Add
mpeg2video encoder support (software, some Intel QSV and Intel VAAPI devices)
- Add song playback support, using legacy-generated background image and text
- Song Video Mode
With Progress is not supported yet; these songs play without a progress bar
- Add
Deep Scan Library button 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
- Use ErsatzTV-ffmpeg
8.1.2-4 in 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-in aac encoder 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
av1 video format from FFmpeg Profiles; it has not worked since v25.7.1
- Existing
av1 FFmpeg Profiles have been migrated to hevc
- Add
v prefix 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 use v26.11.0
- Show unreleased changelog notes on home page of develop builds
- Publish immutable develop builds to a separate new repository
- 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 Video or Normalize Audio disabled now copy that stream; they were previously transcoded to h264 / 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 / hevc video can be copied by default, aac / ac3 / eac3 / mp3 audio can be copied by default
- These items are transcoded without hardware acceleration; to use hardware acceleration, set
accel in a channel config overlay
- e.g.
{"version":"https://ersatztv.org/channel/version/0.1.0","normalization":{"video":{"accel":"qsv"}}}
- Watermarks and graphics are not applied to copied video, matching the legacy engine
- Loudness normalization is never applied to copied audio
- BREAKING: channel config overlays (
next/channel-config-overlays/default.json and {number}.json in 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": null to 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: -17 at the start of a stream
- Fix
device failed (-17) from vpp_qsv and overlay_qsv
- 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 memory error 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 Subtitles setting 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
SIGTERM or SIGINT now 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
ffprobe is not on the system PATH
- 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 Docker health 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)
Full changes: https://github.com/ErsatzTV/legacy/compare/v26.10.0...007b3415