Früher galt am DVD-Player die eiserne Regel: No disc – no fun. Heute, mit einer eigenen Streaming-Infrastruktur, ist ironischerweise genau das Gegenteil unser Ziel: Der wahre Spaß beginnt erst, wenn man überhaupt keine physische Disc mehr anfassen muss.

Matroschkamanufaktur

Für die meisten Discs ist MakeMKV das Mittel der Wahl. Das Tool verhält sich wie ein Panzer: Es pflügt stoisch durch intakte oder leicht zerkratzte Dateisysteme, ignoriert den Kopierschutz und extrahiert die rohen Video- und Audiospuren ohne Qualitätsverlust direkt in einen Matroska-Container.

Kompression mit HandBrake

Rohe Rips sind riesig – eine Blu-ray belegt schnell über 30 GB. Um den Storage zu schonen, schicke ich die MKVs im Anschluss durch HandBrake. Mit modernen Codecs wie H.265 (HEVC) lässt sich das Rohmaterial auf etwa 2 GB eindampfen. Das ist ein Verhältnis von gut 15:1, ohne dass man beim Streamen auf dem Tablet sichtbare Einbußen oder Artefakte in Kauf nehmen muss.

Handbrake

In Handbrake fügt man Video, Audio und Untertitel zusammen.

DD to the Rescue

Es war höchste Zeit, die optischen Datenträger mal einzulesen, denn etliche hatten schon so viele Lesefehler, dass sie gar nicht mehr lesbar waren. Schlägt MakeMKV fehl, lässt sich eventuell noch was mit ddrescue machen:

BASH
ddrescue --no-scrape -b 2048 /dev/rdisk4 zatoichi.iso zatoichi.map
Klicken Sie zum Erweitern und mehr anzeigen

Dabei liest das Programm bitweise die Disk aus und speichert sie in der ISO-Datei. Das Mapfile ist essenziell, um bei Abbrüchen den Zustand zu tracken. Mit dem Parameter --no-scrape wird auf das forcierte Auslesen bei harten Fehlern (wie tiefen Kratzern oder defekten Layer-Breaks) verzichtet. Das schont die Hardware und hat eventuell kleine Aussetzer in Bild oder Ton zur Folge, trübt aber nicht den gesamten Filmgenuss.

Ist der ISO-Header durch den Kratzer am Anfang so zerschossen, dass die Datei danach nicht mehr mounbar ist, wirft man die unfertige .iso einfach direkt als Quelle in MakeMKV oder extrahiert den rohen Stream per Kommandozeile mit FFmpeg. Alternativ kann man auch das ISO versuchen über das Betriebssystem zu mounten und die einzelnen .VOB-Dateien direkt mit Handbrake zu encoden.

Jellyfin hosten

Das eigentliche Hosting übernimmt Jellyfin . Die Software ist als Container schnell installiert und greift auf ein vorhandenes Medienverzeichnis zu.

Jellyfin präsentiert die DVD-Cover alphabetisch und durchsuchbar.

BASH
podman run -d \
    -v /srv/jellyfin/config:/config:Z \
    -v /srv/jellyfin/cache:/cache:Z \
    -v /srv/media:/media:Z \
    --net=host \
    jellyfin/jellyfin:latest
Klicken Sie zum Erweitern und mehr anzeigen

Als Reverse-Proxy verwende ich Caddy:

C
#/etc/caddy/Caddyfile.d/jellyfin.caddyfile
http://tv.kroesch.lan {
   reverse_proxy 127.0.0.1:8096
}
Klicken Sie zum Erweitern und mehr anzeigen

Sobald die Filme in dem Ordner liegen (ich kopiere sie vom Mac auf den Linux-Server per SMB-Freigabe), liest Jellyfin diese ein und versieht sie per Movie Database mit Cover, Beschreibung, Schauspielerliste und vielem mehr.

Danach ist die Website per Browser, auf dem iPad und dem Android TV (XGIMI-Projektor) erreichbar. Es emfiehlt sich, einen eigenen Benutzer ohne Admin-Rechte auf Jellyfin anzulegen, der nur Lesezugriff hat, so dass die Geräte von allen Familienmitgliedern genutzt werden können.

Feinschliff

Wenn der Standard-Workflow über die grafischen Oberflächen stolpert, weil Laufwerke bei Kratzern streiken oder Tonspuren falsch benannt sind, greife ich auf drei spezialisierte CLI-Tools zurück. Sie bilden das Rückgrat meiner Reparatur-Pipeline:

mkvpropedit (Das Skalpell): Perfekt, um Metadaten in-place zu patchen. Wenn Jellyfin “Unbekannte Sprache” anzeigt, weil der Rip-Prozess den Ländercode verschluckt hat, ändert dieses Tool den Matroska-Header in Millisekunden, ohne die Gigabyte-große Datei neu zu schreiben. Ideal, um nachträglich language=ger für Tonspuren zu setzen oder Titel zu vergeben.

mkvmerge (Der Packer): Das Tool der Wahl für das sogenannte “Remuxing”. Es nimmt vorhandene Datenströme und verpackt sie verlustfrei und rasend schnell neu. Man nutzt es, wenn man externe Untertitel (.srt) aus dem Netz als Standard-Spur fest in den Container integrieren will, oder um versehentlich erstellte MP4-Dateien ohne zeitaufwendiges Neu-Encodieren in MKVs umzuwandeln. Zum Beispiel lässt sich eine Datei, die Serien als ein MKV enthält, in Kapitel zerteilen:

BASH
mkvmerge -o paddington_ep.mkv --split chapters:all paddington_alle_folgen.mkv
Klicken Sie zum Erweitern und mehr anzeigen

FFmpeg (Der Dampfhammer): Wenn Dateisysteme komplett zerschossen sind, schlägt die Stunde von FFmpeg. Das Tool kann kaputte ISO-Header ignorieren und die nackten Video-Bytes direkt auslesen. Man zwingt es dazu, fehlende Timestamps mathematisch neu zu generieren (-fflags +genpts) oder rohe Streams aus hoffnungslos beschädigten Bereichen in robuste Transport-Streams (.ts) zu retten, die HandBrake danach wieder anstandslos verarbeiten kann.

Fazit

Der Weg vom verstaubten Plastik im Regal zum hochverfügbaren SSD-Tier ist mitunter steinig. Kaputte Dateisysteme, streikende Laufwerke und zerschossene Container-Header fordern etwas Durchhaltevermögen und den gezielten Einsatz der Kommandozeile.

Doch dieser initiale Aufwand lohnt sich: Hast du die Ingest-Pipeline erst einmal etabliert und Jellyfin präsentiert dir die saubere Cover-Übersicht im Browser, ist das Legacy-Problem endgültig gelöst. Die physischen Medien wandern in den Keller und das Heimkino startet auf Knopfdruck.

UPDATE: Untertitel herstellen

Einen meiner Lieblingsfilme, Takeshi Kitanos “Zatoichi”, konnte ich leider auch mit ddrescue nicht digital auslesen. Auf archive.org habe ich dann das japanische Original als MP4-Datei gefunden. Leider beschränkt sich mein Japanisch auf einige FLoskeln und das was ich in Judo oder Iaido gelernt habe.

Hier ist der Trick, mit dem man englische und deutsche Untertitel herstellen kann. Zunächst wird der Audiostream vom Video getrennt:

BASH
ffmpeg -y -i Zatoichi.mp4 -map 0:a:0 -ac 1 -ar 16000 -c:a pcm_s16le audio_ja_mono.wav
Klicken Sie zum Erweitern und mehr anzeigen

Danach installiere ich faster-whisper:

BASH
uv init --name subtitles
uv add faster-whisper
Klicken Sie zum Erweitern und mehr anzeigen

und starte folgendes Python-Skript:

PYTHON
#!/usr/bin/env python3
from faster_whisper import WhisperModel

def format_timestamp(seconds):
    h = int(seconds // 3600)
    m = int((seconds % 3600) // 60)
    s = int(seconds % 60)
    ms = int((seconds % 1) * 1000)
    return f"{h:02d}:{m:02d}:{s:02d},{ms:03d}"

print("Lade Whisper v2 Modell...")
# Nutzt die CPU und quantisiert auf int8 für Geschwindigkeit
model = WhisperModel("large-v2", device="cpu", compute_type="int8")

# vad_filter=True gegen Halluzinationen
segments, info = model.transcribe(
    "audio_mono.wav",
    language="ja",
    task="translate",
    vad_filter=True,
    vad_parameters=dict(min_silence_duration_ms=500)
)

with open("zatoichi_en_clean.srt", "w", encoding="utf-8") as f:
    for i, segment in enumerate(segments, start=1):
        start = format_timestamp(segment.start)
        end = format_timestamp(segment.end)
        f.write(f"{i}\n{start} --> {end}\n{segment.text.strip()}\n\n")
        print(f"[{start} --> {end}] {segment.text.strip()}")
Klicken Sie zum Erweitern und mehr anzeigen

Hernach baut man wieder die Matroschka zusammen:

BASH
mkvmerge -o zatoichi_final.mkv Zatoichi.mp4 --language 0:eng --default-track 0:yes zatoichi_en_clean.srt
Klicken Sie zum Erweitern und mehr anzeigen

Mit dem Experimentieren war ich weniger als zwei Stunden beschäftigt. Und es bekommt jeder ohne Japanischkenntnisse hin.

Kommentare

Suche starten

Geben Sie Schlüsselwörter ein, um Artikel zu suchen

↑↓
ESC
⌘K Tastenkürzel