2013/08/17

Videomaterial verlustfrei trimmen mit ffmpeg

Aus gegebenem Anlass musste ich just eine mehrere Gigabyte große Videodatei verlustfrei zurechtstutzen. Ich wollte mich nicht der gesamten Videodatei im Editor herumschlagen, obwohl ich nur einen kleinen Teil brauchte. Normalerweise ist das unerheblich, aber in diesem Fall möchte ich minutenlange Sequenzen von unscharfem Laub mit langsam wanderndem Sonnenstand nicht archivieren (hallo Wolfgang?! *lach*). Da müsste doch ffmpeg ideal sein...?

Ja, ffmpeg ist es. Ich habe ehrlich gesagt keine Ahnung, was dieses Programm alles kann ... aber seine Kommandozeilen-Optionen sind Legion.

Hier ist mir nur wichtig, dass ich damit herrlich verlustfrei einen Teil aus einem Video herausziehen und getrennt abspeichern kann. Im Fall meiner Videodateien aus der GoPro HD Hero 3 sieht das beispielsweise so aus:
ffmpeg -i video.mp4 -ss 00:11:00 -t 00:01:00 -vcodec copy -acodec copy cutvid.mp4
Die einzelnen Optionen bedeuten hierbei:
  • -i Datei: der Name der Quell-Videodatei, hier «video.mp4».
  • -ss Startzeit: die Startzeit im Format HH:MM:SS, ab dem das Videomaterial verlustfrei kopiert werden soll.  Fehlt diese Option, dann kopiert ffmpeg ab Beginn der Quell-Videodatei.
  • -t Länge: die Dauer des zu kopierenden Abschnitts, im Format HH:MM:SS.
  • Ausgabedatei: der Name der mit dem Abschnitt neu zu erstellenden Videodatei. Hier als Beispiel eben «cutvid.mp4».
Da verlustfrei kopiert werden soll, müssen der tatsächliche Beginn und die Länge des ausgeschnittenen Bereichs nicht präzise mit den Angaben beim Aufruf von ffmpeg übereinstimmen. Der Grund ist, dass ein vollständiger I-Frame am Start benötigt wird, damit keine Umkodierung erforderlich wird. Deshalb nimmt sich ffmpeg hier den letzten vor der gewünschten Startzeit liegenden I-Frame und legt von dort los.

Keine Kommentare: