Nachsehen, was in den Tonspuren wirklich steht

Die Sprachwahl vergleicht Kürzel, und Kürzel lügen — beim ZDF-Fall ist
die als deutsch ausgezeichnete Spur die mit Audiodeskription. Ob der
**Name** der Spur das rettet, sieht man nur, wenn man beides nebeneinander
legt. Alles andere wäre geraten, und davon hatten wir heute genug.

`--spuren <host> <suchbegriff>` sucht einen Titel und druckt zu jeder
Tonspur: Kürzel, Name aus der Datei, wie Jellyfin es zusammensetzt,
Codec, Kanäle und die Kennzeichen.

Dafür holt der Decoder jetzt auch `Title`, `IsHearingImpaired` und
`IsOriginal`. `Title` ist das zweite Signal neben dem Kürzel und
manchmal das einzige richtige: wo „eng" steht, kann im Namen „Deutsch"
stehen. Wir haben es bisher weggeworfen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-27 19:11:27 +02:00
co-authored by Claude Opus 5
parent 41cd7331a9
commit 946de29893
3 changed files with 96 additions and 0 deletions
@@ -168,6 +168,16 @@ public struct JellyfinMediaStream: Decodable, Sendable {
public let codec: String?
public let language: String?
public let displayTitle: String?
/// Was **in der Datei** steht — im Gegensatz zu `displayTitle`, das
/// Jellyfin aus Sprache, Codec und Kennzeichen zusammensetzt.
///
/// Das zweite Signal neben dem Sprachkürzel, und manchmal das einzige
/// richtige: wo „eng" steht, kann im Titel „Deutsch" stehen.
public let title: String?
/// Für Hörgeschädigte. **Nicht** Audiodeskription — dafür hat Jellyfin
/// kein Kennzeichen.
public let isHearingImpaired: Bool?
public let isOriginal: Bool?
public let channels: Int?
public let isDefault: Bool?
public let isForced: Bool?
@@ -177,6 +187,8 @@ public struct JellyfinMediaStream: Decodable, Sendable {
private enum CodingKeys: String, CodingKey {
case index = "Index", type = "Type", codec = "Codec", language = "Language"
case displayTitle = "DisplayTitle", channels = "Channels"
case title = "Title"
case isHearingImpaired = "IsHearingImpaired", isOriginal = "IsOriginal"
case isDefault = "IsDefault", isForced = "IsForced"
case height = "Height", width = "Width"
}