To main content

Videos in MKV umwandeln

Veröffentlicht von Benjamin Marwell am

Matroska-Logo (.mkv)Gerade als Linux-User oder auch als Windowsnutzer mit VLC Media Player wird man es oft merken: Viele Videos im Advanced Streaming Format (.asf oder .wmv) enthalten ein Windows Media Video und lassen sich nicht vernünftig spulen. Man kann Videos jedoch verlustfrei in einen anderen Mediencontainer stecken - das dauert nicht lange und ist einfach erklärt.

Container != Codec

Warum die Konvertierung verlustfrei ist, lässt sich nur verstehen, wenn man weiß was ein Mediencontainer ist. Genau genommen ist nämlich "AVI" kein Videoformat und auch MPEG ist keines. Es sind Container für Video- und Audiodaten. Diese können ihrerseits mit (fast) beliebigen Codecs komprimiert sein, etwa h264, mp3, Vorbis (typisch im OGG-Container) oder auch DivX respektive XviD. Da nur die »Hülle« dieser Daten getauscht wird, bringt uns dieses kein Nachteil.

Beispiele für Containerformate in der IT
Verschiedene Containerformate (© s.u.)

Warum MKV?

Matroska (.mkv) ist ein sehr vielseitiges Format. Es kann fast nahezu beliebige Codecs aufnehmen, etliche GiB Daten verwalten - und das auch in mehreren parallelen Spuren. Das ist wichtig, da wir überlicherweise nicht wissen, was in dem umzuwandelnden Video steckt. MKV bietet uns also genug Flexibilität, um ziemlich gefahrlos jedes Video aufnehmen zu können. Außerdem wird es von den beliebtesten Videoplayern (etwa VLC) oder auch von neuerer Hardware problemlos erkannt. Das kann nicht jeder Container - erst recht nicht AVI und WMV.

Das Umwandeln

… ist denkbar einfach. Um etwa in einem Verzeichnis alle WMV-Dateien in den MKV-Container zu bringen, nutzt man unter Linux folgenden Befehl:

for file in *.wmv; do ffmpeg -i "$file" -acodec copy -vcodec copy "$(basename "$file" .wmv).mkv"; done;
Kurz erklärt, was dieser Befehl bewirkt:
  • for file in *.wmv; do Alle Dateien mit der Endung .wmv werden aufgelistet und nacheinander (for = für jede einzelne Datei) der Variable $file  zugeordnet.
  • ffmpeg -i "$file" -acodec copy -vcodec copy "…"; Das Tool FFMpeg wird aufgerufen, um die Dateien umzuwandeln. Der Dateiname steht - wie oben erwähnt - in $file . Durch die acodec- und vcodec-Optionen mit dem Parameter »copy« geben wir an, dass keine Neukodierung der Video- oder Audiospur gewünscht ist. Die drei Auslassungspunkte (…) stehen für den Dateinamen, der durch einen zuvor ausgeführten Befehl ermittelt wird:
  • $(basename "$file" .wmv).mkv Der Dateiname $file  wird um die Dateiendung .wmv gekürzt. Nichts anderes macht der Befehl basename  in diesem Fall. Üblicherweise entfernt er auch den Pfad, aber der ist in diesem Beispiel ja nicht vorhanden, da in der Eingangsliste nur Dateien aus dem aktuellen Ordner mit der Endung .wmv stehen können. Außerdem wird .mkv  an den so ermittelten Dateinamen angehängt - der Punkt wird direkt übernommen und stellt keinen Verbindungsoperator dar, wie er in einigen Programmiersprachen genutzt wird.
  • done; Ende der Schleife - die nächste Datei, falls vorhanden, wird umgewandelt.

Das Ergebnis

Nun sind zunächst alle Dateien doppelt vorhanden - aber die alten Dateien mit der Dateiendung .wmv können gefahrlos gelöscht werden. Die neue Datei im .mkv-Gewand sollte sich nun wesentlich besser zurück- und vorspulen lassen, außerdem könnte unter Umständen die Synchronisation zwischen Ton und Bild besser sein als zuvor.

Weblinks

  Bild »Containerformat-Beispiele« von Ernst Rohlicek jun. <ernst.rohlicek@reflex.at>. Lizenz: Namensnennung-Weitergabe unter gleichen Bedingungen 2.5 US-amerikanisch (nicht portiert).