slim-embedded-art: rewrite tags that are mostly padding
The final 47 oversized files held no big art and no big lyrics - just empty reserved space, up to 478 KB of padding against 39 bytes of frames, all in the DJ Sets tree. The player pages through padding like anything else. A tag past 200 KB total is rewritten regardless of what fills it; the save already zeroes padding.
This commit is contained in:
@@ -43,6 +43,11 @@ PROCESS_OVER = 100_000
|
|||||||
# McCourt's "Angela's Ashes" - 1.5 MB of memoir in an Eels track's USLT, courtesy of some tagger
|
# McCourt's "Angela's Ashes" - 1.5 MB of memoir in an Eels track's USLT, courtesy of some tagger
|
||||||
# malfunction - and AVPlayer pages through ALL of it before the first audio frame, art or not.
|
# malfunction - and AVPlayer pages through ALL of it before the first audio frame, art or not.
|
||||||
LYRICS_SANE = 50_000
|
LYRICS_SANE = 50_000
|
||||||
|
# The last 47 oversized files held no big art and no big lyrics - just PADDING: empty space some
|
||||||
|
# tagger reserved for future edits, up to 478 KB of it against 39 bytes of actual frames (the DJ
|
||||||
|
# Sets tree, 2026-08-29). The player pages through padding like anything else, so a tag this far
|
||||||
|
# past its content gets rewritten (the save already zeroes padding).
|
||||||
|
TAG_SANE = 200_000
|
||||||
|
|
||||||
|
|
||||||
def audio_region_hash(path, offset=None):
|
def audio_region_hash(path, offset=None):
|
||||||
@@ -125,13 +130,15 @@ def process(path, apply):
|
|||||||
pics = pictures(tag)
|
pics = pictures(tag)
|
||||||
total = sum(len(p.data) for p in pics)
|
total = sum(len(p.data) for p in pics)
|
||||||
junk_lyrics = [f for f in tag.getall("USLT") if len(f.text or "") > LYRICS_SANE]
|
junk_lyrics = [f for f in tag.getall("USLT") if len(f.text or "") > LYRICS_SANE]
|
||||||
if total <= PROCESS_OVER and not junk_lyrics:
|
bloated = tag.size > TAG_SANE
|
||||||
|
if total <= PROCESS_OVER and not junk_lyrics and not bloated:
|
||||||
return None
|
return None
|
||||||
largest = max(pics, key=lambda p: len(p.data)) if pics else None
|
largest = max(pics, key=lambda p: len(p.data)) if pics else None
|
||||||
if not apply:
|
if not apply:
|
||||||
parts = []
|
parts = []
|
||||||
if total > PROCESS_OVER: parts.append(f"{total // 1024} KB of art")
|
if total > PROCESS_OVER: parts.append(f"{total // 1024} KB of art")
|
||||||
if junk_lyrics: parts.append(f"{sum(len(f.text) for f in junk_lyrics) // 1024} KB of junk lyrics")
|
if junk_lyrics: parts.append(f"{sum(len(f.text) for f in junk_lyrics) // 1024} KB of junk lyrics")
|
||||||
|
if not parts and bloated: parts.append(f"{tag.size // 1024} KB tag of mostly padding")
|
||||||
return "would slim " + " + ".join(parts)
|
return "would slim " + " + ".join(parts)
|
||||||
|
|
||||||
before = audio_region_hash(path)
|
before = audio_region_hash(path)
|
||||||
|
|||||||
Reference in New Issue
Block a user