balrogg is een open-source tool (gelicentieerd onder GNU GPLv3) die bedoeld is om .ogg (Vorbis) en .opus audiobestanden verliesvrij verder te comprimeren. De resulterende .blr-archieven zijn doorgaans 8-12% kleiner voor Vorbis en 3-8% kleiner voor Opus.
Kernpunten van de software:
- Functionaliteit: De tool biedt commando's voor comprimeren (
e) en uitpakken (d), ondersteunt batchverwerking en beschikt over een voortgangsbalk.
- Inspanningsniveaus: Met opties van
-1 tot -9 kan de gebruiker de compressie-intensiteit instellen, waarbij hogere niveaus een betere ratio bieden ten koste van de snelheid.
- Portabiliteit: Naast moderne systemen is balrogg specifiek buildbaar voor legacy-omgevingen zoals Windows 95 en MS-DOS.
- Beperkingen: De encoder weigert bestanden die niet exact gereproduceerd kunnen worden, zoals bestanden met foutieve checksums of multichannel Opus-streams.
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
| Optie | Effect |
--enable-sanitizers | Schakelt ASan en UBSan in voor tests |
--disable-simd | Bouwt enkel de portable mixer |
--with-windows-target=win95 | Richt 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
| Niveau | Vorbis | Opus |
| -1 | 8,3% kleiner bij 6,4 MB/s | 4,0% kleiner bij 4,2 MB/s |
| -9 | 9,8% kleiner bij 2,9 MB/s | 4,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
| Code | Betekenis |
| 0 | Succes |
| 1 | Ongeldige, niet-ondersteunde of onherkende invoer |
| 2 | Gebruiksfout (Usage error) |
| 3 | Fout bij bestandsacces |
| 4 | Interne 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.
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
| Optie | Effect |
--enable-sanitizers | Schakelt ASan en UBSan in voor tests |
--disable-simd | Bouwt enkel de portable mixer |
--with-windows-target=win95 | Richt 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
| Niveau | Vorbis | Opus |
| -1 | 8,3% kleiner bij 6,4 MB/s | 4,0% kleiner bij 4,2 MB/s |
| -9 | 9,8% kleiner bij 2,9 MB/s | 4,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
| Code | Betekenis |
| 0 | Succes |
| 1 | Ongeldige, niet-ondersteunde of onherkende invoer |
| 2 | Gebruiksfout (Usage error) |
| 3 | Fout bij bestandsacces |
| 4 | Interne 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.