HN 日本語サマリー

← 一覧へ戻る
プログラミング

Balrogg: 損失なしでVorbis/Opusファイルを最大15%圧縮するツール

Balrogg: Demonically compacting (up to 15%) lossless Vorbis/Opus recompressor (github.com)

91 pointsby palaiologos12 コメント

要約

Balroggは、Ogg VorbisおよびOpusオーディオファイルを損失なしで再圧縮するコマンドラインツールです。これにより、元のファイルサイズから最大15%の圧縮率を実現します。インストールはパッケージマネージャーまたはGitHubリリースから可能で、C99で記述されており、libopusのパーサーを流用しています。特定のファイル形式や機能には制限がありますが、ポータブルなビルドも提供されています。

全文翻訳

balrogg

balroggはOgg VorbisおよびOpusファイルをロスレスで再圧縮します。アーカイブは通常、.oggファイルより8-12%小さく、.opusファイルより3-8%小さくなります。

v2.0に達するまで、リリースは後方互換性も前方互換性もありません。

balroggはGNU GPLバージョン3の下でライセンスされています。詳細はCOPYINGを参照してください。問題の報告はKamila Szewczyk k@iczelia.netまで。プロジェクトはhttps://github.com/iczelia/balroggでホストされています。

ディスカッション:

クイックスタート

balrogg e music.ogg music.blr
balrogg d music.blr music.ogg
balrogg -b e *.ogg *.opus
balrogg --progress -9 e music.ogg music.blr

eは圧縮、dは展開です。balroggはコーデックを検出します。-bを使用すると、残りのパスは利用可能なコアとメモリを使用して処理されます。エンコードは.blrを付加し、デコードは削除します。入力が大きいファイルから先に処理されます。

-pまたは--progressは、エンコードおよびデコードのために標準エラー出力にプログレスバーを表示し、各Vorbisチューニング試行を個別に識別します。ログには--progress-linesを使用してください。バッチプログレスは、入力ファイル名でラベル付けされた個別の行を使用します。

インストール

パッケージマネージャーを使用するか、GitHub Releasesからバイナリをダウンロードしてください。リリースtarballをビルドするには、以下を実行します。

./configure
make
sudo make install

プロジェクトはC99とCおよびmathライブラリのみを使用します。src/opus下のOpusパーサーはlibopusから派生しています。

Configureオプション効果
--enable-sanitizersテストのためにASanとUBSanを有効にする
--disable-simdポータブルミキサーのみをビルドする
--with-windows-target=win95i486上でWindows 95をターゲットにする(MinGW、32ビット)

Gitチェックアウトからビルドする場合は、まず./bootstrapを実行してください。これにはautoconfとautomakeが必要です。

労力

-1から-9で労力を選択します。デフォルトは-9です。-4までは、各レベルでレジデュアルモデルステージが追加され、デコードに影響します。より高いレベルはパラメータ検索を拡張するだけなので、-4から-9は同じ速度でデコードされます。Vorbisチューニングは、選択された各設定でファイル全体を評価します。最良の候補が宛先ファイルに保持され、試行中は最良の候補と現在の候補が最大で存在します。

注意点

エンコーダーは、不正なチェックサム、無効なページシーケンス、またはサポートされていないVorbis機能を含む、正確に再現できないファイルを拒否します。連鎖されたVorbisファイルは、リンク間でアダプティブモデルを共有します。ストリームカットなど、次のリンクが始まる前に終了したリンクは、完全なパケットで終了する場合にサポートされます。

追加のパディングまたは代替フロアサブクラス選択を持つVorbisパケットは、通常のフロアおよびレジデュアル圧縮を保持します。クラスワード補正およびパディングは個別にモデル化されます。短縮されたパケット(パケットピーリング)は、アダプティブバイトモデルを使用します。

Opusサポートは、チャンネルマッピングファミリー0のモノラルまたはステレオ論理ストリームに限定されます。オーディオパケットおよびOpusHeadは61,440バイトに制限されており、拡張フレームヘッダーとパディングはその制限内でサポートされます。OpusTagsパケットは最大120 MiBまで可能で、バウンドされたバッチで処理されます。マルチチャンネルOpusファイルは拒否されます。拒否は診断と終了ステータス1を生成します。

終了ステータス

コード意味
0成功
1不正な形式、サポートされていない、または認識されない入力
2使用法エラー
3ファイルアクセスエラー
4内部エラー

バッチモードは、いずれかのファイルによって報告された最も高い非ゼロステータスを返します。

パフォーマンスとポータビリティ


            parallel (79.3 MB, 1047 files)    newmusic_piano3.ogg (2.5 MB)
   tool  |  e/time |     ratio (size) | mem |  e/time |    ratio (size) | mem
 1.3  -1 |  1.61 s | 90.4% (75,256kB) | 15M |  0.38 s | 83.3% (2,221kB) |  6M
      -2 |  1.78 s | 89.2% (74,259kB) | 16M |  0.69 s | 79.4% (2,118kB) |  7M
      -3 |  1.91 s | 88.9% (74,035kB) | 17M |  0.77 s | 79.2% (2,113kB) |  8M
      -4 |  1.99 s | 88.6% (73,743kB) | 17M |  0.82 s | 78.9% (2,106kB) |  8M
      -5 |  4.19 s | 88.3% (73,506kB) | 17M |  2.67 s | 78.6% (2,095kB) |  9M
      -6 |  6.17 s | 88.2% (73,421kB) | 17M |  4.27 s | 78.3% (2,089kB) | 10M
      -7 |  8.12 s | 88.2% (73,417kB) | 17M |  5.84 s | 78.3% (2,089kB) | 11M
      -8 | 10.06 s | 88.2% (73,411kB) | 17M |  7.50 s | 78.3% (2,089kB) | 11M
      -9 | 14.15 s | 88.2% (73,393kB) | 17M | 10.60 s | 78.3% (2,088kB) | 11M

 1.2  -1 |  1.63 s | 90.4% (75,274kB) | 15M |  0.42 s | 83.3% (2,221kB) |  7M
      -2 |  1.85 s | 89.2% (74,276kB) | 15M |  0.77 s | 79.4% (2,118kB) |  7M
      -3 |  1.97 s | 89.0% (74,052kB) | 17M |  0.82 s | 79.2% (2,113kB) |  8M
      -4 |  2.06 s | 88.6% (73,761kB) | 17M |  0.90 s | 78.9% (2,106kB) |  8M
      -5 |  4.24 s | 88.3% (73,524kB) | 17M |  2.78 s | 78.6% (2,095kB) |  9M
      -6 |  6.31 s | 88.2% (73,438kB) | 17M |  4.55 s | 78.3% (2,089kB) | 10M
      -7 |  8.39 s | 88.2% (73,435kB) | 17M |  6.25 s | 78.3% (2,089kB) | 11M
      -8 | 10.65 s | 88.2% (73,428kB) | 17M |  8.00 s | 78.3% (2,089kB) | 11M
      -9 | 15.11 s | 88.2% (73,428kB) | 17M | 11.73 s | 78.3% (2,089kB) | 11M

 1.1  -1 |  0.93 s | 90.4% (75,270kB) | 11M |  0.45 s | 83.3% (2,221kB) |  6M
      -2 |  1.30 s | 89.2% (74,272kB) | 11M |  0.84 s | 79.4% (2,118kB) |  7M
      -3 |  1.41 s | 88.9% (74,048kB) | 13M |  0.90 s | 79.2% (2,113kB) |  8M
      -4 |  1.64 s | 88.6% (73,757kB) | 13M |  0.96 s | 78.9% (2,106kB) |  8M
      -5 |  4.39 s | 88.3% (73,520kB) | 13M |  3.01 s | 78.6% (2,095kB) | 10M
      -6 |  6.89 s | 88.2% (73,434kB) | 13M |  5.00 s | 78.3% (2,089kB) | 10M
      -7 |  9.44 s | 88.2% (73,431kB) | 13M |  6.84 s | 78.3% (2,089kB) | 10M
      -8 | 11.92 s | 88.2% (73,424kB) | 13M |  8.56 s | 78.3% (2,089kB) | 10M
      -9 | 16.75 s | 88.2% (73,424kB) | 13M | 12.22 s | 78.3% (2,089kB) | 10M

 1.0  -1 |  0.92 s | 90.4% (75,238kB) | 37M |  0.43 s | 83.3% (2,221kB) | 12M
      -2 |  1.25 s | 89.2% (74,241kB) | 37M |  0.86 s | 79.4% (2,118kB) | 12M
      -3 |  1.40 s | 88.9% (74,017kB) | 38M |  0.91 s | 79.2% (2,113kB) | 13M
      -4 |  1.63 s | 88.6% (73,726kB) | 38M |  1.00 s | 78.9% (2,105kB) | 13M
      -5 |  5.68 s | 88.3% (73,489kB) | 46M |  3.13 s | 78.6% (2,095kB) | 46M
      -6 |  9.66 s | 88.2% (73,404kB) | 47M |  5.07 s | 78.3% (2,089kB) | 46M
      -7 | 13.30 s | 88.2% (73,401kB) | 47M |  7.00 s | 78.3% (2,089kB) | 46M
      -8 | 16.91 s | 88.2% (73,394kB) | 47M |  9.02 s | 78.3% (2,089kB) | 46M
      -9 | 24.04 s | 88.2% (73,394kB) | 48M | 13.08 s | 78.3% (2,089kB) | 48M

各ファイルは1つのスレッドを使用し、シーク可能な入力ファイルと出力ファイルを必要とします。サポートされているホストは、不合理な割り当てを拒否するために2 GiBのプロセスメモリキャップを適用します。BLR_MEMCAPをMiB単位で別のサイズに設定するか、キャップを無効にするには0に設定します。

アーカイブはホスト間でポータブルです。Windowsビルドは次のようにMinGWを使用します。

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

Windows 95ビルドは、小さなKERNEL32ランタイムを使用し、i486をターゲットにします。

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

win95-checkは、ローダーベースライン、PEフラグ、およびKERNEL32インポートを検証します。MS-DOSビルドはDJGPPを使用し、CWSDPMIのようなDPMIホストを持つi386が必要です。

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

DOSバッチモードは拡張子を置き換え、シリアルに実行します。song.oggはsong.blrになり、その後song.oggまたはOpusの場合はsong.opuに展開されます。