Das Programm ffmpeg zum Verarbeiten von verschiedenen Audio- und Videodaten hatte leider eine Zeit lang einen Fehler, so daß die erzeugten Ogg-Dateien von ogg-info
als problematisch angezeigt wurden:
0sollte vermieden werden.
0, was außerhalb der drei Header-Seiten nicht passieren sollte.
0, was das Suchen innerhalb der Datei verhindert.
Die Dateien konnten zwar noch alle abgespielt werden, jedoch war das nicht-spulen-können eine zu große Einschränkung, weshalb die Dateien korrigiert werden sollten.
Vorbis ist ein Audio-Codec und ein Datenformat zur komprimierten Speicherung von Audiodaten. Das Format ist verlustbehaftet und erzielt ähnliche Komprimierungsraten wie MP3.
Ogg ist ein Container-Format für Multimediadaten. Neben Audio-Daten können auch Video-Daten und Untertitelinformationen darin gespeichert werden. Dazu werden die einzelnen Pakete der Codecs den Zeitstempeln nach geordnet ineinander verwoben und auf sog. Seiten verteilt. Die Pakete werden dazu in einzelne Segmente zu maximal 255 Byte zerhackt und normalerweise zu Seiten von ca. 4 KiB zusammengestellt.
oggdec ALT.ogg | oggenc NEU.ogg
verschlechtert nicht nur die Qualität, sondern hat eine hohe Laufzeit, da die Datei nicht nur dekomprimiert, sondern auch wieder effizient komprimiert werden müsste. Die Lösung schied aus diesen beiden Gründen aus.
Nach Möglichkeit sollen die Änderungen in-place erfolgen: Sowohl die Seriennummer als auch die Granule-Position stehen im Ogg-Header. Die Seriennummer kann direkt geändert werden und erfordert zusätzlich die Neuberechnung der crc32-Prüfsumme.
Zur Berechnung der Granule-Position müssen die Daten allerdings dekodiert werden, was aber wesentlich effizienter als die Enkodierung ist. Danach kann die Granule-Position sowie die Prüfsumme aktualisiert werden.
Der Overhead läßt sich so aber nicht in-place verringern, denn dazu müssen mehrere Pakete auf eine Seite umgepackt werden.
Die Programm sind in C geschrieben und lassen sich mit gcc übersetzen. Neben einem selbstgebauten Parser für Ogg-Dateien wird aber auch libogg für das Re-Multiplexing und libvorbis für die Neuberechnung der Granule-Position benötigt. Ein Makefile ist vorhanden.
Die Quelltexte sind über git clone http://pmhahn.de/git/ogg/ verfügbar.