balrogg: Verliesvrije recompressor voor Vorbis en Opus

Releases zijn niet backwards of forwards compatibel totdat versie 2.0 is bereikt.

balrogg is gelicentieerd onder GNU GPL versie 3 (zie COPYING). Problemen kunnen worden gemeld aan Kamila Szewczyk via k@iczelia.net. Het project is gehost op https://github.com/iczelia/balrogg.

Snelstart

De volgende commando's kunnen worden gebruikt:

  • Comprimeren: balrogg e music.ogg music.blr
  • Uitpakken: balrogg d music.blr music.ogg
  • Batchverwerking: balrogg -b e .ogg .opus
  • Comprimeren met voortgangsbalk en maximale inspanning: balrogg --progress -9 e music.ogg music.blr

Toelichting:

  • e staat voor compress (comprimeren) en d voor expand (uitpakken).
  • balrogg detecteert automatisch de gebruikte codec.
  • Met de vlag -b wordt elk overgebleven pad verwerkt met gebruik van de beschikbare cores en het geheugen.
  • Bij coderen wordt de extensie .blr toegevoegd; bij decoderen wordt deze verwijderd.
  • Grotere bestanden worden eerst verwerkt.
  • -p of --progress toont een voortgangsbalk op stderr voor zowel coderen als decoderen, waarbij elke Vorbis-tuningtrial afzonderlijk wordt geïdentificeerd. Gebruik --progress-lines voor logs. Bij batchverwerking wordt de voortgang via afzonderlijke regels getoond, gelabeld met de bestandsnaam.

Installatie

Gebruik uw pakketbeheerder of download een binary via GitHub Releases. Om een release tarball te bouwen, voert u de volgende commando's uit:

./configure
make
sudo make install

Het project maakt gebruik van C99 en enkel de C- en math-libraries. De Opus-parser onder src/opus is afgeleid van libopus.

Configure-opties

OptieEffect
--enable-sanitizersSchakelt ASan en UBSan in voor tests
--disable-simdBouwt enkel de portable mixer
--with-windows-target=win95Richt zich op Windows 95 op een i486 (MinGW, 32-bit)

Let op: Voer eerst ./bootstrap uit bij het bouwen vanuit een Git-checkout. Hiervoor zijn autoconf en automake vereist.

Effort (Inspanning)

Met de opties -1 tot en met -9 selecteert u het niveau van inspanning; de standaardwaarde is -9.

  • Niveaus -1 t/m -4: Elk niveau voegt een residue-model stage toe, wat ook invloed heeft op de decodeersnelheid.
  • Niveaus -4 t/m -9: Deze niveaus breiden enkel de parameterzoekopdracht uit, waardoor de decodeersnelheid voor deze niveaus gelijk blijft.

Vorbis-tuning evalueert het volledige bestand bij elke geselecteerde instelling. De beste kandidaat wordt bewaard in het doelbestand; tijdens een trial zijn maximaal de beste en de huidige kandidaat aanwezig.

Resultaten voor een muziekbestand van vijf megabyte

NiveauVorbisOpus
-18,3% kleiner bij 6,4 MB/s4,0% kleiner bij 4,2 MB/s
-99,8% kleiner bij 2,9 MB/s4,8% kleiner bij 2,4 MB/s

Beperkingen (Caveats)

De encoder weigert bestanden die niet exact gereproduceerd kunnen worden. Dit omvat bestanden met:

  • Foutieve checksums;
  • Ongeldige paginavolgordes;
  • Niet-ondersteunde Vorbis-functies;
  • Geen finale end-of-stream pagina.

Vorbis: Pakketten met extra padding of alternatieve floor subclass keuzes behouden normale floor en residue compressie. Classword correcties en padding worden apart gemodelleerd. Verkorte pakketten (packet peeling) maken gebruik van een adaptief byte-model.

Opus: Ondersteuning is beperkt tot één mono- of stereostream met channel mapping family 0. Pakketten (inclusief OpusHead en OpusTags) zijn beperkt tot 61.440 bytes; extended frame headers en padding worden binnen deze limiet ondersteund. Geketende (chained) en multichannel Opus-bestanden worden geweigerd.

Wanneer een bestand wordt geweigerd, genereert het programma een diagnose en een exit-status 1.

Exit-status

CodeBetekenis
0Succes
1Ongeldige, niet-ondersteunde of onherkende invoer
2Gebruiksfout (Usage error)
3Fout bij bestandsacces
4Interne fout

In batchmodus wordt de hoogste niet-nul status gerapporteerd die door enig bestand is gegenereerd.

Prestaties en Portabiliteit

Elk bestand gebruikt één thread en vereist invoer- en uitvoerbestanden die seekable zijn. Vorbis-modelpagina's worden alleen toegewezen wanneer ze worden gebruikt, zonder te vertrouwen op deferred OS allocation.

Op ondersteunde hosts wordt een limiet van 2 GiB aan procesgeheugen toegepast om onredelijke allocaties te weigeren. U kunt BLR_MEMCAP instellen op een andere grootte in MiB, of op 0 om de limiet uit te schakelen.

Archieven zijn draagbaar tussen verschillende hosts.

Windows-builds

Windows-builds maken gebruik van MinGW:

./configure --host=x86_64-w64-mingw32 CC=x86_64-w64-mingw32-gcc LDFLAGS=-static
make

Windows 95-builds

Een build voor Windows 95 gebruikt een kleine KERNEL32 runtime en richt zich op i486:

./configure --host=i686-w64-mingw32 --with-windows-target=win95 \
CC=i686-w64-mingw32-gcc LDFLAGS=-static
make && make win95-check

win95-check verifieert de loader baseline, PE-vlaggen en KERNEL32 imports.

MS-DOS-builds

Een MS-DOS build maakt gebruik van DJGPP en vereist een i383 met een DPMI-host zoals CWSDPMI:

./configure --host=i586-pc-msdosdjgpp CC=i586-pc-msdosdjgpp-gcc
make

In DOS batchmodus wordt de extensie vervangen en worden bestanden serieel verwerkt. song.ogg wordt song.blr, en wordt vervolgens weer uitgepakt naar song.ogg of song.opu voor Opus.