fix(v5): 5.6.1 — Untertitel-Spuren wieder erkannt: Stream-Typ per Code (6203), nicht per lokalisiertem Wort

Commander-Fund 03.09.2026 (Digimon Adventure: Last Evolution Kizuna): im
Auswahl-Dialog fehlten die UNTERTITEL-Chips. Gemessen mit makemkvcon64 -r
info auf diesem PC: MakeMKV schreibt den Stream-Typ in seiner Anzeigesprache
("Untertitel"), der Parser prüfte auf "Subtitles" (Messung vom 26.07. an
einem englischen MakeMKV). "Audio" heißt zufällig gleich, deshalb fiel nur
der Untertitel-Weg aus. Jetzt entscheidet der Typ-Code im vierten Feld
(6201 Video, 6202 Audio, 6203 Untertitel); das Wort bleibt Notnagel.

Test rip-parser-561 mit den gemessenen Zeilen (deu×2/jpn×2 Ton, deu×3
Untertitel, darunter "PGS German (nur erzwungene)"); die volle Messung
liegt unter beweise/messungen/2026-09-03-makemkvcon-info-kizuna.txt.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-09-03 19:40:22 +02:00
co-authored by Claude Fable 5.1
parent 8f671ff160
commit 687173430c
17 changed files with 484 additions and 10 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 290 KiB

After

Width:  |  Height:  |  Size: 290 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 163 KiB

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 340 KiB

After

Width:  |  Height:  |  Size: 341 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 711 KiB

After

Width:  |  Height:  |  Size: 711 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 712 KiB

After

Width:  |  Height:  |  Size: 712 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 749 KiB

After

Width:  |  Height:  |  Size: 750 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 341 KiB

After

Width:  |  Height:  |  Size: 342 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 465 KiB

After

Width:  |  Height:  |  Size: 465 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 458 KiB

After

Width:  |  Height:  |  Size: 456 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 447 KiB

After

Width:  |  Height:  |  Size: 438 KiB

@@ -0,0 +1,375 @@
MSG:1005,0,1,"MakeMKV v1.18.4 win(x64-release) gestartet","%1 gestartet","MakeMKV v1.18.4 win(x64-release)"
DRV:0,2,999,12,"BD-RE HL-DT-ST BD-RE BU40N 1.03 MOBPBDF1840","DA_LAST EVOLUTION KIZUNA","G:"
DRV:1,256,999,0,"","",""
DRV:2,256,999,0,"","",""
DRV:3,256,999,0,"","",""
DRV:4,256,999,0,"","",""
DRV:5,256,999,0,"","",""
DRV:6,256,999,0,"","",""
DRV:7,256,999,0,"","",""
DRV:8,256,999,0,"","",""
DRV:9,256,999,0,"","",""
DRV:10,256,999,0,"","",""
DRV:11,256,999,0,"","",""
DRV:12,256,999,0,"","",""
DRV:13,256,999,0,"","",""
DRV:14,256,999,0,"","",""
DRV:15,256,999,0,"","",""
MSG:1011,0,1,"Using LibreDrive mode (v06.3 id=866A98CB9C4E)","%1","Using LibreDrive mode (v06.3 id=866A98CB9C4E)"
MSG:3007,0,0,"Direkter Zugriffsmodus wird verwendet","Direkter Zugriffsmodus wird verwendet"
MSG:5054,0,1,"Evaluierungsversion. Der Testzeitraum lief vor 10 Tagen ab.","Evaluierungsversion. Der Testzeitraum lief vor %1 Tagen ab.","10"
MSG:5051,1028,0,"Der Testzeitraum ist abgelaufen. Erwerben Sie bitte einen Aktivierungsschlüssel, wenn Sie das Programm nützlich fanden. Sie können den vollen Funktionsumfang noch einige Tage nutzen.","Der Testzeitraum ist abgelaufen. Erwerben Sie bitte einen Aktivierungsschlüssel, wenn Sie das Programm nützlich fanden. Sie können den vollen Funktionsumfang noch einige Tage nutzen."
MSG:5085,0,0,"Inhalte-Hashtabelle geladen, überprüfe Integrität der M2TS-Dateien.","Inhalte-Hashtabelle geladen, überprüfe Integrität der M2TS-Dateien."
MSG:3307,16777216,2,"Datei 00011.mpls wurde als Titel 0 hinzugefügt ","Datei %1 wurde als Titel %2 hinzugefügt ","00011.mpls","0"
MSG:3025,0,3,"Titel #00000.mpls hat eine Länge von 41 Sekunden und wurde übersprungen, da die minimale Titellänge 120 Sekunden beträgt","Titel #%1 hat eine Länge von %2 Sekunden und wurde übersprungen, da die minimale Titellänge %3 Sekunden beträgt","00000.mpls","41","120"
MSG:3307,16777216,2,"Datei 00003.mpls wurde als Titel 1 hinzugefügt ","Datei %1 wurde als Titel %2 hinzugefügt ","00003.mpls","1"
MSG:3025,16777216,3,"Titel #00005.m2ts hat eine Länge von 93 Sekunden und wurde übersprungen, da die minimale Titellänge 120 Sekunden beträgt","Titel #%1 hat eine Länge von %2 Sekunden und wurde übersprungen, da die minimale Titellänge %3 Sekunden beträgt","00005.m2ts","93","120"
MSG:3025,16777216,3,"Titel #00004.m2ts hat eine Länge von 98 Sekunden und wurde übersprungen, da die minimale Titellänge 120 Sekunden beträgt","Titel #%1 hat eine Länge von %2 Sekunden und wurde übersprungen, da die minimale Titellänge %3 Sekunden beträgt","00004.m2ts","98","120"
MSG:3025,16777216,3,"Titel #00015.m2ts hat eine Länge von 10 Sekunden und wurde übersprungen, da die minimale Titellänge 120 Sekunden beträgt","Titel #%1 hat eine Länge von %2 Sekunden und wurde übersprungen, da die minimale Titellänge %3 Sekunden beträgt","00015.m2ts","10","120"
MSG:3025,16777216,3,"Titel #00003.m2ts hat eine Länge von 7 Sekunden und wurde übersprungen, da die minimale Titellänge 120 Sekunden beträgt","Titel #%1 hat eine Länge von %2 Sekunden und wurde übersprungen, da die minimale Titellänge %3 Sekunden beträgt","00003.m2ts","7","120"
MSG:3025,16777216,3,"Titel #00002.m2ts hat eine Länge von 18 Sekunden und wurde übersprungen, da die minimale Titellänge 120 Sekunden beträgt","Titel #%1 hat eine Länge von %2 Sekunden und wurde übersprungen, da die minimale Titellänge %3 Sekunden beträgt","00002.m2ts","18","120"
MSG:3025,16777216,3,"Titel #00001.m2ts hat eine Länge von 7 Sekunden und wurde übersprungen, da die minimale Titellänge 120 Sekunden beträgt","Titel #%1 hat eine Länge von %2 Sekunden und wurde übersprungen, da die minimale Titellänge %3 Sekunden beträgt","00001.m2ts","7","120"
MSG:3025,16777216,3,"Titel #00000.m2ts hat eine Länge von 8 Sekunden und wurde übersprungen, da die minimale Titellänge 120 Sekunden beträgt","Titel #%1 hat eine Länge von %2 Sekunden und wurde übersprungen, da die minimale Titellänge %3 Sekunden beträgt","00000.m2ts","8","120"
MSG:3025,16777216,3,"Titel #00014.m2ts hat eine Länge von 107 Sekunden und wurde übersprungen, da die minimale Titellänge 120 Sekunden beträgt","Titel #%1 hat eine Länge von %2 Sekunden und wurde übersprungen, da die minimale Titellänge %3 Sekunden beträgt","00014.m2ts","107","120"
MSG:3025,16777216,3,"Titel #00013.m2ts hat eine Länge von 63 Sekunden und wurde übersprungen, da die minimale Titellänge 120 Sekunden beträgt","Titel #%1 hat eine Länge von %2 Sekunden und wurde übersprungen, da die minimale Titellänge %3 Sekunden beträgt","00013.m2ts","63","120"
MSG:3025,16777216,3,"Titel #00012.m2ts hat eine Länge von 93 Sekunden und wurde übersprungen, da die minimale Titellänge 120 Sekunden beträgt","Titel #%1 hat eine Länge von %2 Sekunden und wurde übersprungen, da die minimale Titellänge %3 Sekunden beträgt","00012.m2ts","93","120"
MSG:3025,16777216,3,"Titel #00011.m2ts hat eine Länge von 78 Sekunden und wurde übersprungen, da die minimale Titellänge 120 Sekunden beträgt","Titel #%1 hat eine Länge von %2 Sekunden und wurde übersprungen, da die minimale Titellänge %3 Sekunden beträgt","00011.m2ts","78","120"
MSG:3025,16777216,3,"Titel #00010.m2ts hat eine Länge von 89 Sekunden und wurde übersprungen, da die minimale Titellänge 120 Sekunden beträgt","Titel #%1 hat eine Länge von %2 Sekunden und wurde übersprungen, da die minimale Titellänge %3 Sekunden beträgt","00010.m2ts","89","120"
MSG:3025,16777216,3,"Titel #00009.m2ts hat eine Länge von 98 Sekunden und wurde übersprungen, da die minimale Titellänge 120 Sekunden beträgt","Titel #%1 hat eine Länge von %2 Sekunden und wurde übersprungen, da die minimale Titellänge %3 Sekunden beträgt","00009.m2ts","98","120"
MSG:3025,0,3,"Titel #00008.m2ts hat eine Länge von 95 Sekunden und wurde übersprungen, da die minimale Titellänge 120 Sekunden beträgt","Titel #%1 hat eine Länge von %2 Sekunden und wurde übersprungen, da die minimale Titellänge %3 Sekunden beträgt","00008.m2ts","95","120"
MSG:5011,0,0,"Die Aufgabe wurde erfolgreich abgeschlossen","Die Aufgabe wurde erfolgreich abgeschlossen"
TCOUNT:2
CINFO:1,6209,"Blu-ray-Disk"
CINFO:2,0,"Digimon Adventure: Last Evolution Kizuna"
CINFO:28,0,"eng"
CINFO:29,0,"English"
CINFO:30,0,"Digimon Adventure: Last Evolution Kizuna"
CINFO:31,6119,"<b>Quelleninformationen</b><br>"
CINFO:32,0,"DA_LAST EVOLUTION KIZUNA"
CINFO:33,0,"0"
TINFO:0,2,0,"Digimon Adventure: Last Evolution Kizuna"
TINFO:0,8,0,"6"
TINFO:0,9,0,"0:08:51"
TINFO:0,10,0,"1.1 GB"
TINFO:0,11,0,"1219086336"
TINFO:0,16,0,"00011.mpls"
TINFO:0,25,0,"6"
TINFO:0,26,0,"9,10,11,12,13,14"
TINFO:0,27,0,"Digimon Adventure- Last Evolution Kizuna_t00.mkv"
TINFO:0,28,0,"eng"
TINFO:0,29,0,"English"
TINFO:0,30,0,"Digimon Adventure: Last Evolution Kizuna - 6 Kapitel , 1.1 GB"
TINFO:0,31,6120,"<b>Titelinformationen</b><br>"
TINFO:0,33,0,"0"
SINFO:0,0,1,6201,"Video"
SINFO:0,0,5,0,"V_MPEG4/ISO/AVC"
SINFO:0,0,6,0,"Mpeg4"
SINFO:0,0,7,0,"Mpeg4 AVC High@L4.1"
SINFO:0,0,19,0,"1920x1080"
SINFO:0,0,20,0,"16:9"
SINFO:0,0,21,0,"23.976 (24000/1001)"
SINFO:0,0,22,0,"0"
SINFO:0,0,28,0,"eng"
SINFO:0,0,29,0,"English"
SINFO:0,0,30,0,"Mpeg4 AVC High@L4.1"
SINFO:0,0,31,6121,"<b>Spurinformationen</b><br>"
SINFO:0,0,33,0,"0"
SINFO:0,0,38,0,""
SINFO:0,0,42,5088,"( Lossless conversion )"
SINFO:0,1,1,6202,"Audio"
SINFO:0,1,2,5091,"Stereo"
SINFO:0,1,3,0,"deu"
SINFO:0,1,4,0,"German"
SINFO:0,1,5,0,"A_DTS"
SINFO:0,1,6,0,"DTS-HD MA"
SINFO:0,1,7,0,"DTS-HD Master Audio"
SINFO:0,1,14,0,"2"
SINFO:0,1,17,0,"48000"
SINFO:0,1,18,0,"16"
SINFO:0,1,22,0,"1024"
SINFO:0,1,28,0,"eng"
SINFO:0,1,29,0,"English"
SINFO:0,1,30,0,"DTS-HD MA Stereo German"
SINFO:0,1,31,6121,"<b>Spurinformationen</b><br>"
SINFO:0,1,33,0,"100"
SINFO:0,1,38,0,""
SINFO:0,1,40,0,"stereo"
SINFO:0,1,42,5088,"( Lossless conversion )"
SINFO:0,2,1,6202,"Audio"
SINFO:0,2,2,5091,"Stereo"
SINFO:0,2,3,0,"deu"
SINFO:0,2,4,0,"German"
SINFO:0,2,5,0,"A_DTS"
SINFO:0,2,6,0,"DTS"
SINFO:0,2,7,0,"DTS"
SINFO:0,2,13,0,"768 Kb/s"
SINFO:0,2,14,0,"2"
SINFO:0,2,17,0,"48000"
SINFO:0,2,22,0,"2304"
SINFO:0,2,28,0,"eng"
SINFO:0,2,29,0,"English"
SINFO:0,2,30,0,"DTS Stereo German"
SINFO:0,2,31,6121,"<b>Spurinformationen</b><br>"
SINFO:0,2,33,0,"100"
SINFO:0,2,38,0,"d"
SINFO:0,2,39,0,"Default"
SINFO:0,2,40,0,"stereo"
SINFO:0,2,42,5088,"( Lossless conversion )"
SINFO:0,3,1,6202,"Audio"
SINFO:0,3,2,5091,"Stereo"
SINFO:0,3,3,0,"deu"
SINFO:0,3,4,0,"German"
SINFO:0,3,5,0,"A_DTS"
SINFO:0,3,6,0,"DTS-HD MA"
SINFO:0,3,7,0,"DTS-HD Master Audio"
SINFO:0,3,14,0,"2"
SINFO:0,3,17,0,"48000"
SINFO:0,3,18,0,"16"
SINFO:0,3,22,0,"1024"
SINFO:0,3,28,0,"eng"
SINFO:0,3,29,0,"English"
SINFO:0,3,30,0,"DTS-HD MA Stereo German"
SINFO:0,3,31,6121,"<b>Spurinformationen</b><br>"
SINFO:0,3,33,0,"100"
SINFO:0,3,38,0,""
SINFO:0,3,40,0,"stereo"
SINFO:0,3,42,5088,"( Lossless conversion )"
SINFO:0,4,1,6202,"Audio"
SINFO:0,4,2,5091,"Stereo"
SINFO:0,4,3,0,"deu"
SINFO:0,4,4,0,"German"
SINFO:0,4,5,0,"A_DTS"
SINFO:0,4,6,0,"DTS"
SINFO:0,4,7,0,"DTS"
SINFO:0,4,13,0,"768 Kb/s"
SINFO:0,4,14,0,"2"
SINFO:0,4,17,0,"48000"
SINFO:0,4,22,0,"2304"
SINFO:0,4,28,0,"eng"
SINFO:0,4,29,0,"English"
SINFO:0,4,30,0,"DTS Stereo German"
SINFO:0,4,31,6121,"<b>Spurinformationen</b><br>"
SINFO:0,4,33,0,"100"
SINFO:0,4,38,0,""
SINFO:0,4,40,0,"stereo"
SINFO:0,4,42,5088,"( Lossless conversion )"
SINFO:0,5,1,6203,"Untertitel"
SINFO:0,5,3,0,"deu"
SINFO:0,5,4,0,"German"
SINFO:0,5,5,0,"S_HDMV/PGS"
SINFO:0,5,6,0,"PGS"
SINFO:0,5,7,0,"HDMV PGS Subtitles"
SINFO:0,5,22,0,"0"
SINFO:0,5,28,0,"eng"
SINFO:0,5,29,0,"English"
SINFO:0,5,30,0,"PGS German"
SINFO:0,5,31,6121,"<b>Spurinformationen</b><br>"
SINFO:0,5,33,0,"100"
SINFO:0,5,38,0,""
SINFO:0,5,42,5088,"( Lossless conversion )"
SINFO:0,6,1,6203,"Untertitel"
SINFO:0,6,3,0,"deu"
SINFO:0,6,4,0,"German"
SINFO:0,6,5,0,"S_HDMV/PGS"
SINFO:0,6,6,0,"PGS"
SINFO:0,6,7,0,"HDMV PGS Subtitles"
SINFO:0,6,22,0,"6144"
SINFO:0,6,28,0,"eng"
SINFO:0,6,29,0,"English"
SINFO:0,6,30,0,"PGS German (nur erzwungene)"
SINFO:0,6,31,6121,"<b>Spurinformationen</b><br>"
SINFO:0,6,33,0,"100"
SINFO:0,6,38,0,"d"
SINFO:0,6,39,0,"Default"
SINFO:0,6,42,5088,"( Lossless conversion )"
SINFO:0,7,1,6203,"Untertitel"
SINFO:0,7,3,0,"deu"
SINFO:0,7,4,0,"German"
SINFO:0,7,5,0,"S_HDMV/PGS"
SINFO:0,7,6,0,"PGS"
SINFO:0,7,7,0,"HDMV PGS Subtitles"
SINFO:0,7,22,0,"0"
SINFO:0,7,28,0,"eng"
SINFO:0,7,29,0,"English"
SINFO:0,7,30,0,"PGS German"
SINFO:0,7,31,6121,"<b>Spurinformationen</b><br>"
SINFO:0,7,33,0,"100"
SINFO:0,7,38,0,""
SINFO:0,7,42,5088,"( Lossless conversion )"
SINFO:0,8,1,6203,"Untertitel"
SINFO:0,8,3,0,"deu"
SINFO:0,8,4,0,"German"
SINFO:0,8,5,0,"S_HDMV/PGS"
SINFO:0,8,6,0,"PGS"
SINFO:0,8,7,0,"HDMV PGS Subtitles"
SINFO:0,8,22,0,"6144"
SINFO:0,8,28,0,"eng"
SINFO:0,8,29,0,"English"
SINFO:0,8,30,0,"PGS German (nur erzwungene)"
SINFO:0,8,31,6121,"<b>Spurinformationen</b><br>"
SINFO:0,8,33,0,"100"
SINFO:0,8,38,0,""
SINFO:0,8,42,5088,"( Lossless conversion )"
TINFO:1,2,0,"Digimon Adventure: Last Evolution Kizuna"
TINFO:1,8,0,"13"
TINFO:1,9,0,"1:34:45"
TINFO:1,10,0,"16.4 GB"
TINFO:1,11,0,"17668571136"
TINFO:1,16,0,"00003.mpls"
TINFO:1,25,0,"1"
TINFO:1,26,0,"7"
TINFO:1,27,0,"Digimon Adventure- Last Evolution Kizuna_t01.mkv"
TINFO:1,28,0,"eng"
TINFO:1,29,0,"English"
TINFO:1,30,0,"Digimon Adventure: Last Evolution Kizuna - 13 Kapitel , 16.4 GB"
TINFO:1,31,6120,"<b>Titelinformationen</b><br>"
TINFO:1,33,0,"0"
SINFO:1,0,1,6201,"Video"
SINFO:1,0,5,0,"V_MPEG4/ISO/AVC"
SINFO:1,0,6,0,"Mpeg4"
SINFO:1,0,7,0,"Mpeg4 AVC High@L4.1"
SINFO:1,0,19,0,"1920x1080"
SINFO:1,0,20,0,"16:9"
SINFO:1,0,21,0,"23.976 (24000/1001)"
SINFO:1,0,22,0,"0"
SINFO:1,0,28,0,"eng"
SINFO:1,0,29,0,"English"
SINFO:1,0,30,0,"Mpeg4 AVC High@L4.1"
SINFO:1,0,31,6121,"<b>Spurinformationen</b><br>"
SINFO:1,0,33,0,"0"
SINFO:1,0,38,0,""
SINFO:1,0,42,5088,"( Lossless conversion )"
SINFO:1,1,1,6202,"Audio"
SINFO:1,1,2,0,"Surround 5.1"
SINFO:1,1,3,0,"deu"
SINFO:1,1,4,0,"German"
SINFO:1,1,5,0,"A_DTS"
SINFO:1,1,6,0,"DTS-HD MA"
SINFO:1,1,7,0,"DTS-HD Master Audio"
SINFO:1,1,14,0,"6"
SINFO:1,1,17,0,"48000"
SINFO:1,1,18,0,"16"
SINFO:1,1,22,0,"1024"
SINFO:1,1,28,0,"eng"
SINFO:1,1,29,0,"English"
SINFO:1,1,30,0,"DTS-HD MA Surround 5.1 German"
SINFO:1,1,31,6121,"<b>Spurinformationen</b><br>"
SINFO:1,1,33,0,"100"
SINFO:1,1,38,0,""
SINFO:1,1,40,0,"5.1(side)"
SINFO:1,1,42,5088,"( Lossless conversion )"
SINFO:1,2,1,6202,"Audio"
SINFO:1,2,2,0,"Surround 5.1"
SINFO:1,2,3,0,"deu"
SINFO:1,2,4,0,"German"
SINFO:1,2,5,0,"A_DTS"
SINFO:1,2,6,0,"DTS"
SINFO:1,2,7,0,"DTS"
SINFO:1,2,13,0,"1.5 Mb/s"
SINFO:1,2,14,0,"6"
SINFO:1,2,17,0,"48000"
SINFO:1,2,22,0,"2304"
SINFO:1,2,28,0,"eng"
SINFO:1,2,29,0,"English"
SINFO:1,2,30,0,"DTS Surround 5.1 German"
SINFO:1,2,31,6121,"<b>Spurinformationen</b><br>"
SINFO:1,2,33,0,"100"
SINFO:1,2,38,0,"d"
SINFO:1,2,39,0,"Default"
SINFO:1,2,40,0,"5.1(side)"
SINFO:1,2,42,5088,"( Lossless conversion )"
SINFO:1,3,1,6202,"Audio"
SINFO:1,3,2,5091,"Stereo"
SINFO:1,3,3,0,"jpn"
SINFO:1,3,4,0,"Japanese"
SINFO:1,3,5,0,"A_DTS"
SINFO:1,3,6,0,"DTS-HD MA"
SINFO:1,3,7,0,"DTS-HD Master Audio"
SINFO:1,3,14,0,"2"
SINFO:1,3,17,0,"48000"
SINFO:1,3,18,0,"16"
SINFO:1,3,22,0,"1024"
SINFO:1,3,28,0,"eng"
SINFO:1,3,29,0,"English"
SINFO:1,3,30,0,"DTS-HD MA Stereo Japanese"
SINFO:1,3,31,6121,"<b>Spurinformationen</b><br>"
SINFO:1,3,33,0,"100"
SINFO:1,3,38,0,""
SINFO:1,3,40,0,"stereo"
SINFO:1,3,42,5088,"( Lossless conversion )"
SINFO:1,4,1,6202,"Audio"
SINFO:1,4,2,5091,"Stereo"
SINFO:1,4,3,0,"jpn"
SINFO:1,4,4,0,"Japanese"
SINFO:1,4,5,0,"A_DTS"
SINFO:1,4,6,0,"DTS"
SINFO:1,4,7,0,"DTS"
SINFO:1,4,13,0,"768 Kb/s"
SINFO:1,4,14,0,"2"
SINFO:1,4,17,0,"48000"
SINFO:1,4,22,0,"2304"
SINFO:1,4,28,0,"eng"
SINFO:1,4,29,0,"English"
SINFO:1,4,30,0,"DTS Stereo Japanese"
SINFO:1,4,31,6121,"<b>Spurinformationen</b><br>"
SINFO:1,4,33,0,"100"
SINFO:1,4,38,0,""
SINFO:1,4,40,0,"stereo"
SINFO:1,4,42,5088,"( Lossless conversion )"
SINFO:1,5,1,6203,"Untertitel"
SINFO:1,5,3,0,"deu"
SINFO:1,5,4,0,"German"
SINFO:1,5,5,0,"S_HDMV/PGS"
SINFO:1,5,6,0,"PGS"
SINFO:1,5,7,0,"HDMV PGS Subtitles"
SINFO:1,5,22,0,"0"
SINFO:1,5,28,0,"eng"
SINFO:1,5,29,0,"English"
SINFO:1,5,30,0,"PGS German"
SINFO:1,5,31,6121,"<b>Spurinformationen</b><br>"
SINFO:1,5,33,0,"100"
SINFO:1,5,38,0,""
SINFO:1,5,42,5088,"( Lossless conversion )"
SINFO:1,6,1,6203,"Untertitel"
SINFO:1,6,3,0,"deu"
SINFO:1,6,4,0,"German"
SINFO:1,6,5,0,"S_HDMV/PGS"
SINFO:1,6,6,0,"PGS"
SINFO:1,6,7,0,"HDMV PGS Subtitles"
SINFO:1,6,22,0,"6144"
SINFO:1,6,28,0,"eng"
SINFO:1,6,29,0,"English"
SINFO:1,6,30,0,"PGS German (nur erzwungene)"
SINFO:1,6,31,6121,"<b>Spurinformationen</b><br>"
SINFO:1,6,33,0,"100"
SINFO:1,6,38,0,"d"
SINFO:1,6,39,0,"Default"
SINFO:1,6,42,5088,"( Lossless conversion )"
SINFO:1,7,1,6203,"Untertitel"
SINFO:1,7,3,0,"deu"
SINFO:1,7,4,0,"German"
SINFO:1,7,5,0,"S_HDMV/PGS"
SINFO:1,7,6,0,"PGS"
SINFO:1,7,7,0,"HDMV PGS Subtitles"
SINFO:1,7,22,0,"0"
SINFO:1,7,28,0,"eng"
SINFO:1,7,29,0,"English"
SINFO:1,7,30,0,"PGS German"
SINFO:1,7,31,6121,"<b>Spurinformationen</b><br>"
SINFO:1,7,33,0,"100"
SINFO:1,7,38,0,""
SINFO:1,7,42,5088,"( Lossless conversion )"
SINFO:1,8,1,6203,"Untertitel"
SINFO:1,8,3,0,"deu"
SINFO:1,8,4,0,"German"
SINFO:1,8,5,0,"S_HDMV/PGS"
SINFO:1,8,6,0,"PGS"
SINFO:1,8,7,0,"HDMV PGS Subtitles"
SINFO:1,8,22,0,"6144"
SINFO:1,8,28,0,"eng"
SINFO:1,8,29,0,"English"
SINFO:1,8,30,0,"PGS German (nur erzwungene)"
SINFO:1,8,31,6121,"<b>Spurinformationen</b><br>"
SINFO:1,8,33,0,"100"
SINFO:1,8,38,0,""
SINFO:1,8,42,5088,"( Lossless conversion )"
+12
View File
@@ -1,3 +1,15 @@
Version 5.6.1
Untertitel-Spuren werden wieder erkannt.
MakeMKV schreibt den Typ eines Streams in seiner Anzeigesprache - auf einem
deutsch eingestellten MakeMKV "Untertitel" statt "Subtitles". Rippy prueft
seit 5.4.0 auf das englische Wort und fand deshalb keine Untertitel mehr
(Ton heisst in beiden Sprachen "Audio", darum fiel es dort nicht auf).
Jetzt zaehlt der Typ-Code (6202 Ton, 6203 Untertitel), der ist
sprachunabhaengig. Gemessen an der Blu-ray "Digimon Adventure: Last
Evolution Kizuna": drei deutsche PGS-Spuren, darunter eine nur fuer
erzwungene Untertitel.
Version 5.6.0
Mehrere Filme auf einer Disc.
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "rippy",
"version": "5.6.0",
"version": "5.6.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "rippy",
"version": "5.6.0",
"version": "5.6.1",
"license": "UNLICENSED",
"dependencies": {
"electron-updater": "^6.8.9",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "rippy",
"productName": "Rippy",
"version": "5.6.0",
"version": "5.6.1",
"description": "Rippy v5 — Disc-Ripping als eigenständiges Windows-Programm (KONZEPT-WINDOWS.md)",
"main": "out/haupt/index.js",
"author": "KrBrZ",
+24 -7
View File
@@ -114,9 +114,21 @@ export function parseTitelInfo(ausgabe: string): TitelInfo[] {
// ⚠️ Die Sprache steht in 3/4 — NICHT in 28/29: Die tragen auf JEDEM
// Stream „eng"/„English" (MakeMKVs Anzeigesprache). Wer 28 nimmt, hält
// jede Disc für englisch.
// ⚠️ 5.6.1 (Commander-Fund 03.09.2026, Digimon Last Evolution Kizuna): Auch
// der TEXT von Attribut 1 ist MakeMKVs Anzeigesprache — deutsch eingestellt
// schreibt es `SINFO:1,5,1,6203,"Untertitel"`, nicht „Subtitles". „Audio"
// heißt zufällig in beiden Sprachen gleich, deshalb fehlten NUR die
// Untertitel. Verlässlich ist der CODE im vierten Feld: 6201 Video,
// 6202 Audio, 6203 Untertitel (gemessen an makemkvcon64 auf diesem PC).
export const STREAM_CODE_VIDEO = 6201
export const STREAM_CODE_AUDIO = 6202
export const STREAM_CODE_UNTERTITEL = 6203
export interface StreamInfo {
nr: number
typ: string
/** Typ-Code aus Attribut 1 (6201/6202/6203), 0 wenn keiner dastand. */
typCode: number
lang: string
sprache: string
codec: string
@@ -129,7 +141,7 @@ export interface TitelStreams {
untertitel: StreamInfo[]
}
const SINFO_ZEILE = /^SINFO:(\d+),(\d+),(\d+),\d+,"(.*)"\s*$/
const SINFO_ZEILE = /^SINFO:(\d+),(\d+),(\d+),(\d+),"(.*)"\s*$/
export function parseStreamInfo(ausgabe: string): Map<number, TitelStreams> {
const titel = new Map<number, Map<number, StreamInfo>>()
@@ -139,7 +151,8 @@ export function parseStreamInfo(ausgabe: string): Map<number, TitelStreams> {
const tNr = Number(treffer[1])
const sNr = Number(treffer[2])
const attr = Number(treffer[3])
const wert = treffer[4]
const code = Number(treffer[4])
const wert = treffer[5]
let streams = titel.get(tNr)
if (streams === undefined) {
streams = new Map()
@@ -147,10 +160,13 @@ export function parseStreamInfo(ausgabe: string): Map<number, TitelStreams> {
}
let eintrag = streams.get(sNr)
if (eintrag === undefined) {
eintrag = { nr: sNr, typ: '', lang: '', sprache: '', codec: '', kanaele: '', beschreibung: '' }
eintrag = { nr: sNr, typ: '', typCode: 0, lang: '', sprache: '', codec: '', kanaele: '', beschreibung: '' }
streams.set(sNr, eintrag)
}
if (attr === 1) eintrag.typ = wert
if (attr === 1) {
eintrag.typ = wert
eintrag.typCode = code
}
else if (attr === 3) eintrag.lang = wert
else if (attr === 4) eintrag.sprache = wert
else if (attr === 6) eintrag.codec = wert
@@ -164,9 +180,10 @@ export function parseStreamInfo(ausgabe: string): Map<number, TitelStreams> {
const untertitel: StreamInfo[] = []
for (const sNr of [...streams.keys()].sort((a, b) => a - b)) {
const s = streams.get(sNr)!
// MakeMKV schreibt „Subtitles" (englisch, Plural) — gemessen.
if (s.typ === 'Audio') audio.push(s)
else if (s.typ.startsWith('Subtitle')) untertitel.push(s)
// Der Code entscheidet (5.6.1); das Wort nur als Notnagel für Ausgaben
// ohne Code („Audio", „Subtitles", „Untertitel").
if (s.typCode === STREAM_CODE_AUDIO || (s.typCode === 0 && s.typ === 'Audio')) audio.push(s)
else if (s.typCode === STREAM_CODE_UNTERTITEL || (s.typCode === 0 && (s.typ.startsWith('Subtitle') || s.typ.startsWith('Untertitel')))) untertitel.push(s)
}
ergebnis.set(tNr, { audio, untertitel })
}
+70
View File
@@ -0,0 +1,70 @@
// 5.6.1 — Commander-Fund vom 03.09.2026: Bei der Blu-ray „Digimon Adventure:
// Last Evolution Kizuna" fehlten im Auswahl-Dialog die Untertitel-Chips,
// obwohl die Disc drei deutsche PGS-Spuren hat. Gemessen mit
// makemkvcon64 -r info auf diesem PC: MakeMKV (deutsch eingestellt) schreibt
// den Stream-Typ als „Untertitel", der Parser prüfte auf „Subtitles". Der
// Typ-Code im vierten Feld (6203) ist sprachunabhängig.
import { describe, expect, it } from 'vitest'
import { STREAM_CODE_AUDIO, STREAM_CODE_UNTERTITEL, parseStreamInfo, sprachenFuerTitel } from '../src/kern/rip/parser'
// Wörtlich aus der Messung (gekürzt auf Typ, Sprache, Name, Beschreibung).
const KIZUNA = [
'SINFO:1,0,1,6201,"Video"',
'SINFO:1,0,6,0,"Mpeg4"',
'SINFO:1,1,1,6202,"Audio"',
'SINFO:1,1,3,0,"deu"',
'SINFO:1,1,4,0,"German"',
'SINFO:1,1,30,0,"DTS-HD MA Surround 5.1 German"',
'SINFO:1,2,1,6202,"Audio"',
'SINFO:1,2,3,0,"deu"',
'SINFO:1,2,4,0,"German"',
'SINFO:1,3,1,6202,"Audio"',
'SINFO:1,3,3,0,"jpn"',
'SINFO:1,3,4,0,"Japanese"',
'SINFO:1,4,1,6202,"Audio"',
'SINFO:1,4,3,0,"jpn"',
'SINFO:1,4,4,0,"Japanese"',
'SINFO:1,5,1,6203,"Untertitel"',
'SINFO:1,5,3,0,"deu"',
'SINFO:1,5,4,0,"German"',
'SINFO:1,5,30,0,"PGS German"',
'SINFO:1,6,1,6203,"Untertitel"',
'SINFO:1,6,3,0,"deu"',
'SINFO:1,6,4,0,"German"',
'SINFO:1,6,22,0,"6144"',
'SINFO:1,6,30,0,"PGS German (nur erzwungene)"',
'SINFO:1,7,1,6203,"Untertitel"',
'SINFO:1,7,3,0,"deu"',
'SINFO:1,7,4,0,"German"',
].join('\n')
describe('parseStreamInfo — Stream-Typ per Code, nicht per Wort (5.6.1)', () => {
it('deutsches MakeMKV schreibt „Untertitel": die drei PGS-Spuren werden erkannt', () => {
const streams = parseStreamInfo(KIZUNA).get(1)!
expect(streams.audio.map((s) => s.lang)).toEqual(['deu', 'deu', 'jpn', 'jpn'])
expect(streams.untertitel.map((s) => s.lang)).toEqual(['deu', 'deu', 'deu'])
expect(streams.untertitel[0].typCode).toBe(STREAM_CODE_UNTERTITEL)
expect(streams.audio[0].typCode).toBe(STREAM_CODE_AUDIO)
expect(streams.untertitel[1].beschreibung).toBe('PGS German (nur erzwungene)')
})
it('für den Dialog: deu×2 Ton, jpn×2 Ton, deu×3 Untertitel', () => {
const sprachen = sprachenFuerTitel(parseStreamInfo(KIZUNA).get(1))
expect(sprachen.audio).toEqual([
{ lang: 'deu', sprache: 'German', spuren: 2 },
{ lang: 'jpn', sprache: 'Japanese', spuren: 2 },
])
expect(sprachen.untertitel).toEqual([{ lang: 'deu', sprache: 'German', spuren: 3 }])
})
it('jede Anzeigesprache: der Code zählt — französisch, englisch, und ohne Code das Wort als Notnagel', () => {
expect(parseStreamInfo('SINFO:0,1,1,6203,"Sous-titres"\nSINFO:0,1,3,0,"fra"').get(0)!.untertitel).toHaveLength(1)
expect(parseStreamInfo('SINFO:0,1,1,6203,"Subtitles"\nSINFO:0,1,3,0,"eng"').get(0)!.untertitel).toHaveLength(1)
expect(parseStreamInfo('SINFO:0,1,1,0,"Subtitles"\nSINFO:0,1,3,0,"eng"').get(0)!.untertitel).toHaveLength(1)
expect(parseStreamInfo('SINFO:0,1,1,0,"Untertitel"\nSINFO:0,1,3,0,"deu"').get(0)!.untertitel).toHaveLength(1)
expect(parseStreamInfo('SINFO:0,1,1,0,"Audio"\nSINFO:0,1,3,0,"deu"').get(0)!.audio).toHaveLength(1)
})
it('Video bleibt draußen', () => {
const streams = parseStreamInfo('SINFO:0,0,1,6201,"Video"\nSINFO:0,0,3,0,"und"').get(0)!
expect(streams.audio).toHaveLength(0)
expect(streams.untertitel).toHaveLength(0)
})
})