You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Is this a new issue that can be reproduced using the latest version?
This is a new issue that can be reproduced.
Which operating systems reproduce the issue?
Windows
Docker
Other
Version information.
OS Version: E.g. Windows 11 Pro 22H2.
Docker Version: Run docker --version.
Docker Image: E.g. latest, develop. PlexCleaner getversioninfo: Run PlexCleaner getversioninfo.
Steps to reproduce?
Summary
Issue #827 (closed, resolved in 3.21 via PR #833/#840) fixed the non-monotonic-DTS false positive for audio-stream DTS via a lossless setts bitstream rewrite. That issue's own investigation found the false positive is caused by ffmpeg reconstructing DTS from PTS during any -f null verify decode (Matroska stores no real per-frame video DTS), which can legitimately look non-monotonic for ordinary content — not actual corruption.
For video-stream DTS, the fix was deliberately not extended (per PR #840: rewriting video timestamps with setts would reorder B-frames and isn't safe), so those files still fall through to the full remux → re-encode → HandBrake-fallback cascade, and since the post-repair re-verify hits the exact same false positive, RepairAndReVerify() never returns Clean and the repair is always discarded (RepairFailed, VerifyFailed), no matter how many times it's retried.
In our case this makes the re-encode tier's success rate on affected files effectively 0% — every file that reaches it is guaranteed to fail, after burning anywhere from tens of minutes to multiple days of CPU (observed: an 11+ hour repair on a 1080p WEB-DL file, and a ~4 day repair on a 12.6GB 4K HDR file, both discarded at the end).
Scope of reproduction
Confirmed via a 202-file sweep of our library (mixed sources/encodes — DVDRip XviD, WEB-DL x264/x265, BluRay), running PlexCleaner's own quickscan verify command standalone: 42 files (~21%) hit this, including:
A freshly-downloaded 4K Dolby Vision/HDR10+ WEB-DL release, never previously touched by any tool.
Multiple different DVDRip XviD TV releases from different release groups.
Multiple different WEB-DL x264/x265 releases from different release groups.
Two independently redownloaded copies of the same title from different release groups, both hitting it on first-ever verify.
This rules out "one bad download" or "one bad release group" as the cause — it's a broad false positive independent of source.
Additional finding: not B-frame-reordering-tunable
The original hypothesis (from #827 and DtsInfo.cs's own comment) is that this is caused by B-frame reordering during decode. We tested whether forcing zero B-frames during the re-encode (-bf 0) avoids the false positive at the source, on a file already confirmed to trigger it:
Encoded a 60s clip with -bf 0 (confirmed via x265's own log: bframes: 0).
Re-ran the exact verify command (ffmpeg -f null -) against that output.
The warning still fired (419 times), even though the output has zero B-frames.
Inspecting the stored container timestamps (ffprobe ... packet=pts,dts) on that same output showed them strictly increasing and completely normal (video track time_base=1/1000).
So the false positive is not solely a B-frame-reordering artifact — it reproduces even on B-frame-free output. This looks more consistent with a rounding/precision collision: at 23.976fps (24000/1001), ~41.708ms frame intervals don't divide evenly into whatever internal time_base the -f null muxer path negotiates, so two consecutive reconstructed timestamps occasionally round to the same integer and register as "non-monotonic" (equal, not decreasing). If that's correct, this isn't something an encoder setting can dodge — it may affect most/all 23.976fps content that goes through this verify path, not just B-frame-heavy content.
Ask
Given the video-DTS case can't reliably distinguish false positive from real corruption (per #827's own findings — most affected files play back perfectly), and per-title FileIgnoreList/disabling AutoRepair are the only current workarounds (both just suppress repair attempts rather than fix classification), would you consider one of:
Or, if there's a way to make the verify check itself more robust for this container/framerate combination (e.g. a different internal time_base, or an explicit tolerance for single-frame-duration collisions) — happy to help test any candidate change against our corpus of confirmed-affected files.
Happy to share the specific reproduction commands/files if useful.
Is this a new issue that can be reproduced using the latest version?
Which operating systems reproduce the issue?
Version information.
OS Version: E.g. Windows 11 Pro 22H2.
Docker Version: Run
docker --version.Docker Image: E.g.
latest,develop.PlexCleaner getversioninfo: RunPlexCleaner getversioninfo.Steps to reproduce?
Summary
Issue #827 (closed, resolved in 3.21 via PR #833/#840) fixed the non-monotonic-DTS false positive for audio-stream DTS via a lossless
settsbitstream rewrite. That issue's own investigation found the false positive is caused by ffmpeg reconstructing DTS from PTS during any-f nullverify decode (Matroska stores no real per-frame video DTS), which can legitimately look non-monotonic for ordinary content — not actual corruption.For video-stream DTS, the fix was deliberately not extended (per PR #840: rewriting video timestamps with
settswould reorder B-frames and isn't safe), so those files still fall through to the full remux → re-encode → HandBrake-fallback cascade, and since the post-repair re-verify hits the exact same false positive,RepairAndReVerify()never returnsCleanand the repair is always discarded (RepairFailed, VerifyFailed), no matter how many times it's retried.In our case this makes the re-encode tier's success rate on affected files effectively 0% — every file that reaches it is guaranteed to fail, after burning anywhere from tens of minutes to multiple days of CPU (observed: an 11+ hour repair on a 1080p WEB-DL file, and a ~4 day repair on a 12.6GB 4K HDR file, both discarded at the end).
Scope of reproduction
Confirmed via a 202-file sweep of our library (mixed sources/encodes — DVDRip XviD, WEB-DL x264/x265, BluRay), running PlexCleaner's own quickscan verify command standalone: 42 files (~21%) hit this, including:
This rules out "one bad download" or "one bad release group" as the cause — it's a broad false positive independent of source.
Additional finding: not B-frame-reordering-tunable
The original hypothesis (from #827 and
DtsInfo.cs's own comment) is that this is caused by B-frame reordering during decode. We tested whether forcing zero B-frames during the re-encode (-bf 0) avoids the false positive at the source, on a file already confirmed to trigger it:-bf 0(confirmed via x265's own log:bframes: 0).ffmpeg -f null -) against that output.ffprobe ... packet=pts,dts) on that same output showed them strictly increasing and completely normal (video tracktime_base=1/1000).So the false positive is not solely a B-frame-reordering artifact — it reproduces even on B-frame-free output. This looks more consistent with a rounding/precision collision: at 23.976fps (24000/1001), ~41.708ms frame intervals don't divide evenly into whatever internal time_base the
-f nullmuxer path negotiates, so two consecutive reconstructed timestamps occasionally round to the same integer and register as "non-monotonic" (equal, not decreasing). If that's correct, this isn't something an encoder setting can dodge — it may affect most/all 23.976fps content that goes through this verify path, not just B-frame-heavy content.Ask
Given the video-DTS case can't reliably distinguish false positive from real corruption (per #827's own findings — most affected files play back perfectly), and per-title
FileIgnoreList/disablingAutoRepairare the only current workarounds (both just suppress repair attempts rather than fix classification), would you consider one of:Happy to share the specific reproduction commands/files if useful.
Commandline.
Relevant log output.
Settings file.
Log file.
No response
Media file information.