plugin: video-editing updated: 2026-01-20
Transkription mit Whisper
Produktionsreife Muster für die Audio-/Videotranskription mit OpenAI Whisper.
Systemanforderungen
Installationsoptionen
Option 1: OpenAI Whisper (Python)
# macOS/Linux/Windows
pip install openai-whisper
# Überprüfen
whisper --help
Option 2: whisper.cpp (C++ - schneller)
# macOS
brew install whisper-cpp
# Linux - aus Quelle bauen
https://github.com/ggerganov/whisper.cpp
cd whisper.cpp && make
# Windows - vorgefertigte Binärdateien oder Build mit cmake
Option 3: Insanely Fast Whisper (GPU-beschleunigt)
pip install insanely-fast-whisper
Modellauswahl
| Modell | Größe | VRAM | Genauigkeit | Geschwindigkeit | Anwendungsfall |
|---|---|---|---|---|---|
| tiny | 39M | ~1GB | Niedrig | Am schnellsten | Schnelle Vorschauen |
| base | 74M | ~1GB | Mittel | Schnell | Entwurfstranskripte |
| small | 244M | ~2GB | Gut | Mittel | Allgemeine Verwendung |
| medium | 769M | ~5GB | Besser | Langsam | Qualitätstranskripte |
| large-v3 | 1550M | ~10GB | Am besten | Am langsamsten | Endproduktion |
Empfehlung: Beginnen Sie mit small für ein gutes Verhältnis von Geschwindigkeit zu Qualität. Verwenden Sie large-v3 für die endgültige Auslieferung.
Grundlegende Transkription
Mit OpenAI Whisper
# Grundlegende Transkription (automatische Spracherkennung)
whisper audio.mp3 --model small
# Sprache und Ausgabeformat angeben
whisper audio.mp3 --model medium --language en --output_format srt
# Mehrere Ausgabeformate
whisper audio.mp3 --model small --output_format all
# Mit Zeitstempeln und Wort-für-Wort-Timing
whisper audio.mp3 --model small --word_timestamps True
Mit whisper.cpp
# Zuerst Modell herunterladen
./models/download-ggml-model.sh base.en
# Transkribieren
./main -m models/ggml-base.en.bin -f audio.wav -osrt
# Mit Zeitstempeln
./main -m models/ggml-base.en.bin -f audio.wav -ocsv
Ausgabeformate
SRT (SubRip Subtitle)
1
00:00:01,000 --> 00:00:04,500
Hallo und willkommen zu diesem Video.
2
00:00:05,000 --> 00:00:08,200
Heute besprechen wir die Videobearbeitung.
VTT (WebVTT)
WEBVTT
00:00:01.000 --> 00:00:04.500
Hallo und willkommen zu diesem Video.
00:00:05.000 --> 00:00:08.200
Heute besprechen wir die Videobearbeitung.
JSON (mit Wort-für-Wort-Timing)
{
"text": "Hallo und willkommen zu diesem Video.",
"segments": [
{
"id": 0,
"start": 1.0,
"end": 4.5,
"text": " Hallo und willkommen zu diesem Video.",
"words": [
{"word": "Hallo", "start": 1.0, "end": 1.3},
{"word": "und", "start": 1.4, "end": 1.5},
{"word": "willkommen", "start": 1.6, "end": 2.0},
{"word": "zu", "start": 2.1, "end": 2.2},
{"word": "diesem", "start": 2.3, "end": 2.5},
{"word": "Video", "start": 2.6, "end": 3.0}
]
}
]
}
Audioextraktion für die Transkription
Vor dem Transkribieren von Video extrahieren Sie Audio im optimalen Format:
# Audio als WAV extrahieren (16kHz, mono - optimal für Whisper)
ffmpeg -i video.mp4 -ar 16000 -ac 1 -c:a pcm_s16le audio.wav
# Als hochwertiges WAV für Archivierung extrahieren
ffmpeg -i video.mp4 -vn -c:a pcm_s16le audio.wav
# Als komprimiertes MP3 extrahieren (kleiner, funktioniert trotzdem)
ffmpeg -i video.mp4 -vn -c:a libmp3lame -q:a 2 audio.mp3
Zeitsynchronisation
Whisper JSON in FCP-Timing konvertieren
import json
def whisper_to_fcp_timing(whisper_json_path, fps=24):
"""Konvertiert die Whisper-JSON-Ausgabe in FCP-kompatibles Timing."""
with open(whisper_json_path) as f:
data = json.load(f)
segments = []
for seg in data.get("segments", []):
segments.append({
"start_time": seg["start"],
"end_time": seg["end"],
"start_frame": int(seg["start"] * fps),
"end_frame": int(seg["end"] * fps),
"text": seg["text"].strip(),
"words": seg.get("words", [])
})
return segments
Frame-genaues Timing
# Exakte Frame-Anzahl und Dauer ermitteln
ffprobe -v error -count_frames -select_streams v:0 \
-show_entries stream=nb_read_frames,duration,r_frame_rate \
-of json video.mp4
Sprecherdiarisierung
Für Inhalte mit mehreren Sprechern pyannote.audio verwenden:
pip install pyannote.audio
from pyannote.audio import Pipeline
pipeline = Pipeline.from_pretrained("pyannote/[email protected]")
diarization = pipeline("audio.wav")
for turn, _, speaker in diarization.itertracks(yield_label=True):
print(f"{turn.start:.1f}s - {turn.end:.1f}s: {speaker}")
Stapelverarbeitung
#!/bin/bash
# Alle Videos im Verzeichnis transkribieren
MODEL="small"
OUTPUT_DIR="transcripts"
mkdir -p "$OUTPUT_DIR"
for video in *.mp4 *.mov *.avi; do
[[ -f "$video" ]] || continue
base="${video%.*}"
# Audio extrahieren
ffmpeg -i "$video" -ar 16000 -ac 1 -c:a pcm_s16le "/tmp/${base}.wav" -y
# Transkribieren
whisper "/tmp/${base}.wav" --model "$MODEL" \
--output_format all \
--output_dir "$OUTPUT_DIR"
# Temporäres Audio bereinigen
rm "/tmp/${base}.wav"
echo "Transkribiert: $video"
done
Qualitätsoptimierung
Genauigkeit verbessern
- Rauschunterdrückung vor der Transkription:
ffmpeg -i noisy_audio.wav -af "highpass=f=200,lowpass=f=3000,afftdn=nf=-25" clean_audio.wav
- Sprachhinweis verwenden:
whisper audio.mp3 --language en --model medium
- Anfänglichen Prompt für Kontext bereitstellen:
whisper audio.mp3 --initial_prompt "Technische Diskussion über Videobearbeitungssoftware."
Leistungstipps
- GPU-Beschleunigung (falls verfügbar):
whisper audio.mp3 --model large-v3 --device cuda
- In Abschnitten für lange Videos verarbeiten:
# Audio in 10-Minuten-Abschnitte aufteilen
# Jeden Abschnitt transkribieren
# Ergebnisse mit Zeitversatzanpassung zusammenführen
Fehlerbehandlung
# Audiodatei vor der Transkription validieren
validate_audio() {
local file="$1"
if ffprobe -v error -select_streams a:0 -show_entries stream=codec_type -of csv=p=0 "$file" 2>/dev/null | grep -q "audio"; then
return 0
else
echo "Fehler: Kein Audiostream in $file gefunden"
return 1
fi
}
# Whisper-Installation prüfen
check_whisper() {
if command -v whisper &> /dev/null; then
echo "Whisper verfügbar"
return 0
else
echo "Fehler: Whisper nicht installiert. Ausführen: pip install openai-whisper"
return 1
fi
}
Verwandte Fähigkeiten
- ffmpeg-core - Audioextraktion und Vorverarbeitung
- final-cut-pro - Transkripte als Titel/Marker importieren