FFmpeg のどのオーディオ エンコーダーが 8 kHz をサポートしていますか?

FFmpeg のどのオーディオ エンコーダーが 8 kHz をサポートしていますか?

古いビデオ(Casio Exilim EX-Z40 で作成したビデオ)があり、そのオーディオ ストリームffprobeは と報告されていますpcm_u8, 8000 Hz, mono, u8

それを現代的なものにトランスコードしたいと思っています。

FFmpeg のデフォルトによるトランスコーディングが失敗する:

libfaac はこの出力形式をサポートしていません。

したがって、libfaac は 8 kHz をサポートしていないと考えられます-c:a copy

どのエンコーダが8kHzのサンプリングレートをサポートしていますか?リストはここにありますサンプリングレートについてはほとんど言及されていません。

インストールされているすべてのコーデックを試すスクリプトを作成できますか?

ffmpeg -codecs | grep EA`

…どれが機能するかを直接確認するには?

答え1

ネイティブ FFmpeg AAC エンコーダー ( -c:a aac) は 8000 Hz のサンプル レートをサポートします。

ffmpeg -h encoder=aac
...
Supported sample rates: 96000 88200 64000 48000 44100 32000 24000 22050 16000 12000 11025 8000 7350

入力に最も近いサンプルレートが自動的に選択されるため、宣言する必要はありません-ar

ffmpeg -i input.mov -c:a aac output.m4a

FFmpeg のどのオーディオ エンコーダーが 8 kHz をサポートしていますか?

aac、aptx、aptx_hd、dca、flac、g723_1、libfdk_aac、libmp3lame、libopus、libspeex、libvorbis、real_144、wavpack、多数の pcm バリアント。

他にもあると思われますが、報告内容にsupported_samplerates一貫性がありません。

それを現代的なものにトランスコードしたいと思っています。

libfaac は何年も前に FFmpeg から削除されており、最新の AAC エンコーダーとは見なされていません。ffmpeg古いバージョンのはずです。ネイティブの FFmpeg AAC エンコーダーを更新して使用するか、コンパイルして使用してくださいlibfdk_aac

最も現代的な使い方をしたい場合libopus

しかし、[aac]を試してみたところ、オリジナルに比べてファイルサイズが増加し、一部の高音域が減衰していました。

お使いの製品は非常に古いためffmpeg、エンコーダーの主要な品質更新が反映されていない可能性がありますaac。アップグレードすると品質が向上する可能性があります。

答え2

サンプリングレートとコーデックは異なるパラメータです。おそらく次のようなものが必要です。

-ar 48000 -c:a aac

8KHzから48KHzにアップサンプリングし、AACに圧縮する

答え3

8 KHzは音声では標準的で、「狭帯域」として知られています。音声の場合は多くのオプションがありますが、FFmpegがすぐにサポートするものはそれほど多くありません。おそらく最適なオプションは次のとおりです。

しかし、8KHz 8 ビット PCM はそもそもあまり良いソースではありません。ほとんどのエンコーダーは、たとえば 8 ビット浮動小数点としてエンコードされた 12 ビット データである 8 ビット G.711 mu-law などのより良い入力を期待します。純粋な 8 ビット PCM 入力では、モデル化された音声パターンに適合しない可能性があるため、うまく動作しない可能性があります。

また、ファイルサイズがかなり小さいため、ビデオ コンテナが複雑なコーデックをサポートしていない可能性があります。そのため、手間がかかるだけの価値はないので、オーディオはそのままにしておきます。

答え4

オーパス一般的に利用可能な低ビットレートコーデックの中で最高のものと考えられており、問題はありません8kHzの入力サンプルレートで。結果として得られるopusストリームは、デコーダーにとって都合の良いサンプルレートにデコードできます。(他の非可逆コーデックと同様に、FFTを実行した後、周波数帯域に基づいて圧縮します。しかし、他のコーデックの中には、入力と同じサンプルレートにのみデコードしたいものがあるようです。他の回答が指摘しているように、できるFFmpeg で入力をコーデックに渡す前に再サンプリングしますが、Opus では必要ありません。

試すffmpeg -c:a libopus -b:a 24k -frame_duration 12024 kbit/s Opus の場合。

おそらく試してみる価値はあります:-application voipデフォルトのプロファイルの代わりに「音声明瞭度の向上」に合わせて調整しますaudio

最高値に設定すると-frame_durationオーバーヘッドが削減されると思います。リアルタイムの双方向音声チャットではなくファイルだけなので、エンコーダー/デコーダーの遅延は気にする必要はありません。したがって、120 ミリ秒のオーディオをバッファリングし、複数の CELT または SILK フレームをまとめてパックすることで、フレーム ヘッダーの冗長性を削減できます。


入手可能な最高のOpusエンコーダは、無料でオープンソースのlibopushttps://opus-codec.org) なので、最高のエンコーダーがクローズドソースである AAC とは異なり、FFmpeg はそれをそのまま使用できます。

Opus には、非常に低いビットレートの音声 (16kb/s など) 用の特別なモードがあり、音声を検出し、低ビットレートで音声専用のエンコーダー (SILK) に切り替えることもできます。

Opusの低ビットレートコーディングツールはHE-AACv2の機能に似ています。ウィキペディアの記事


しかし、試してみたところ、オリジナルに比べてファイルサイズが大きくなってしまった...

非可逆圧縮の利点の一つは、選ぶ出力ビットレートは品質とトレードオフほとんどのコーデックでは、-b:a 32kたとえば 32 kbit/s のオーディオ ビットレートを選択できます。

(ビデオの場合、エンコードに費やす CPU 時間をトレードオフすることもできます (例: -preset veryslow と -preset medium)。ただし、オーディオの圧縮は低コストであるため、ほとんどのコーデックには、ビットレートと品質のトレードオフを改善するために CPU 時間をさらに費やすオプションはあまりありません。)

モノラル 8 ビット 8kHz PCM のビットレートは 64 kbit/s = 8 * 8000 なので、それより低い値を目指す必要があります。そうでなければ、元のファイルをそのまま保存した方がよいでしょう。PCM は単なる生のサンプルなので、ビットレートはサンプルレートとサンプル幅の積にすぎません。オーディオの.bmpビットマップ画像のようなものです。これは非常に非効率的であり、より優れたコーデックが発明された理由です。(そして、聞いてわかるように、PCM のビットレートを節約すると、品質と周波数に大きな犠牲が伴います。範囲ビットレートはサンプルレートと 1:1 で結びついているためです。非可逆コーデックを使用して周波数領域で量子化する場合には、そうではありません。


そして高周波が減衰した。つまり、-c:a copy

FFmpeg のネイティブ AAC エンコーダーは-c:a aac以前はかなり悪かったため、古い FFmpeg を使用していました。 https://trac.ffmpeg.org/wiki/Encode/HighQualityAudio2017 年現在、 AAC-LC (低複雑性高ビットレート)aacよりも優れている場合があると述べていますlibfdk_aac。ただし、HE-AAC については触れられていませんが、これは低ビットレート AAC に必要なものです。

libfdk_aac かつては最高のオープンソース AAC エンコーダーでしたが、HE-AAC に関しては今でもそうかもしれません。ただし、私の知る限り、どちらも最高の非フリー AAC エンコーダーほど優れているわけではありません。

低ビットレートのAACには、より多くのコーディングツールを追加するHE-AACが本当に必要です。https://en.wikipedia.org/wiki/高効率な高度なオーディオコーディング-c:a aacそれができるかどうかはわかりません。

https://trac.ffmpeg.org/wiki/Encode/HighQualityAudioさまざまなエンコーダーの推奨設定と有用なビットレートの範囲をいくつか示します。

しかし、おそらくOpus、あるいは4kbit/sのようなビットレートのAMR-NB(狭帯域)が必要でしょう。Opus wiki 記事の品質とビットレートのグラフただし、8kb/s 未満では Opus よりも AMR-NB の方が高品質で表示されます。

ほんの少しのビットで、会話は理解できるかもしれないが、音は出ないだろうニースどのコーデックが最もひどいものではないのかという問題です。

関連情報