H5P-Dateien sind ein Lerninhaltsformat, das in verschiedenen Bildungsumgebungen für interaktive Online-Inhalte verwendet wird. In diesem konkreten Fall hatte ich eine H5P-Datei vorliegen, die aufgrund einer ganzen Reihe kaum komprimierter Mediendateien auf ~800 MB angewachsen war. Da das einzelne Austauschen der über 50 Mediendateien über die GUI sehr mühsam gewesen wäre, habe ich den Prozess vereinfacht. Eine H5P-Datei ist im Prinzip eine etwas spezielle (s.u.) umbenannte ZIP-Datei, die man im Prinzip lokal entpacken, nachbearbeiten und wieder verpacken kann.

H5P-Datei entpacken

Zunächst entpacken wir die Datei in das Verzeichnis H5P

unzip file.h5p -d H5P

Mediendateien komprimieren

Dann komprimieren wir die Videos und die Audios mittels ffmpeg. Die Paramter sind natürlich meinungsbehaftet und YMMV, aber in diesem Fall aus meiner Sicht angemessen. Wegen FFmpeg cannot edit existing files in-place speichern wir die Datei eine Verzeichnisebene höher und verschieben sie danach ins Unterverzeichnis (und überschreiben dabei die bestehende Datei):

for i in H5P/content/videos/*.mp4; do ffmpeg -i "$i" -vf "scale=-1:720" -b:v 500k -c:a aac -b:a 128k "H5P/content/$(basename "$i")" && mv "H5P/content/$(basename "$i")" "H5P/content/videos"; done

for i in H5P/content/audios/*.mp3; do ffmpeg -i "$i" -codec:a libmp3lame -b:a 128k -ar 44100 -ac 2 -y "H5P/content/$(basename "$i")" && mv "H5P/content/$(basename "$i")" "H5P/content/audios"; done

Dateien in Archiv zurückbauen

Anschließend können wir den Verzeichnisinhalt H5P zu einer H5P-Datei zurückbauen. Wichtig ist der Schalter -D, der für --no-dir-entries steht und das Erstellen von Verzeichniseinträgen verhindert, an dem sich H5P stören würde:

cd H5P && zip -r -D -X ../file-edited.h5p *

Et voilà. Die Datei war danach übrigens auf ~130 MB zusammengeschrumpft.