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.