Mein erstes Video – Teil 3: Video-Komprimierung
In dieser vierteiligen Artikel-Serie beschreibe ich die Vorgehensweise beim Erstellen meines ersten Videos für unsere Webseite:
1. Teil: Einleitung
2. Teil: Deinterlacing
3. Teil: Video-Komprimierung
4. Teil: Audio-Komprimierung
Video-Komprimierung
Ein Video besteht aus vielen Einzelbildern pro Sekunde. In den Daten, die man üblicherweise von der Videokamera erhält, ist jedes Bild einzeln kodiert. Dies ist auch für das Schneiden wichtig, weil somit auf jedes Einzelbild wahlfrei zugegriffen werden kann. Allerdings benötigt dies sehr viel Speicherplatz. Bei den Daten, die Premiere beim Capturing-Vorgang von meiner Kamera gespeichert hat, werden über 28 MBit, also 3,5 MByte pro Sekunde Video benötigt.
Bei den gängigsten Komprimierungsalgorithmen für Videos werden nur in gewissen Abständen komplette Bilder gespeichert (sogenannte I-Frames). Für die Bilder dazwischen, werden Blöcke in den Bildern untersucht, und dann nur mehr die Änderung (Bewegung und Skalierung) diese Blöcke gespeichert. Hier gibt es die ausgeklügelsten Methoden. Je aufwändiger, desto besser kann zwar komprimiert werden, desto rechenintensiver ist allerdings sowohl das Kodieren (beim Komprimieren des Videos), als auch das Dekodieren, wie es bei der Wiedergabe des Videos notwendig ist.
Diese Komprimierungsmethode ist auch der Grund, warum man bei diesen Videos meist nicht jedes einzelne Bild im Standbild-Modus anspringen kann. Einfach angesprungen können nur die I-Frames werden. Alle anderen Bilder müssen kompliziert aus etlichen anderen Bildern berechnet werden.
Eine Grafik, wie diese verschiedenen Bilder verwendet werden, ist auf Wikipedia unter “Group of Pictures” zu sehen.
Die üblichen Video-Komprimierungsstandards sind die MPEG-Standards. MPEG-1 wurde 1991 vorgestellt und ist ein relativ starres Format (fixe Bildgröße, etc.). Der Nachfolger MPEG-2 ist flexibler und wird auf DVDs oder häufig für digitales Fernsehen verwendet. Nach MPEG-2 wurde MPEG-4 Standard herausgebracht. Dieser beschreibt in 25 Teilen (bis jetzt) verschieden Standards für Videos. Einige davon behandeln Videokomprimierung. Teil 2 (Visual) behandelt unter anderem das Advanced Simple Profile (ASP), wie es bei DivX und Xvid zum Komprimieren verwendet wird. Teil 10 beschreibt das Advanced Video Coding (AVC). Dieser Codec für Videosignale ist technisch ident zum H.264-Standard. MPEG-4/AVC unterscheidet sich deutlich von MPEG-4/ASP und eignet sich auch für hoch aufgelöste Videos wie HDTV.
Kontainer-Formate
Videos werden in sogenannten Kontainer-Dateiformaten gespeichert. Typische Kontainer-Formate sind AVI, ASF, MOV oder MKV. Im Kopf dieser Dateien steht, mit welchen Komprimierungsverfahren ein Video komprimiert ist. Der Video-Player wählt dann den entsprechenden Video-Dekoder zum Dekodieren und Anzeigen des Videos aus. Das ist auch der Grund warum Videos im gleichen Dateiformat manchmal angezeigt werden können und manchmal nicht. Nur wenn am Computer auch der Dekoder installiert ist, der für’s Dekodieren notwendig ist, kann das Video angezeigt werden.
Hier möchte ich nochmals auf GSpot verweisen, das die Metainformationen von Videos anzeigt. Dabei auch den verwendeten Codec (Codec: Codierer + Decodierer).
DivX und Xvid
DivX ist ein MPEG-4/AVS Codec, der vorallem durch das (illegale) Komprimieren und Verteilen von Filmen bekannt geworden ist. Der Coder (zum Komprimieren einse Films) ist aber in der Pro-Version nicht kostenlos. Die Pro-Version bietet mehr Einstellungsmöglichkeiten und unterstützz Multithreading.
Als kostenlose Konkurrenz zu DivX hat sich der Open-Source-Codec Xvid etabliert. Der Codec unterstützt wie DivX MPEG-4/ASP. Seit neuesten auch den AVC/H.264-Standard.
Skalieren des Videos
Vor dem Komprimieren des Videos kann dieses, wenn gewünscht, skaliert (resize) werden. Ich habe dazu in VirtualDub den Filter Smart Resize von Donald Graft verwendet. Der Filter wird wieder ins “plugins”-Verzeichnis von VirtualDub kopiert und kann dann unter Video->Filters hinzugefügt werden.
Beim Skalieren ist zu beachten, dass die Länge und Breite jeweils ein Vielfaches von 16 Pixel sein soll, da dann die Komprimierung effizienter ist. Es stehen mehrere Filter zum Skalieren zur Verfügung. Welcher hier der beste ist, wird häufig diskutiert. Es hängt davon ab, ob vergößert oder verkleinert wird und wie stark die Komprimierung ist. Bei starker Komprimierung ist der Skalierungsfilter eher nebensächlich. Da ist dann eher die Geschwindigkeit der Skalierung interessanter. Ich habe immer Bilinear oder Bicubic verwendet. Bei den “Precise”-Varianten soll das Bild schärfer werden.
Laut diversen Artikeln ist für das Vergrößeren Bicubic besser als Bilinear. Für’s Verkleinern und Komprimieren mit niedrigerer Bitrate ist Bilinear meist sinnvoller.
Komprimierung mit Xvid
Da DivX nicht frei ist und die verschiedenen Version bzw. Module (Frei, Pro, DVD-Plugin) etwas undurchsichtig waren, habe ich mich entschlossen Xvid zur Komprimierung zu verwenden. Der Xvid Codec kann unter www.xvid.org heruntergeladen werden. Nach dem Installieren ist er unter VirtualDub im Menü Video -> Compression verfügbar.
Der XVid Codec hat extrem viele Einstellungsmöglichkeiten. Für diese Einstellungen habe ich mich an folgende sehr ausführliche Anleitung und Beschreibung gehalten: Wissenswertes rund um Xvid.
Für die Berechnung der durchschnittlichen Bitrate habe ich die gewünschte Datei-Größe und Länge des Videos verwendet. Falls die Qualität des so entstandendn Videos zu gut oder schlecht war, habe ich die Bitrate angepasst und neu komprimiert.
Nachdem die Einstellungen für den Resize-Filter und für die Xvid-Komprimierung vorgenommen sind, kann das Video gespeichert werden. Ich habe allerdings zuvor noch unter Audio->No Audio ausgewählt. Ich konnte nämlich unter VirtualDub keinen MP3-Encoder zum Laufen bringen, sodass der Ton im WAV-Format – also unkomprimiert – enthalten war. Jetzt konnte ich unter File->Save as AVI das komprimierte Video erstellen.
Weiter geht’s mit Teil 4: Audio-Komprimierung
1. Teil: Einleitung
2. Teil: Deinterlacing
3. Teil: Video-Komprimierung
4. Teil: Audio-Komprimierung
7. Juni 2008 um 12:55
[...] 3. Teil: Video-Komprimierung [...]
7. Juni 2008 um 12:55
[...] 3. Teil: Video-Komprimierung [...]