
古いビデオ(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がすぐにサポートするものはそれほど多くありません。おそらく最適なオプションは次のとおりです。
- オーストラリア- あなたはできるlibopencode-amrnb を FFmpeg にコンパイルするサポートのための
- OpusはVorbis CELT音声コーデックを使用する
しかし、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 120
24 kbit/s Opus の場合。
おそらく試してみる価値はあります:-application voip
デフォルトのプロファイルの代わりに「音声明瞭度の向上」に合わせて調整しますaudio
。
最高値に設定すると-frame_duration
オーバーヘッドが削減されると思います。リアルタイムの双方向音声チャットではなくファイルだけなので、エンコーダー/デコーダーの遅延は気にする必要はありません。したがって、120 ミリ秒のオーディオをバッファリングし、複数の CELT または SILK フレームをまとめてパックすることで、フレーム ヘッダーの冗長性を削減できます。
入手可能な最高のOpusエンコーダは、無料でオープンソースのlibopus
(https://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 の方が高品質で表示されます。
ほんの少しのビットで、会話は理解できるかもしれないが、音は出ないだろうニースどのコーデックが最もひどいものではないのかという問題です。