Files
pvd/README.md
T
2026-05-07 18:27:02 +02:00

5.2 KiB

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 im PATH, in C:\Tools\FFMPEG oder in C:\Software
  • Python 3.10+
  • Schreibzugriff auf den Ausgabeordner F:\VOD oder 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:
    @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:
    .\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 einen Windows-Dateidialog fuer die Quelle, verwendet H:\VOD als Ausgabeordner und zeigt die Analyse sowie das Encoding-Log in der Konsole.

Fuer automatisierte CLI-Laeufe kann das Encoding direkt gestartet werden:

py -3 .\pvd_mezzanine.py --cli "C:\Pfad\zur\Quelle.mov"

Alternativ kann die Datei direkt als erster Parameter uebergeben werden:

.\create_mezzanine.bat "C:\Pfad\zur\Quelle.mov"

Ausgabe

Das Script schreibt die fertige Mezzanine-Datei standardmäßig nach:

H:\VOD

Der MP4-Dateiname wird automatisch aus dem Quellpfad bzw. Blu-ray-Projektordner gebildet und endet auf:

_DEU20_PVD.mp4

Bei ProRes-Quellen werden zusaetzlich Audio-MOVs erzeugt:

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:

Film_DEU51_ENG20.mov
  • Spur 1: Deutsch 5.1
  • Spur 2: Englisch 2.0
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:

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 Parameter stehen in config.json. Wenn die Datei fehlt, wird sie beim Start mit Default-Werten erzeugt.

{
  "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",
    "sd_bitrate": "8M",
    "sd_maxrate": "10M",
    "sd_bufsize": "15M"
  },
  "audio": {
    "mp4_bitrate": "256k",
    "sample_rate": "48000",
    "pcm_codec": "pcm_s24le"
  }
}

FFmpeg wird in dieser Reihenfolge gesucht:

  1. Explizite Pfade aus ffmpeg_exe und ffprobe_exe
  2. PATH
  3. C:\Tools\FFMPEG
  4. C:\Software

Das Zielverzeichnis wird so bestimmt:

  1. output.base_dir, wenn gesetzt
  2. erstes vorhandenes Verzeichnis aus output.preferred_dirs, standardmaessig F:\VOD, dann H:\VOD
  3. falls keines existiert, der erste Preferred-Dir-Wert

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.