Videos mit Untertiteln umkodieren

Ich kodiere Videos um, weil mein Mediaplayer das Audioformat EAC3 nicht beherrscht. Wie bewahre ich alle Untertitel und nicht nur den ersten Stream?

Lesezeit: 2 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen
Von
  • Jürgen Schmidt

Ich kodiere meine Videos regelmäßig gemäß Ihrer Anleitung um, weil mein Mediaplayer das Audioformat EAC3 nicht beherrscht. Dazu verwende ich ffmpeg mit folgenden Optionen:

ffmpeg -i <videofile> -c:v copy -c:s copy -c:a ac3 <outfile>

Allerdings kopiert das nur je einen Audio- und Untertitel-Stream. Ich möchte aber gerne alle Untertitel bewahren, um den Film im Zweifelsfall auch mit deutschen Untertiteln abspielen zu können. Wie mache ich das?

Mehr von c't Magazin Mehr von c't Magazin

Dazu müssen Sie ffmpeg explizit ein Mapping übergeben. Das geht einfach, indem Sie -map 0 vor dem -c:v einfügen. Damit kopiert ffmpeg alle Streams.

Alternativ können Sie auch gezielt Untertitel auswählen. Allerdings schaltet das explizite Mapping die automatische Auswahl komplett ab, sodass Sie dann auch Audio- und Video-Streams spezifizieren müssen. Mit diesem Aufruf kopieren Sie beispielsweise den ersten Video-Stream, konvertieren die erste Audiospur und kopieren die englischen und die deutschen Untertitel:

ffmpeg -i <video> -map 0:v -map 0:a -map 0:s:0 -map 0:s:15 -c:v copy -c:s copy -c:a ac3 <outfile>

Das ergibt dann folgendes Mapping:

Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (eac3 (native) -> ac3 (native))
Stream #0:2 -> #0:2 (copy)
Stream #0:17 -> #0:3 (copy)

Zu beachten ist dabei, dass ffmpeg die Streams nach Typen getrennt zählt und dabei jeweils bei 0 beginnt. Aufgrund der vorangestellten Video- (0) und Audio-Streams (1) muss man den Stream Nummer 17 mit den deutschen Texten deshalb als 15. Untertitel-Stream (s:15) spezifizieren. Ein Aufruf von ffmpeg -i <videofile> zeigt Ihnen übrigens, was sich in welchen Streams befindet.

(ju)