Video-Dateien für den Einsatz im Web optimieren

Ziel

  1. Wenn Videodateien über eine Lernplattform oder einen Clodspeicher bereitgestellt werden, müssen diese auf jedem System direkt im Browser abgespielt werden können.
  2. Die Wiedergabe soll auch bei schlechter Internetverbindung möglichst unterbrechungsfrei erfolgen, ein Schul-Proxy darf nicht „verstopft“ werden, und privates mobiles Datenvolumen sollte geschont werden.

Weg

  1. Als Videoformat wird immer als Containerformat MP4 mit der Kombination aus dem Video-Codec H264 und dem Audio-Codec AAC erzeugt.
  2. Für Filme, die auch auf Mobilgeräten der Endnutzer wiedergegeben werden sollen, wird zur Reduzierung der Dateigröße eine Zielauflösung von 640x360 (Wide 360p) vorausgewählt.

Werkzeug „Video-Umwandler“

Download

Über das Programm

Dieses Programm erlaubt die Umwandlung, Skalierung, Komprimierung und Recodierung (fast) beliebiger Quell-Videodateiformate nach MP4. Als Ausgabe-Auflösungen sind die bei Streaming-Plattformen wie Youtube, Vimeo oder den Playout-Servern der Öffentlich-Rechtlichen Rundfunkanstalten üblichen Zielauflösungen im 16:9 Format auswählbar.

Nicht möglich sind damit das (Be-)Schneiden wenn das Bildschirmverhältnis nicht 16:9 beträgt und ebenso nicht das (Zu-)Schneiden bzw. das (Aus-)Schneiden von Filmsequenzen aus Video-Dateien.

Software-Voraussetzungen (alle Open Source)

Installation

Installation unter Ubuntu-Linux 20.04

$ sudo apt install python3 ffmpeg
$ sudo pip3 install ffmpeg-python

wenn das heruntergeladene Programm im Verzeichnis Downloads liegt, muss diese Datei zunächst einmalig ausführbar gemacht werden, entweder im Terminal:

$ cd ~/Downloads
$ chmod +x video-umwandler.py

ein Start ist dann auch vom Terminal aus möglich mit:

$ cd ~/Downloads
$ ./video-umwandler.py

oder über Rechtslick > Eigenschaften im Reiter Zugriffsrechte ein Häkchen setzen vor ☑ Datei als Programm ausführen.

Anschließend kann über einen Doppelklick auf die Datei das Programm direkt gestartet werden.

Installation unter Windows (nur 64bit)

  1. Herunterladen der aktuellsten 3er Version von python.org/downloads/
  2. im Installer auswählen: ☒ Add Python 3.* to PATH
  3. über die Windowssuche  cmd  eingeben und in der "schwarzen Box" dann hinter dem Eingabeprompt > dann eingeben:
    pip install ffmpeg-python
    und die Eingabetaste drücken.
  4. Herunterladen der aktuellsten Version von ffmpeg.org/download.html#build-windows
  5. Entpacken und das Download-Verzeichnis dem Pfad hinzufügen, damit ffmpeg von dem Python-Wrapper gefunden werden kann.
  6. Damit unter Windows beim Programmstart kein zusätzliches Terminalfenster geöffnet wird, kann man optional nach dem Herunterladen der Datei video-umwandler.py die Dateiendung von .py ändern auf .pyw .

Werkzeug-Alternativen

Sys­tem App- bzw Soft­ware-Beispiel
iOS/iPad­OS z.B. Media Converter Flex (kosten­pflichtig, Video­konver­tierung)
*
An­dro­id *
Win­dows, mac­OS, Li­nux Handbrake (Open Source, Video­kon­ver­tierung),
FFMPEG (Open Source, Codec-Frame­work und Komando­zeilen­programm),
VLC (Open Source, Video­player und Video­konver­tierung und Screen­cast­aufnahme)
Shotcut (Open Source, Video­schnitt und Video­bear­beitung)
auschließlich Windows File Converter (Free­ware, Audio- und Video­konver­tierung)

* Hier wird eine Suche im jeweiligen App-Store des Mobilbetriebssystemanbieters nach weiteren kostenfreien Werkzeugen empfohlen

Anleitungen zu den vielfältigen Werkzeugalternativen findet man dann mit den Suchbegriffskombinationen    Anleitung Videos konvertieren nach mp4 [Programmname] [System]    bzw.    Anleitung Audio konvertieren nach mp3 [Programmname] [System].

Bei der Wahl eines Werkzeugs sollte u.a. auf die folgenden Punkte geachtet werden:

  1. Das Programm ist vollständig kostenfrei nutzbar.
  2. Im Falle eines online-Dienstes oder einer App werden keine Mediendateien auf einen externen Server hochgeladen.
  3. Es werden keine Rechte an den Originaldateien oder an den umgewandelten Dateien übertragen.

Schülerinnen und Schüler sollten dies vor dem Einsatz immer mit ihren Eltern besprechen.

Tipp: Falls man nachträglich viele bereits vorhandene Videodateien speziell für den mobilen Gebrauch z.B. auf Wide 360p mit 640x360 herunterrendern und ggf. nach MP4 umwandeln möchte, so ist dies auch per Stapelverarbeitung mit einem Skript denkbar. Das folgende Beispiel enthält hierfür ein Shellskript für Linux und macOS.
Die Quell-Videodateien werden hierzu einfach alle in das Verzeichnis originaldateien abgelegt. Nach der Umwandlung liegen die erzeugten Ziel-Videodateien dann im Verzeichnis ausgabedateien.

Entsprechender Kommandozeilenbefehl (Bash) unter Linux für den eigentlichen Umwandlungsschritt, wie er auch von dem Python-Programm Video-Umwandler im Hintergrund durchgeführt wird:

$ ffmpeg -i "${infile}"\
            -movflags faststart\
            -c:v libx264\
            -c:a aac\
            -b:a 128k\
            -s:v ${zielbreite}x${zielhoehe}\
            "${outfile}.mp4"

Hintergrundinformationen

Filme bestehen aus Einzelbildern

Das menschliche Auge kann Bilder unterhalb einer Bildrate von etwa 14 Bildern pro Sekunde (frames per second, fps) gerade noch als Einzelbilder wahrnehmen. Wenn diese Bildrate überschritten wird, entsteht der Eindruck eines zunächst etwas "ruckeligen" Films. Ab einer Bildrate von etwa 24 Bildern entsteht ein flüssiger Eindruck.

Übliche Bildschirm-Seitenverhältnisse sind 4:3 (analoges Fernsehen) und 16:9 (digitaler Wide-Screen).

Das auf den drei Stäbchentypen in der Netzhaut beruhende additive Rot-Grün-Blau (RGB)-System konnte auf den vorhandenen alten Schwarz-Weiß (SW)-Fernsehern nicht verwendet werden, da Farbfilme dort sonst gar nicht angezeigt worden wären. Daher wurden zu der Helligkeitsinformation (Luminanz, Y) für SW einfach zusätzliche Farbinformationen (Chrominanz, Cr und Cb) hinzugefügt, die in Farbfernsehern dann beide verarbeitet wurden.

Eigenschaften eines Einzelbilds in einem Video

Ein Einzelbild hat u.a. die Eigenschaften Bildgröße, Farbtiefe und ggfs. Bildkompression bzw. Metadaten. Aus den entsprechenden Werten resultiert dann die Dateigröße.

Die ungefähre Bilddatengröße unkomprimierter Bilddateien errechnet sich also wie folgt:
Die Metadaten im Dateianfang (Header) werden hier vernachlässigt.
Dateigröße = Anzahl der Pixel Breite x Anzahl der Pixel Höhe x Farbinformationen in Bits pro Pixel
Dateigröße = 720 px x 576 px x 30 bpp
Dateigröße = 12 441 600 b
Dateigröße ≈ 1,48 MB
Bei einer Einzelbildanzahl von 1500 (bei einer Bildrate von 25 fps) pro Minute Film wären das (noch ohne Ton!) bereits etwa 2,2 GB Speicherplatzbedarf pro Filmminute! Bereits die Einzelbilder müssen also unbedingt verkleinert (komprimiert) werden.

Verlustbehaftete Komprimierung

Es werden möglichst nur solche Daten entfernt, deren Fehlen wenig oder gar nicht bemerkt wird.
z.B. JPEG für Pixelgrafik:
Viele Farbtöne werden verworfen, da Helligkeitsunterschiede stärker wahrgenommen werden. Auch werden die RGB Farbinformationen nach YCrCb umgerechnet;
z.B. MP3 für Audiodateien:
Nur diejenigen Töne werden nach Regeln der Psychoakustik herausgefiltert, welche nur unterschwellig gehört werden.

In Videodateien liegen die Videodaten und die Audiodaten in einem Behälter (Container) vor

Das Containerformat legt den Ort fest, an dem die eigentlichen Inhaltsdaten liegen, sowie die Art der jeweils spezifischen zulässigen Codecs. Im gleichen Containerformat können verschiedene Codecs vorliegen. Diese Information steht meist am Dateianfang (Header). Der Multiplexer trennt beim Abspielen die Video- und Audiodaten, der Demultiplexer führt sie wieder zusammen, etwa beim Umcodieren. Ein Codec (von coder und decoder) bezweichnet sowohl das jeweilige (Kompressions-/Dekompressions-) Verfahren als auch das dazu notwendige Programm.

Für Videocodecs werden meist folgende Video-Kompressionsverfahren kombiniert:

  1. Komprimieren der Einzelbilder (JPEG, daher verlustbehaftet)
  2. Speicherung nur der Unterschiede zweier (oder mehrerer) aufeinanderfolgender Frames.
  3. Evtl. Verringerung der Anzahl der Frames

Bei modernen, stärkeren Kompressionsverfahren für hochauflösende Bilder, werden die Informationen oft erst beim Abspielen entpackt, s o dass die Anforderungen an die Rechnerleistung viel höher sind, als z.B. noch bei MPEG-2!

Moderne Formate mit breiter Unterstützung: MP3 und MP4

Moderne Webbrowser unterstützen mit dem HTML5 Standard das Abspielen geeigneter Audio- und Videoformate direkt im Browser. Leider werden noch nicht alle Formate von allen Browsern und auf allen Plattformen unterstützt.

Die größte Schnittmenge über alle Browser und Plattformen hinweg hat die Kombination:

Medien­typ Con­tainer­for­mat Video­codec(s) Audio­codec(s)
Au­dio MP3 --- aac, lame
Vi­deo MP4 h264 aac

Unter iOS/iPadOS bereiten die folgenden Container-Codec-Kombinationen häufig Schwierigkeiten, obwohl diese formal HTML5 fähig sind und sollten daher vermieden werden:

Medien­typ Container­format Vi­deo­codec(s) Audio­codec(s)
Au­dio WEBM --- opus
Au­dio OGG --- opus
Au­dio OGG --- vorbis (veraltet)
Vi­deo WEBM VP8, VP9, h264 opus
Vi­deo OGG Theora (veraltet) vorbis (veraltet)

Gänzlich ungeeignet sind für den Einsatz im Browser:

Me­dien­typ Container­format Vi­deo­codec(s) Au­dio­codec(s)
Au­dio WAV --- nicht kom­pri­mier­te PCM-Roh­daten
Au­dio AIFF --- Meta­infor­mation als ID3-Tag und nicht kom­pri­mierte PCM-Roh­daten
Au­dio M4A --- ver­schie­dene
Vi­deo MP4 HEVC ver­schie­dene
Vi­deo MOV ver­schie­dene ver­schie­dene
Vi­deo M4V ver­schie­dene ver­schie­dene
Vi­deo MJPEG ver­schie­dene ver­schie­dene
Vi­deo AVI ver­schie­dene ver­schie­dene
Vi­deo MPG MPEG 2 ver­schie­dene

Da das gleiche Containerformat meist mehrere unterschiedliche Dateiendungen erlaubt, ist eine eindeutige Zuordnung und Analyse des inneren Aufbaus einer Audio- oder Videodatei nur mit Hilfe eines entsprechenden Programms möglich (s. Werkzeuge).

Tipp: Mit dem bei FFmpeg enthaltenen Kommandozeilen-Werkzeug ffprobe können die Eigenschaften einer Videodatei analysiert werden, ohne diese zu verändern:

ffprobe beispielvideo.mp4

Geeignete Ziel-Auflösungen je nach Einsatzzweck

Auf­lösungBrei­te × HöheSei­ten­ver­hält­nisDatei­größe pro Mi­nutege­eig­net für
mittel­hoch (HD ready, 720p)1280 × 72016:9ca. 30 MBFilme, die nur ein­mal zen­tral ge­laden und z.B. über einen Beamer im Klassen­raum ge­zeigt werden sollen, wie ein einem Kino
niedrig (Wide 360p)640 × 36016:9ca. 10 MBFilme, die auf Mobil­gerä­ten von jedem Nut­zer indivi­duell abge­spielt werden

Web-Optimierung mit einem Inhaltsverzeichnis am Dateianfang

Mit der Umwandlungsoption -movflags faststart wird im MP4 Container mit moov eine Art Inhaltsverzeichnis an den Anfang der Datei geschrieben. Dadurch kann das Abspielen im Browser direkt beginnen und es ist keine zusätzliche Browserabfrage zum Laden des Dateiendes notwendig.

Kompatibles Farbprofil auswählen

Mit der Umwandlungsoption pix_fmt='yuv420p' wird ein nicht nur für iOS/iPadOS Geräten sondern auch für Android Geräte geeignetes Farbprofil beim Recodieren mit dem H264 Videocodec eingestellt. Hierdurch ist eine Wiedergabe auf allen Gerätetypen möglich und es wird ggfs. auch eine kleinere Dateigröße erzielt.

Metadaten in Videodateien

Bei manchen Containerformaten wie bspw. Matroska (MKV) können in einer Videodatei zusätzliche Metadaten enthalten sein, wie dies häufig bei Bilddateien (Stichwort Exchangeable Image File EXIF) oder Audiodateien (Stichwort ID3-Tags) der Fall ist. Dies können bspw. von der Kamera oder einem Aufnahmeprogramm automatisch ergänzte Informationen sein zu Ortsangaben (Geolocation), Zeitstempel einer Aufnahme, Benutzername, Inhaltsbeschreibungen, u.v.m.
Vor einer Veröffentlichung ist es daher ratsam, diese Metadaten zur Kontrolle auszulesen bzw. diese zu bereinigen, sofern sie nicht durch die Recodierung verloren gehen. Ein Beispielaufruf könnte lauten:

ffmpeg -i video.mp4 -f ffmetadata metadaten_video.txt

Audio-Spur aus einem Film extrahieren

Der Audio-Inhalt einer Video-Datei kann aus dieser einfach extrahiert und als neue MP3-Datei gespeichert werden.

ffmpeg -i video.mp4 -acodec libmp3lame -ab 192k audio.mp3

Videos, die über HLS gestreamt werden, herunterladen

Falls man bspw. selbst einen Streamingserver einsetzt, um eigene Video-Dateien automatisch auf diesem in verschiedene Zielauflösungen zu bringen und anschließend möchte man z.B. eine davon wieder herunterladen, so kann man den folgenden Befehl einsetzen. Hierbei kann entweder automatisch die höchste zur Verfügung gestellte Videoqualität heruntergeladen werden oder aus dem vom Streaming-Server zur Verfügung gestellten Angebot ggfs. eine manuell festgelegte selbst gewählt werden.
Vor einem Download von Filmen allgemein muss aber geklärt werden, ob man ggfs. die Nutzungsrechte für den ggfs. privaten Gebrauch oder aber Unterrichtseinsatz besitzt.

Allgemein liegen auf einem Streaming-Server die Video-Dateien üblicherweise schon fertig vorbereitet und dauerhaft in verschiedenen Auflösungen gespeichert vor. Der Player im Webbrowser lädt dann eine Playlist-Datei (typischerweise mit der Endung .m3u8). In dieser Datei sind dann typischerweise für verschiedene Bandbreiten wiederum weitere Playlist-Dateien für die verschiedenen Auflösungen verlinkt, welche schließlich auf Bruchstücke der Mediendateien "Chunks" verweisen. Diese Bruchstücke werden dann bei Bedarf an der entsprechenden Stelle im Medium beim Abspielen "gestreamt", d.h. die Video-Datei muss nicht komplett heruntergeladen und im Speicher vorgehalten werden, sondern es ist zu jedem Zeitpunkt immer nur ein bestimmter Ausschnitt der Medien-Datei aktiv im Player vorzuhalten. Wenn sich die Bandbreite beim Endnutzer ändert, kann sich die ausgelieferte Videoqualität dynamisch anpassen. Daher werden solche Verfahren auch als adaptives Streaming bezeichnet.

ffmpeg -i playlisturl.m3u8 -c copy -bsf:a aac_adtstoasc video.mp4

Ein Film kann in Einzelbilder zerlegt werden

Mit dem folgenden Befehl kann ein Film in Einzelbilder zerlegt werden.

ffmpeg -i video.mp4 -r 1 -s 640x360 -f image2 video_zerlegt-%03d.jpg

Einzelbilder zu einem Film verketten

Mit dem folgenden Befehl kann aus den Einzelbildern wieder ein Film erzeugt werden (natürlich ohne Ton).

ffmpeg -f image2 -i video_zerlegt-%03d.jpg -r 12 -s 640x360 video_zusammengesetzt.mp4

Eine WAV Audio-Datei nach MP3 umwandeln

Eine WAV-Datei kann mit dem folgenden Befehl nach MP3 konvertiert werden. Die Audio-Bitrate in kbit/s ergibt sich aus einem Kompromiss aus benötigtem Speicherbedarf und Tonqualität.

ffmpeg -i audio.wav -acodec libmp3lame -ab 128k audio.mp3

Framerate

Die Bildwechselgeschwindigkeit - wie in alten Diaprojektoren mit kleinen Foto-Rahmen (daher Framerate) beträgt häufig 24, 25, 30, 48, 50 oder 60 Bilder pro Sekunde. Bei sehr hohen Frameraten von 60 fps sollte diese ggfs. halbiert werden auf 30 fps.

Weitere Wege

Wenn die Video-Datei keine personenbezogenen Daten enthält und darüber hinaus auch urheberrechtlich unbedenklich ist, könnten Lehrkräfte mit einem eigenen Account diese in einen Streaming-Dienst wie bspw. Youtube oder Vimeo hochladen und dort die Umandlung vornehmen.

Falls der oben beschriebene Weg gewählt wird, eine - im Einzelfall möglichst kleine - Video-Datei direkt in die eigene Lernplattform oder einen schulischen Cloudspeicher hochzuladen, so benötigen viele davon dort in der Summe immer noch viel Speicherplatz und während der Übertragung auch Bandbreite, was ohne Einsatzes eines Content-Delivery-Networks (CDN) möglicherweise einen Engpass darstellt.

Falls hingegen ein externer Streaming-Dienst direkt zum Ausspielen der Videos genutzt wird, tritt das Problem auf, dass Schülerinnen und Schüler als Nutzende beim Abruf mindestens ihre IP-Adresse, je nach Cookie-Einstellungen und Anmeldezustand bei verschiedenen Online-Diensten im Browser aber noch weitere personenbezogene Daten übermitteln.

Ein denkbarer Lösungansatz für dieses Dilemma wäre ein von den Ländern oder dem Bund für den schulischen Bereich bereitgestellter Video-Streaming-Server, der entsprechend Datenschutz freundliche Einstellungen und angepasste Nutzungsbedingungen umsetzt und ggfs. an die Identitätsmanagement-Systeme der Bildungsplattformen der verschiedenen Länder angeschlossen werden könnte.
Leider existiert zumindest derzeit kein entsprechendes Angebot.