HN 日本語サマリー

← 一覧へ戻る
科学・技術

FFmpeg 9.1の新しいAACエンコーダー

FFmpeg 9.1's new AAC encoder (hydrogenaudio.org)

341 pointsby ledoge106 コメント

要約

FFmpegのAACエンコーダーが完全に書き直され、レート制御、RDO、PNS、TNS、I/S、M/Sを含むすべてのコーディングツールが再設計されました。新しいエンコーダーは、GoogleのZimtohrli、ViSQOL、および開発者の聴覚による評価で、qaacやfdk-aacと比較して最高のAACエンコーダーとされています。CBRに厳密に最適化されており、高ビットレートでも優れた品質を発揮します。

全文翻訳

皆さん、こんにちは。 最近、FFmpegのAACエンコーダーを全面的に書き直しました。レート制御、RDO、およびPNS、TNS、I/S、M/Sといったすべてのコーディングツールが再設計されました。メトリクス(Googleの新しいZimtohrli、ViSQOL、および私自身の聴覚)の観点から、qaacやfdk-aacと比較して、最高のAACエンコーダーのようです。 kbps 8.1 fast 8.1 twoloopnmr fdk-aac apple libopus 64 0.01315 / 2.65 0.00696 / 3.24 0.00309 / 3.83 0.00322 / 3.69 0.00612 / 3.29 0.00100 / 4.59 96 0.00338 / 3.77 0.00268 / 3.99 0.00134 / 4.04 0.00153 / 3.98 0.00175 / 3.87 0.00039 / 4.62 128 0.00229 / 4.10 0.00170 / 4.28 0.00072 / 4.47 0.00143 / 4.27 0.00081 / 4.44 0.00020 / 4.68 160 0.00129 / 4.30 0.00108 / 4.44 0.00051 / 4.56 0.00065 / 4.31 0.00117 / 4.51 0.00084 / 4.68 256 0.00105 / 4.41 0.00121 / 4.55 0.00031 / 4.61 0.00103 / 4.45 0.00067 / 4.63 0.00002 / 4.73 Zim/ViS、それぞれ低いほど良い/高いほど良い。 書き換えは今日マージされます。ソースからコンパイルするか、BtbNの最新のナイトリービルド(マージされ、更新され次第)を入手してテストできます。 いくつかの詳細: 新しいエンコーダーは厳密にCBRであり、レートの変動はほとんどありません。ビット予算の目標を持つことは、コーディングに大いに役立ちます。-q:a(リアルVBRモード)の使用は推奨しません。 他のエンコーダーはTNS以外のコーディングツールを使用しません。そこでまず、TNSのみを使用して公平に競合を打ち破り、その後、PNS、I/S、M/Sを再実装して決定的に打ち負かしました。 qaacをRE'dしたところ、知覚的最適化は行われていないことがわかりました。単にバンドエネルギーと高周波を優先するビット割り当てカーブを使用しているだけです。私は同様のカーブを使用し、RDOにマスクされたバンドエネルギーを使用することでそれを改善しました。 FFmpegのAACデコーダーはステレオPNSに関して破損しており、バグは他のAACデコーダーにも存在する可能性があるため、エンコーダーで回避しています。他のエンコーダーがPNSを使用しなかったため、このバグはこれまで発見されませんでした。 高ビットレートには特別な注意が払われました。I/SやPNSなどのコーディングツールは、エンコーダーがレートを維持するために良好に機能していれば、自動的にオフになります。 すべてのコーディングツール、PNS、TNS、I/S、M/SはRDOループの一部です。模倣されたヒューリスティックや任意のビットレートカットオフは使用しません。ツールが使用できる場合は使用されます。 ダウンミックスする予定がある場合、または出力がダウンミックスされることを想定している場合は、元の信号位相を維持するために-aac_is 0 -aac_pns 0を使用してください。 エンコーダーは主に48KHzオーディオ用に最適化されています。それを乗り越えてください。2026年です、リサンプリングは無料、48KHzが標準です。44.1KHzでも96KHzでも動作しますが、最高の品質が必要な場合は48KHzを使用してください。 スペクトログラムを見ると、多くの穴が残されています。これは設計によるものです。マスクされたバンドはゼロ化されるかPNS処理されます。これは、隣接するバンドが十分に大きく、欠落しているバンドに気づかないようにするためです。すべてのバンドを悪くコーディングするよりも、可聴バンドのみをうまくコーディングする方が良いのです。 ユーザーによるA/Bテストを楽しみにしています。私は3000トラック(私の音楽コレクション)でこれをテストしましたが、テストするスピーチコンテンツがほとんどなかったため、そこには最適化が必要かもしれません。 エンコーダーはuninit時に追加の統計情報を出力します: Qavg: 207.975 Tr: 5.3% TNS(L): 4.8% TNS(S): 36.9% M/S: 3.9% I/S: 10.0% PNS: 5.1% これらを以下のように読みます。 平均ラムダ値(値が高いほどエンコーダーがレートを維持するのに苦労します) ショートブロック ロングフレームでのTNS使用率 ショートフレームでのTNS使用率 ミッド/サイドコーディング使用率 インテンシティステレオコーディング使用率 知覚ノイズ置換使用率 もし迷惑なアーティファクトが見つかったら、元の入力サンプルと上記の行を投稿してください。私が調査します。「エンコーダーは主に48KHzオーディオ用に最適化されています。それを乗り越えてください。2026年です、リサンプリングは無料、48KHzが標準です。44.1KHzでも96KHzでも動作しますが、最高の品質が必要な場合は48KHzを使用してください。」 しかし、世界のほとんどのオーディオは44KHzです… spoon氏からの引用(2026-06-30 10:37:12):「エンコーダーは主に48KHzオーディオ用に最適化されています。それを乗り越えてください。2026年です、リサンプリングは無料、48KHzが標準です。44.1KHzでも96KHzでも動作しますが、最高の品質が必要な場合は48KHzを使用してください。」 しかし、世界のほとんどのオーディオは44KHzです… 私が投稿したベンチマークは主に44.1KHzで行われました。しかし、48KHzのデータで耳で調整したため、一部のウィンドウ処理/トランジェントロジックは48KHzに関連しています。タイミングの差がそれほど大きくないため、44.1KHzにも十分うまく翻訳されたので、そのままにしました。 そして、非可逆エンコードを行うのであれば、48KHzにリサンプルして、デコーダーが後端でそうする必要がないようにする方が良いでしょう。耳で調整したとはどういう意味ですか?具体的に何を調整したのですか?古いAACエンコーダーの品質が低いことを明確に示すキラーFLACサンプルをいくつか持っています。 新しいエンコーダーがはるかに優れていることを願っています。ああ、LynneがHAにいますね!ようこそ! 知らない人のために:LynneはFFmpegのネイティブUSACデコーダーもすべて書いたと記憶しています。少し話題は外れますが、Lynneさん、USAC再生中のシークに関するグリッチをご存知ですか?ここでたくさん議論されています。例えば、https://hydrogenaudio.org/index.php/topic,129641.msg1083064.html#msg1083064とhttps://hydrogenaudio.org/index.php/topic,129641.msg1083087.html#msg1083087 私はMycroft氏の意見に同意します。FFmpegの古いAACエンコーダーはかなり「最適ではない」性能を発揮し、これはKamedo2氏のリスニングテスト結果の1つ、https://hydrogenaudio.org/index.php/topic,119861.0.htmlでも確認されていると思います。Chris 残念ながら、私は現在FFmpeg AACエンコーダーバージョン N-124995-gbb6de744cc(2026年6月13日土曜日19:08:10版)をテストしています。あなたの完全に書き直されたバージョンは、今後のABC/HRリスニングテスト結果(現在19%完了)には含まれません。 aac_mfはMediaFoundation経由のAACです(Windows 10および11で利用可能) コード:[選択] $ ffmpeg124995 -i in.44100Hz.stereo.wav -c:a libopus -b:a 89k out.opus $ ffmpeg124995 -i in.44100Hz.stereo.wav -c:a opus -strict experimental -b:a 96k out.opus $ ffmpeg124995 -i in.44100Hz.stereo.wav -c:a libfdk_aac -b:a 96k out.mp4 $ ffmpeg124995 -i in.44100Hz.stereo.wav -c:a aac -b:a 96k out.mp4 $ ffmpeg124995 -i in.44100Hz.stereo.wav -c:a aac_mf -b:a 96k out.mp4 $ ffmpeg124995 -i in.44100Hz.stereo.wav -c:a libmp3lame -b:a 96k out.mp3 $ ffmpeg124995 -i in.44100Hz.stereo.wav -c:a ac3 -b:a 96k out.ac3 lynne氏からの引用(2026-06-30 10:31:23):「書き換えは今日マージされます。」 ええと、実際には今日マージされました。ただ…2026年6月30日ではない今日でしたが。はい。C.R.Helmrich氏からの引用(2026-06-30 16:00:40):「ああ、LynneがHAにいますね!ようこそ! 知らない人のために:LynneはFFmpegのネイティブUSACデコーダーもすべて書いたと記憶しています。少し話題は外れますが、Lynneさん、USAC再生中のシークに関するグリッチをご存知ですか?ここでたくさん議論されています。例えば、https://hydrogenaudio.org/index.php/topic,129641.msg1083064.html#msg1083064とhttps://hydrogenaudio.org/index.php/topic,129641.msg1083087.html#msg1083087 私はMycroft氏の意見に同意します。FFmpegの古いAACエンコーダーはかなり「最適ではない」性能を発揮し、これはKamedo2氏のリスニングテスト結果の1つ、https://hydrogenaudio.org/index.php/topic,119861.0.htmlでも確認されていると思います。Chris HE-AACでのシークよりも悪くはないはずですよね?FFmpegではまだプリロールを適切に処理していません。HE-AACが持つ遅延のためにプリロールが大きく増加するからです。 Kamedo2氏からの引用(2026-06-30 16:55:06):「残念ながら、私は現在FFmpeg AACエンコーダーバージョン N-124995-gbb6de744cc(2026年6月13日土曜日19:08:10版)をテストしています。あなたの完全に書き直されたバージョンは、今後のABC/HRリスニングテスト結果(現在19%完了)には含まれません。」 あなたが実行中のテストをキャンセルすべきだとは思いませんが、もし可能であれば、完全なA/Bテストではなく、簡単な比較を実行していただけませんか? ちなみに、メトリクスについてですが、Zimはより良いメトリクスですが、高ビットレートで飽和するため、ViSがタイブレーカーとして使用されます。このルールを使用すると、すべての比較で勝利します(Opusは最高なので例外です)。 新しいAACエンコーダーをテストしました。 確かに確かなエンコーディング品質です。 私はこのテストを1曲(Marathon [Vol. II]のBurn the Boats: They are Waiting (Original Game Soundtrack))のみで行いましたが、lynne氏の要求通り-b:aモードで行いました。 テストしたビットレートは64kbps、134kbps、200kbpsです。 64kは良好ですが、アーティファクトが少し見られます。ffmpeg AAC PNSデコーダーのバグかどうか(結果のファイルをffplayで再生しています)、はっきりしません。 134kと200kは素晴らしい聴き心地です。fb2kのコマンドラインヘルプをお願いします!非常に興味がありますが、時間があまりなく、ffmpegにあまり愛情がないので。