# Amazon PVD Mezzanine Encoder **Automatisches Python-Tool zur Erstellung von Amazon PVD-konformen Mezzanine-VOD-Dateien und Audio-Master-Dateien** (ProRes • Blu-ray • DVD • PAL • NTSC • Interlaced) --- ## Features - **Vollautomatische Erkennung** von SD/HD, PAL/NTSC und interlaced Material - **ProRes-Quellen mit mehreren Tonspuren** werden unterstuetzt - **Audio-Sprache und Layout aus Dateinamen** (`DEU51_ENG20`, `DEU20`, usw.) - **HD-PVD-MP4 mit 30 Mbit/s** und deutscher Stereo-Spur - **Automatischer Downmix** von deutscher 5.1-Spur auf Stereo, wenn keine deutsche Stereo-Spur vorhanden ist - **Separate PCM-Audio-MOVs** fuer deutsche Tonspuren und originalsprachige Tonspuren - **Bester Deinterlacer** (`bwdif mode=0`) → saubere 25 fps bei PAL-DVDs (kein Double-Framerate) - **Automatische Farbraum-Konvertierung** (Rec.601 PAL/NTSC ↔ Rec.709) inkl. `colorspace`-Filter - **Forced Subtitles** werden automatisch eingebrannt (wenn `_forced.srt` vorhanden) - **Informative Tkinter-UI** mit Analyse, Audio-Uebersicht und Encoding-Log - **Windows-Fallback ohne Tkinter** mit nativen Dateidialogen und Konsolen-Log - **Amazon PVD optimierte Parameter** (Bitrate, Level, GOP, x264-Settings) - **Saubere Metadaten** + `faststart` für beste Streaming-Performance - Funktioniert mit Drag & Drop (`.bat` oder direkt auf Script ziehen) ## Voraussetzungen - Windows (getestet) - FFmpeg + FFprobe (in `C:\Software\` oder Pfad in Script anpassen) - Python 3.10+ - Schreibzugriff auf den Ausgabeordner `H:\VOD` ## Installation & Nutzung 1. Repo klonen oder herunterladen 2. `ffmpeg.exe` und `ffprobe.exe` in `C:\Software\` ablegen (oder Pfade im Script ändern) 3. Optional: `create_mezzanine.bat` anlegen: ```bat @echo off set "PYTHON_EXE=%LocalAppData%\Programs\Python\Python311\python.exe" if exist "%PYTHON_EXE%" ( "%PYTHON_EXE%" "%~dp0pvd_mezzanine.py" %* ) else ( py -3 "%~dp0pvd_mezzanine.py" %* ) pause ``` 4. Tool starten: ```powershell .\create_mezzanine.bat ``` 5. In der UI Quelle auswaehlen, analysieren und Encoding starten. Wenn die installierte Python-Version kein Tkinter mitbringt, oeffnet das Tool automatisch Windows-Dateidialoge fuer Quelle und Ausgabeordner und zeigt die Analyse sowie das Encoding-Log in der Konsole. Fuer automatisierte CLI-Laeufe kann das Encoding direkt gestartet werden: ```powershell py -3 .\pvd_mezzanine.py --cli "C:\Pfad\zur\Quelle.mov" ``` ## Ausgabe Das Script schreibt die fertige Mezzanine-Datei standardmäßig nach: ```text H:\VOD ``` Der MP4-Dateiname wird automatisch aus dem Quellpfad bzw. Blu-ray-Projektordner gebildet und endet auf: ```text _DEU20_PVD.mp4 ``` Bei ProRes-Quellen werden zusaetzlich Audio-MOVs erzeugt: ```text Titel_DEU_AUDIO_PCM.mov Titel_OV_AUDIO_PCM.mov ``` Wenn nur deutsche Tonspuren vorhanden sind, wird nur `Titel_DEU_AUDIO_PCM.mov` erzeugt. ## ProRes-Audio-Namen Die Sprache und das Tonformat der Tonspuren werden aus dem Dateinamen gelesen. Die Tokens stehen in der Reihenfolge der Audiospuren im ProRes. 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 PCM-Audio-MOV erzeugt. ## Untertitel Forced Subtitles werden automatisch eingebrannt, wenn neben der Quelle eine gleichnamige Datei mit dem Suffix `_forced.srt` liegt. Beispiel: ```text Film.mkv Film_forced.srt ``` ## Audio-Ausgabe - Das PVD-MP4 bekommt immer deutschen Stereo-Ton. - Wenn eine deutsche 2.0-Spur vorhanden ist, wird sie verwendet. - Wenn keine deutsche 2.0-Spur vorhanden ist, wird die erste deutsche Spur auf Stereo heruntergemischt. - Alle deutschen Tonspuren werden als uncompressed PCM in eine separate MOV geschrieben. - Alle nicht-deutschen Tonspuren werden als uncompressed PCM in eine separate MOV geschrieben. ## Konfiguration Die wichtigsten Pfade stehen oben in `pvd_mezzanine.py`: ```python FFMPEG_EXE = r"C:\Software\ffmpeg.exe" FFPROBE_EXE = r"C:\Software\ffprobe.exe" OUTPUT_BASE_DIR = r"H:\VOD" ``` ## Git-Hinweis Die lokale `.env` enthält Zugangsdaten und wird absichtlich nicht versioniert. Neue Änderungen sollten zusammen mit einer passenden README-Aktualisierung committed und nach `main` gepusht werden.