# Amazon PVD Mezzanine Encoder Automatisches Windows-Tool zur Erstellung von Amazon-PVD-Mezzanine-Dateien aus ProRes-, Blu-ray-, DVD- und anderen Videodateien. Das Tool erzeugt: - ein PVD-MP4 mit deutschem Stereo-Ton - eine separate MOV-Datei mit allen deutschen Tonspuren als uncompressed PCM - falls vorhanden, eine separate MOV-Datei mit allen originalsprachigen bzw. nicht-deutschen Tonspuren als uncompressed PCM ## Aktueller Workflow 1. Quelle auswaehlen oder als Parameter uebergeben. 2. FFprobe analysiert Video, Audio, Framerate, Aufloesung, Interlacing und Farbraum-Metadaten. 3. Audio-Sprache und Layout werden bevorzugt aus dem Dateinamen gelesen, z.B. `DEU51_ENG20`. 4. Das PVD-MP4 wird erzeugt. 5. Danach werden die Audio-MOVs erzeugt. ## Voraussetzungen - Windows - Python 3.10+ - FFmpeg und FFprobe - Schreibzugriff auf das Zielverzeichnis FFmpeg und FFprobe werden automatisch gesucht: 1. explizite Pfade aus `config.json` 2. `PATH` 3. `C:\Tools\FFMPEG` 4. `C:\Software` ## Starten Interaktiv: ```powershell .\create_mezzanine.bat ``` Mit direktem Dateiparameter: ```powershell .\create_mezzanine.bat "D:\Trailers\Film_DEU51_ENG20.mov" ``` Direkt per Python: ```powershell py -3 .\pvd_mezzanine.py "D:\Trailers\Film_DEU51_ENG20.mov" ``` Kompatibler CLI-Modus: ```powershell py -3 .\pvd_mezzanine.py --cli "D:\Trailers\Film_DEU51_ENG20.mov" ``` Wenn Tkinter in der verwendeten Python-Installation verfuegbar ist, startet eine UI mit Analyse, Audio-Uebersicht und Encoding-Log. Wenn Tkinter nicht verfuegbar ist, oeffnet das Tool einen nativen Windows-Dateidialog fuer die Quelle und laeuft danach im Konsolenmodus weiter. Wird eine Datei als Parameter uebergeben, wird kein Dialog geoeffnet. ## Ausgabe Das Zielverzeichnis wird ueber `config.json` bestimmt: 1. `output.base_dir`, wenn gesetzt 2. erstes vorhandenes Verzeichnis aus `output.preferred_dirs` 3. falls keines existiert, der erste Eintrag aus `output.preferred_dirs` Default: ```json "preferred_dirs": [ "F:\\VOD", "H:\\VOD" ] ``` Damit wird `F:\VOD` bevorzugt, wenn vorhanden. Sonst wird `H:\VOD` verwendet, wenn vorhanden. Dateinamen: ```text Titel_DEU20_PVD.mp4 Titel_DEU_AUDIO_PCM.mov Titel_OV_AUDIO_PCM.mov ``` Wenn nur deutsche Tonspuren vorhanden sind, wird keine `Titel_OV_AUDIO_PCM.mov` erzeugt. ## ProRes-Audio im Dateinamen Bei ProRes-Quellen muss die Reihenfolge der Audiospuren im Dateinamen stehen, wenn die Datei selbst keine verlaesslichen Sprach-Metadaten hat. Format: ```text SPRACHEFORMAT ``` Beispiele: ```text Film_DEU51_ENG20.mov ``` - Spur 1: Deutsch 5.1 - Spur 2: Englisch 2.0 ```text Film_DEU20_DEU51.mov ``` - Spur 1: Deutsch 2.0 - Spur 2: Deutsch 5.1 - Es wird nur eine deutsche Audio-MOV erzeugt. Unterstuetzt werden dreistellige Sprachcodes wie `DEU`, `GER`, `ENG`, `FRA`, `ITA`, `SPA` usw. `GER` wird intern wie `DEU` behandelt. ## Audio-Regeln - Das PVD-MP4 bekommt immer deutschen Stereo-Ton. - Wenn eine deutsche 2.0-Spur vorhanden ist, wird diese verwendet. - Wenn keine deutsche 2.0-Spur vorhanden ist, wird die erste deutsche Spur per FFmpeg auf Stereo heruntergemischt. - Alle deutschen Tonspuren werden in eine MOV-Datei mit uncompressed PCM geschrieben. - Alle nicht-deutschen Tonspuren werden in eine separate MOV-Datei mit uncompressed PCM geschrieben. - Wenn keine deutsche Tonspur erkannt wird, bricht das Tool mit einer Fehlermeldung ab. ## Video-Regeln - HD wird mit den HD-Werten aus `config.json` encodiert, standardmaessig `30M`. - SD wird mit den SD-Werten aus `config.json` encodiert, standardmaessig `8M`. - Interlaced-Material wird mit `bwdif=mode=0:parity=auto` deinterlaced. - Forced Subtitles werden eingebrannt, wenn neben der Quelle eine Datei mit `_forced.srt` liegt. - Farbraum-Metadaten werden auf den Ziel-Farbraum gesetzt. - Der `colorspace`-Filter wird nur verwendet, wenn die Quelle vollstaendige Farbraum-Metadaten liefert. Bei `unknown`-Metadaten wird der Filter uebersprungen, damit FFmpeg nicht abbricht. Forced-Subtitle-Beispiel: ```text Film_DEU51_ENG20.mov Film_DEU51_ENG20_forced.srt ``` ## Konfiguration Die wichtigsten Parameter stehen in [config.json](config.json). Default: ```json { "ffmpeg": { "ffmpeg_exe": "", "ffprobe_exe": "", "search_dirs": [ "C:\\Tools\\FFMPEG", "C:\\Software" ] }, "output": { "base_dir": "", "preferred_dirs": [ "F:\\VOD", "H:\\VOD" ] }, "video": { "hd_bitrate": "30M", "hd_maxrate": "35M", "hd_bufsize": "50M", "hd_level": "4.1", "sd_bitrate": "8M", "sd_maxrate": "10M", "sd_bufsize": "15M", "sd_level": "3.1", "preset": "slow", "tune": "film" }, "audio": { "mp4_bitrate": "256k", "sample_rate": "48000", "pcm_codec": "pcm_s24le" } } ``` Hinweise: - `ffmpeg.ffmpeg_exe` und `ffmpeg.ffprobe_exe` koennen leer bleiben, dann wird automatisch gesucht. - `output.base_dir` ueberschreibt die automatische Zielverzeichniswahl. - Wenn `config.json` fehlt, wird sie beim Start mit Default-Werten erzeugt. ## Fehlerbilder Wenn eine Datei als Parameter uebergeben wird und der Pfad falsch ist, oeffnet sich kein Dialog. Stattdessen erscheint: ```text FEHLER: Eingabedatei nicht gefunden: ... ``` Wenn keine deutsche Tonspur erkannt wird, muss der Dateiname ein deutsches Audio-Token enthalten, z.B.: ```text Film_DEU20.mov Film_DEU51_ENG20.mov ``` ## Repo-Pflege Die lokale `.env` enthaelt Zugangsdaten und wird nicht versioniert. Bei jeder Funktionsaenderung muss diese Anleitung aktuell gehalten werden. Neue Aenderungen sollen zusammen mit passender README-Aktualisierung committed und nach `main` gepusht werden.