Skip to content

kl3b3/video-converter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Captionizer

Desktop-App zur Video-Transkription und Untertitel-Erstellung via FFmpeg + OpenAI Whisper.

Features

  • Transkription mit OpenAI Whisper (lokal, kein Cloud-Account nötig)
  • Mehrsprachige Übersetzung via ArgosTranslate (offline)
  • Untertitel-Editor mit Zeitstempel-Anpassung
  • Export als .srt, .vtt, .txt
  • Video-Export mit eingebrannten Untertiteln (Burn-in) oder als Soft-Subtitle-Spur
  • Anpassbare Untertitel-Darstellung: Schriftart, Größe, Position, Farbe, Hintergrund
  • Eigene Fonts via .ttf, .woff, .woff2
  • Warteschlange für mehrere Videos
  • Light/Dark-Mode

Voraussetzungen (Entwicklung)

  • Python 3.10+
  • ffmpeg — wird beim Start automatisch erkannt; wenn nicht vorhanden, bietet die App eine Installationsanleitung

Installation (Entwicklung)

# Virtuelle Umgebung erstellen
python -m venv venv
source venv/bin/activate   # Windows: venv\Scripts\activate

# Abhängigkeiten installieren
pip install -r requirements.txt

requirements.txt:

Paket Zweck
PySide6 >= 6.6 GUI-Framework
openai-whisper Spracherkennung (lokal)
ffmpeg-python ffmpeg-Bindings für Audio-Extraktion

Starten (Entwicklung)

python main.py

App bauen (.app / .exe)

Die App wird mit PyInstaller gebündelt. ffmpeg und ffprobe werden automatisch mit eingebunden — der Endnutzer braucht keine separate Installation.

Voraussetzungen

pip install pyinstaller

ffmpeg muss beim Build im PATH vorhanden sein (wird dann ins Bundle kopiert):

# macOS
brew install ffmpeg

# Windows
winget install Gyan.FFmpeg

Build-Befehl

./build.sh

Das Script führt PyInstaller aus und erstellt anschließend automatisch eine .dmg:

dist/Captionizer.app      # App-Bundle
dist/Captionizer.dmg      # Distributionsfertiges Disk Image

Alternativ einzeln:

pyinstaller Captionizer.spec --noconfirm
hdiutil create -volname "Captionizer" -srcfolder dist/Captionizer.app -ov -format UDZO dist/Captionizer.dmg

Was das .spec macht

  • Bindet ffmpeg und ffprobe vom System-PATH ein (landen in Contents/Frameworks/ auf macOS)
  • Bundelt Whisper-Assets (Tiktoken-Encoding)
  • Bundelt GUI-Assets (gui/assets/)
  • Kein Terminal-Fenster (console=False)
  • UPX-Komprimierung aktiviert

ffmpeg im Bundle (macOS)

Beim Start erweitert die App ihren internen PATH automatisch um:

  • Contents/MacOS/ (Executable-Verzeichnis)
  • Contents/Frameworks/ (PyInstaller-Standard für Binaries)
  • Contents/Resources/

Dadurch wird das gebündelte ffmpeg gefunden, ohne dass der Nutzer etwas installieren muss.


Workflow

  1. Datei laden — Drag & Drop oder über den Datei-Dialog; mehrere Dateien werden als Warteschlange verarbeitet
  2. Transkription — Whisper-Modell und Quellsprache wählen, dann starten
  3. Übersetzung (optional) — Zielsprachen auswählen; Sprachpakete werden einmalig heruntergeladen
  4. Editor — Segmente ansehen und Texte/Zeitstempel anpassen
  5. Export — Untertitel-Datei oder Video exportieren

Export-Modi

Modus Beschreibung
.srt / .vtt / .txt Nur Untertitel-Datei
Soft Subtitles Untertitel als separate Spur im Video (an/abschaltbar im Player), mehrsprachig möglich
Burn-in Untertitel dauerhaft ins Videobild eingebrannt, mit vollem Style-Kontrolle

Whisper-Modelle

Modell VRAM Empfehlung
turbo ~6 GB Beste Balance aus Geschwindigkeit und Genauigkeit
large-v3 ~10 GB Höchste Genauigkeit
medium ~5 GB Guter Kompromiss
small ~2 GB Schnell, ausreichend für viele Anwendungsfälle
tiny ~1 GB Nur für Tests

Ohne dedizierte GPU läuft Whisper auf der CPU — das dauert länger, funktioniert aber.


Projektstruktur

.
├── main.py                        # Einstiegspunkt, ffmpeg-Check, App-Start
├── Captionizer.spec               # PyInstaller-Build-Konfiguration
├── requirements.txt
├── assets/                        # App-Icon (.icns, .png)
├── gui/
│   ├── main_window.py             # Hauptfenster
│   ├── styles.py                  # Light/Dark-Stylesheet
│   ├── icons.py                   # Icon-Lader
│   ├── constants.py               # Modelle, Sprachen, UI-Konstanten
│   ├── subtitle_utils.py          # SRT/VTT/TXT-Parsing und Zeitformat-Utilities
│   ├── main_window_mixins/
│   │   ├── ui.py                  # UI-Aufbau und Layouts
│   │   ├── player.py              # Video-Player, Theme, Segment-Highlight
│   │   ├── workflow.py            # Queue, Whisper, Übersetzungs-Ablauf
│   │   └── editor_export.py       # Segment-Editor und Export-Logik
│   └── widgets/
│       └── common.py              # CardFrame, StepperBar, StepBadge
└── worker/
    ├── ffmpeg_worker.py           # Audio-Extraktion (QThread)
    ├── whisper_worker.py          # Transkription und Whisper-Übersetzung (QThread)
    ├── translate_worker.py        # ArgosTranslate-Übersetzung (QThread)
    └── mux_worker.py              # Video-Muxing (Soft/Burn-in, QThread)

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors