215 lines
5.5 KiB
Markdown
215 lines
5.5 KiB
Markdown
# 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.
|