← All posts

Untertitel ins Video einfügen mit FFmpeg

Praxisanleitung für Untertitel mit FFmpeg — SRT/ASS einbrennen, Untertitelspuren einbetten, Styling, Mehrsprachigkeit und Untertitel extrahieren.

FFHub·2026-04-28
Untertitel ins Video einfügen mit FFmpeg

Untertitel machen Videos zugänglich, durchsuchbar und auch in lauten Umgebungen schaubar. FFmpeg kann Untertitel direkt ins Video einbrennen, sie als wählbare Spuren einbetten, vorhandene Untertitel extrahieren und zwischen Untertitelformaten konvertieren. Diese Anleitung deckt alles ab — mit Befehlen, die du sofort nutzen kannst.

Hardcode oder Softcode — was nehmen?

Bevor du Untertitel hinzufügst, musst du dich entscheiden:

MethodeBeschreibungVorteileNachteile
Hardcode (eingebrannt)Untertitel werden in die Videopixel gerendertImmer sichtbar, läuft überallNicht abschaltbar, Re-Encoding nötig
Softcode (eingebettet)Untertitel als separate Spur gespeichertUmschaltbar, mehrere SprachenPlayer muss es unterstützen

Faustregel: Hardcode für Social Media und maximale Kompatibilität. Softcode für Langform-Content und Mehrsprachigkeit. Wenn du eine UGC-Plattform mit User-Uploads baust, ist Softcode meist die bessere Wahl.

Wie brennst du SRT-Untertitel ein?

SRT ist das gängigste Untertitelformat. So brennst du es ins Video ein:

# Hardcode SRT subtitles
ffmpeg -i input.mp4 -vf "subtitles=subs.srt" output.mp4

Das war's. FFmpeg nutzt den subtitles-Filter (powered by libass), um die SRT-Datei direkt auf jedes Frame zu rendern.

Wie passt du das SRT-Aussehen an?

Das Standard-Rendering ist schmucklos. Mit force_style kannst du es stylen:

# Custom font, size, and color
ffmpeg -i input.mp4 -vf "subtitles=subs.srt:force_style='FontName=Arial,FontSize=24,PrimaryColour=&H00FFFFFF,OutlineColour=&H00000000,Outline=2,Shadow=1'" output.mp4

Übliche Style-Parameter:

ParameterBeispielBeschreibung
FontNameArialSchriftart
FontSize24Größe in Punkten
PrimaryColour&H00FFFFFFTextfarbe (ABGR Hex)
OutlineColour&H00000000Konturfarbe
BackColour&H80000000Schatten/Hintergrundfarbe
Outline2Konturstärke
Shadow1Schattentiefe
Bold1Fett (0 oder 1)
Alignment2Position (2=unten zentriert)
MarginV30Vertikaler Rand

Achtung: Farben sind im ABGR-Format (Alpha, Blue, Green, Red), nicht das übliche RGB.

# Yellow text with black outline, larger font, positioned higher
ffmpeg -i input.mp4 -vf "subtitles=subs.srt:force_style='FontSize=28,PrimaryColour=&H0000FFFF,OutlineColour=&H00000000,Outline=3,MarginV=40'" output.mp4

Sonderzeichen in Pfaden

Hat dein Untertitel-Pfad Sonderzeichen, escape sie:

# Escape colons in Windows paths or special characters
ffmpeg -i input.mp4 -vf "subtitles='my\ subtitles.srt'" output.mp4

# Or use the subtitle file index approach
ffmpeg -i input.mp4 -i subs.srt -filter_complex "[0:v][1:s]overlay" output.mp4

Wie brennst du gestylte ASS/SSA-Untertitel ein?

ASS (Advanced SubStation Alpha) unterstützt reiches Styling — Schriften, Farben, Animationen und Position pro Zeile. Beim Einbrennen bleibt das gesamte Styling erhalten:

# Hardcode ASS subtitles (all styling preserved)
ffmpeg -i input.mp4 -vf "ass=subs.ass" output.mp4

Eine einfache ASS-Datei bauen

Hier ein Beispiel für eine ASS-Struktur:

[Script Info]
Title: My Subtitles
ScriptType: v4.00+
PlayResX: 1920
PlayResY: 1080

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,48,&H00FFFFFF,&H000000FF,&H00000000,&H80000000,0,0,0,0,100,100,0,0,1,2,1,2,10,10,40,1

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.00,0:00:04.00,Default,,0,0,0,,Hello, this is a subtitle.
Dialogue: 0,0:00:05.00,0:00:08.00,Default,,0,0,0,,This line has {\b1}bold{\b0} text.

SRT zu ASS mit eigenem Styling konvertieren

# Convert SRT to ASS (then you can edit the ASS styles)
ffmpeg -i subs.srt subs.ass

Nach der Konvertierung den Abschnitt [V4+ Styles] in der ASS-Datei anpassen. Eventuell willst du dein Video auch in ein anderes Format konvertieren, je nach Zielplattform.

Wie bettest du Untertitelspuren ein? (Softcode)

Softcoded-Untertitel werden als eigener Stream im Container gespeichert. Der Zuschauer kann sie ein- und ausschalten.

SRT als Untertitelspur einbetten

# Add SRT subtitle track to MP4
ffmpeg -i input.mp4 -i subs.srt -c copy -c:s mov_text output.mp4

# Add SRT subtitle track to MKV (MKV supports SRT natively)
ffmpeg -i input.mp4 -i subs.srt -c copy -c:s srt output.mkv

Wichtig: MP4-Container brauchen den mov_text-Codec für Untertitel. MKV unterstützt SRT, ASS und viele weitere Formate nativ.

Mehrere Untertitelsprachen einbetten

# Add English and Spanish subtitle tracks to MKV
ffmpeg -i input.mp4 -i english.srt -i spanish.srt \
  -map 0:v -map 0:a -map 1 -map 2 \
  -c copy -c:s srt \
  -metadata:s:s:0 language=eng -metadata:s:s:0 title="English" \
  -metadata:s:s:1 language=spa -metadata:s:s:1 title="Spanish" \
  output.mkv

Für MP4:

# Add multiple subtitle tracks to MP4
ffmpeg -i input.mp4 -i english.srt -i chinese.srt \
  -map 0:v -map 0:a -map 1 -map 2 \
  -c copy -c:s mov_text \
  -metadata:s:s:0 language=eng -metadata:s:s:0 title="English" \
  -metadata:s:s:1 language=chi -metadata:s:s:1 title="Chinese" \
  output.mp4

Default-Untertitelspur setzen

# Mark the first subtitle track as default
ffmpeg -i input.mp4 -i subs.srt \
  -map 0 -map 1 \
  -c copy -c:s mov_text \
  -disposition:s:0 default \
  output.mp4

ASS-Untertitel als Soft-Track einbetten

# Add ASS to MKV (preserves all styling for compatible players)
ffmpeg -i input.mp4 -i subs.ass -map 0 -map 1 -c copy -c:s ass output.mkv

Wie ziehst du Untertitel aus einem Video raus?

Nach SRT extrahieren

# Extract the first subtitle track to SRT
ffmpeg -i input.mkv -map 0:s:0 output.srt

# Extract the second subtitle track
ffmpeg -i input.mkv -map 0:s:1 output.srt

Nach ASS extrahieren

# Extract subtitle track as ASS (preserves styling)
ffmpeg -i input.mkv -map 0:s:0 output.ass

Verfügbare Untertitelspuren auflisten

# Show all streams including subtitles
ffprobe -v error -show_entries stream=index,codec_name,codec_type -of csv input.mkv

# More detailed subtitle info
ffprobe -v error -select_streams s -show_entries stream=index,codec_name:stream_tags=language,title -of json input.mkv

Alle Untertitelspuren extrahieren

#!/bin/bash
# Extract all subtitle tracks from a video
INPUT="input.mkv"

# Count subtitle streams
COUNT=$(ffprobe -v error -select_streams s -show_entries stream=index -of csv=p=0 "$INPUT" | wc -l)

for i in $(seq 0 $((COUNT - 1))); do
  # Get language tag
  LANG=$(ffprobe -v error -select_streams s:$i -show_entries stream_tags=language -of csv=p=0 "$INPUT")
  LANG=${LANG:-"track$i"}
  ffmpeg -i "$INPUT" -map 0:s:$i "${INPUT%.*}_${LANG}.srt"
done

Wie konvertierst du zwischen Untertitelformaten?

FFmpeg konvertiert zwischen Untertitelformaten:

# SRT to ASS
ffmpeg -i subs.srt subs.ass

# ASS to SRT (loses styling)
ffmpeg -i subs.ass subs.srt

# SRT to WebVTT
ffmpeg -i subs.srt subs.vtt

# SUB/IDX (DVD) to SRT (requires OCR — FFmpeg can't do this directly)
# Use a tool like SubtitleEdit or Tesseract for bitmap-to-text conversion
VonNachStyling erhalten?
SRT → ASSJaDefault-Styling wird ergänzt
ASS → SRTNeinStyling geht verloren
SRT → VTTTeilweiseBasis-Formatierung bleibt
VTT → SRTTeilweiseVTT-Spezifisches geht verloren

Wie passt du das Untertitel-Timing an?

Untertitel verzögern oder vorziehen

# Delay subtitles by 2.5 seconds
ffmpeg -i input.mp4 -itsoffset 2.5 -i subs.srt -map 0 -map 1 -c copy -c:s mov_text output.mp4

Bei eingebrannten Untertiteln nimm den setpts-Filter oder pass die SRT direkt an (wenn du Videoteile schneiden oder zusammenfügen musst, wird das Timing besonders wichtig):

# Shift hardcoded subtitles (using subtitle filter with offset)
ffmpeg -i input.mp4 -vf "subtitles=subs.srt" -ss 00:00:02.500 output.mp4

Wie passt du Untertitel an die Auflösung an?

Beim Einbrennen hängt die Render-Qualität der Untertitel von der Videoauflösung ab. Für beste Ergebnisse die Originalauflösung beibehalten:

# Hardcode subtitles while keeping original resolution
ffmpeg -i input.mp4 -vf "subtitles=subs.srt" -c:v libx264 -crf 23 -c:a copy output.mp4

# Hardcode and scale to 1080p
ffmpeg -i input.mp4 -vf "subtitles=subs.srt,scale=-2:1080" -c:v libx264 -crf 23 -c:a copy output.mp4

Schriftgröße für verschiedene Auflösungen

# For 720p video — smaller font
ffmpeg -i input.mp4 -vf "subtitles=subs.srt:force_style='FontSize=20'" -c:v libx264 -crf 23 output.mp4

# For 4K video — larger font
ffmpeg -i input.mp4 -vf "subtitles=subs.srt:force_style='FontSize=48,Outline=3'" -c:v libx264 -crf 23 output.mp4

Wie verarbeitest du viele Videos auf einmal?

Untertitel für alle Videos einbrennen

# Assumes each video has a matching .srt file
for f in *.mp4; do
  srt="${f%.mp4}.srt"
  if [ -f "$srt" ]; then
    ffmpeg -i "$f" -vf "subtitles=$srt" -c:v libx264 -crf 23 -c:a copy "subtitled_${f}"
  fi
done

Untertitel als Spuren für alle Videos einbetten

# Add matching SRT files as subtitle tracks
for f in *.mp4; do
  srt="${f%.mp4}.srt"
  if [ -f "$srt" ]; then
    ffmpeg -i "$f" -i "$srt" -c copy -c:s mov_text "soft_${f}"
  fi
done

Was tun bei typischen Problemen?

„No such filter: subtitles" — FFmpeg wurde ohne libass-Support kompiliert. Ein vollständiges Build installieren:

# macOS
brew install ffmpeg

# Ubuntu/Debian
sudo apt install ffmpeg libass-dev

Untertitel erscheinen nicht — Das Encoding der Untertitel-Datei prüfen. FFmpeg erwartet UTF-8:

# Convert subtitle encoding to UTF-8
iconv -f ISO-8859-1 -t UTF-8 subs_latin.srt > subs_utf8.srt

Falsche Position oder Größe — Die Videoauflösung passt nicht zur angenommenen Auflösung der Untertitel. Mit force_style überschreiben:

ffmpeg -i input.mp4 -vf "subtitles=subs.srt:force_style='FontSize=24,MarginV=30'" output.mp4

Sonderzeichen erscheinen als Kästchen — Die Schriftart unterstützt die Zeichen nicht. Eine passende Schrift angeben:

ffmpeg -i input.mp4 -vf "subtitles=subs.srt:force_style='FontName=Noto Sans CJK SC'" output.mp4

MP4-Output scheitert mit „unknown codec" für Untertitel — MP4 unterstützt nur mov_text. Für andere Untertitelformate MKV nehmen oder einbrennen.

Cloud-Variante mit FFHub

Untertitel einbrennen heißt Re-Encoding und das ist CPU-hungrig — ein 1-Stunden-Video kann auf einer Standard-Maschine 20+ Minuten dauern. FFHub lässt FFmpeg per API in der Cloud laufen, du lagerst das Einbrennen auf schnelle Cloud-Server aus, deine Maschine bleibt frei.

Besonders nützlich, wenn du mehrere Untertitelversionen (verschiedene Sprachen, Stile) aus demselben Quellvideo brauchst.

Zusammenfassung

  • Hardcode (-vf "subtitles=subs.srt") für garantierte Sichtbarkeit auf allen Plattformen
  • Softcode (-c:s mov_text für MP4, -c:s srt für MKV) für umschaltbare Spuren
  • force_style nutzen, um SRT-Untertitel zu stylen
  • ASS-Format nutzen, wenn du reiches Styling und Animationen brauchst
  • Mit -map mehrere Untertitelsprachen ergänzen
  • Mit ffprobe vorhandene Untertitelspuren vor der Extraktion prüfen
  • Untertitel-Dateien immer als UTF-8 speichern

Verwandte Artikel

Untertitel ins Video einfügen mit FFmpeg | FFHub