
2026/09/03 22:37
Balrogg:悪魔的な圧縮を実現する損失なし Vorbis/Opus リコンプレッサー(最大 15% の削減)
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Balrogg は、Ogg Vorbis および Opus のオーディオファイルを破損なしに再圧縮し、データの忠実度を犠牲にせずに大幅に小さいアーカイブを作成することを目的とした専門的なユーティリティです。本ツールは、Vorbis で約 8–12%、Opus で約 3–8% の圧縮率を達成し、完璧な品質を保ったままストレージ効率の高いオーディオアーカイビングに最適です。ソフトウェアはデータ整合性を最優先とし、無効なチェックサム、壊れたシーケンス、サポートされていないマルチチャンネル機能(Opus はモノラル/ステレオ論理ストリームのみをサポート)、または最終的なエンド・オブ・ストリームのページが欠落している入力ファイルを厳密に拒否します。パフォーマンスは圧縮努力のレベルに基づいて変化し、ユーザーは「-1」から「-9」(デフォルトは「-9」)などのオプションを使用して、より低い比率での高速処理か、最大サイズ削減のためのより長い実行時間を選択できます。現在 iczelia により開発され、GNU GPL v3 ライセンスの下で公開されており、https://github.com/iczelia/balrogg にホストされています。このプロジェクトは標準的な C99 ライブラリと公式の Opus パーサーに依存しています。既存のアーカイブは内部形式の変更により現在のリリースとは互換性がなく、バージョン 2.0 の重大なアップデートが行われるまで完全な後方互換性は期待できません。クイックスタートコマンドには、「balrogg e」による圧縮、「d」によるデコード、「-b」によるバッチ処理、「--progress」、および努力チューニングのための「-9」が含まれます。インストールはパッケージマネージャー、GitHub Releases のバイナリ、または「./configure」、「make」、「sudo make install」を実行することで可能であり、Git からビルドするにはまず「./bootstrap」を実行する必要があります。構成オプションには「--enable-sanitizers」、「--disable-simd」、「--with-windows-target=win95」が含まれます。各操作はデフォルトで 2 GiB のメモリ制限(BLR_MEMCAP で調整可能)を持ち、ファイルごとにスレッド単一で実行され、シーク可能な I/O の要件があります。終了ステータスコードは以下の通りです:0 は成功、1 は破損した入力、2 は使用方法エラー、3 はファイルアクセスエラー、4 は内部エラーです。バージョン 2.0 が到着するまで、ユーザーは現在のファイルライブラリとのシームレスな統合を期待するのではなく、潜在的な移行の障害を計画する必要があります。
本文
balrogg: Ogg Vorbis/Opus ファイルのロスレス再圧縮ツール
balrogg は、Ogg Vorbis および Opus 形式のファイルをロスレスで再圧縮するユーティリティです。アーカイブファイルサイズは通常以下の比率で削減されます。
- Ogg Vorbis (
): 約 8〜12% の削減.ogg - Opus (
): 約 3〜8% の削減.opus
ライセンスと連絡先
- ライセンス: GNU GPL バージョン 3
- 詳細は
ファイルを参照してください。COPYING
- 詳細は
- ホスト元: GitHub
iczelia/balrogg - 問題報告: Kamila Szewczyk 氏宛て(k@iczelia.net)
- 互換性について: バージョン 2.0 以前は後方・前方互換性がありません。
クイックスタート
以下のコマンドを使用してファイルの圧縮(エンコード)と展開(デコード)を行ってください。
# 基本動作 balrogg e music.ogg music.blr # 圧縮(エンコード) balrogg d music.blr music.ogg # 展開(デコード) # バッチ処理モード balrogg -b e *.ogg *.opus # 残りの全パスを既存コアとメモリで一括処理 # エンコーディング時の進捗表示(レベル -9) balrogg --progress -9 e music.ogg music.blr
コマンドオプション解説
: ファイルを**圧縮(エンコード)**します。e
: ファイルを**展開(デコード)**します。d- バッチ処理時、入力ファイルの拡張子
は圧縮時には追加され、展開時には除去されます。.blr
- バッチ処理時、入力ファイルの拡張子
- コーデック検出: コーデックの種類はツールが自動的に判別します。
(Batch):-b- 残りの全パスを利用可能な CPU コアとメモリを使って並列処理します。
- 大きいファイルほど先に処理されます。
/--progress
:-p- エンコードおよびデコード時に標準エラー出力(stderr)に進捗バーを表示します。
- ログ詳細表示には
を使用してください。--progress-lines - バッチ処理では、入力ファイル名でラベル付けされた別行が使用されます。
インストール方法
パッケージマネージャーまたはバイナリ
パッケージマネージャーを使用するか、GitHub Releases からバイナリをダウンロードしてインストールしてください。
ソースからのビルド
リリース用アーカイブを構築する場合は、以下の手順を実行します。
基本コマンド:
./configure make sudo make install
Git チェックアウト時の注意:
- 最初に
を実行してください(autoconf と automake のインストールが必要です)。./bootstrap
ビルド設定オプション
| オプション | 効果 |
|---|---|
| テスト用に ASan (Address Sanitizer) および UBSan (Undefined Behavior Sanitizer) を有効にします。 |
| ポータブルなミキサーのみをビルドし、SIMD 命令を使用しないモードに設定します。 |
| i486 アーキテクチャ向けの Windows 95 ターゲット (MinGW, 32 ビット) を構築します。 |
エフォート(努力)レベル
圧縮率とデコード速度のバランスを調整するために、エフォートレベルを設定できます。デフォルトは
です。-9
- レベル -4 まで: 残留モデルのステージが追加され、デコード動作にも影響を与えます。
- レベル -5 〜 -9: パラメータ検索範囲を広げるだけであり、デコード速度はレベル -4 と同等に保たれます。
- 処理内容: 設定ごとにファイル全体が評価されます。最適な候補のみ宛先ファイルに保持され、試行中は最多 2 つの候補のみが存在します。
レベルごとの性能比較
| エフォートレベル | Vorbis (圧縮率 / 速度) | Opus (圧縮率 / 速度) |
|---|---|---|
| -1 | サイズ -8.3%、速度 6.4 MB/s | サイズ -4.0%、速度 4.2 MB/s |
| -9 | サイズ -9.8%、速度 2.9 MB/s | サイズ -4.8%、速度 2.4 MB/s |
制限事項と注意点
拒絶されるファイル
エンコーダーは以下の理由でファイルを正確に再復元できないものとして拒否します。
- チェックサムが破損している場合
- 無効なページ順序を持つ場合
- サポートされていない Vorbis の機能を使用している場合
- 最終的なストリーミング終了ページがない場合
Vorbis に関する詳細
- 追加パディング・フロー: 通常のフローと残留部圧縮は維持されます。クラスワード補正およびパディングは別途モデル化されます。
- 短縮されたパケット: パケットピーリングには適応的なバイトモデルが使用されます。
Opus に関する詳細
Opus のサポートは以下の条件に限定されています。
- チャネルマッピングファミリ 0 を持つモノラルまたはステレオの論理的ストリーム 1 つのみ。
- サイズ制限: OpusHead および OpusTags を含む全パケットは 61,440 バイト以内に制限されます(拡張フレームヘッダーおよびパディング対応)。
- 拒絶対象: チェーン化されたマルチチャンネルファイルや、複数ストリームを持つファイルは拒否されます。
- 拒否時は診断メッセージが表示され、終了ステータスが
となります。1
- 拒否時は診断メッセージが表示され、終了ステータスが
終了ステータスコード
| コード | 意味 |
|---|---|
| 0 | 成功 |
| 1 | 入力データが不良、サポートされていない、または認識できない |
| 2 | 使用法の誤り |
| 3 | ファイルへのアクセスエラー |
| 4 | 内部エラー |
バッチ処理モード: 報告されたすべてのファイルの中で最も高い非ゼロステータスが返されます。
パフォーマンスとポータビリティ
- スレッド数: 各ファイルは 1 スレッドを使用します(検索可能な入出力ファイルを必要とします)。
- メモリ管理: Vorbis モデルページは使用時だけに割り当てられ、遅延 OS 割り当てに依存しません。
- 不合理な割当を避けるため、デフォルトではプロセスメモリ上限を 2 GiB に設定します。
を別の MiB サイズに設定するか、BLR_MEMCAP
にして制限を無効にできます。0
- ポータビリティ: 生成されたアーカイブファイルは異なるホスト間でも利用可能です。
OS 別ビルド手順
Windows (MinGW)
通常の Windows ビルドには以下のコマンドを使用します:
./configure --host=x86_64-w64-mingw32 \ CC=x86_64-w64-mingw32-gcc \ LDFLAGS=-static make
Windows 95 (MinGW)
小さな KERNEL32 ランタイムを使用した i486 ターゲットビルドです:
./configure --host=i686-w64-mingw32 \ --with-windows-target=win95 \ CC=i686-w64-mingw32-gcc \ LDFLAGS=-static make && make win95-check
は、ローダーのベースライン、PE フラグ、および KERNEL32 インポートを検証します。win95-check
MS-DOS (DJGPP)
DPMI ホスト(例:CWSDPMI)を必要とする i386 システム向けです:
./configure --host=i586-pc-msdosdjgpp \ CC=i586-pc-msdosdjgpp-gcc make
DOS バッチモード
- 拡張子が置換され、**シリアル処理(1 つずつ)**で実行されます。
- 例:
→song.oggsong.blr - Opus の場合:
→song.blr
またはsong.oggsong.opu