1

現在、複数の独自フォーマットのゲーム メディア アセットを変換し、よりオープンなフォーマットに変換するツールに取り組んでいます。libav ライブラリhttp://libav.org/を使用して、WAV、mp3、ect 形式から生の pcm にデコードしstd::vector<char>(正常に完了しました)、それを ogg vorbis にエンコードしようとしています。ドキュメントでを使用しようとしてapi-example.cいます。https://github.com/FFmpeg/FFmpeg/blob/master/doc/examples/decoding_encoding.cしかし、トーン生成が終了し、AVPacket エンコーディングが開始する場所で立ち往生しているため、ほとんど進歩していません。

std::vectorファイル(できればogg vorbis)に書き出す生のpcmファイル(または)からのオーディオエンコーディングの実例を教えてもらえますか?

4

1 に答える 1

2

libav を使用してオーディオをエンコードする際に留意する必要があるいくつかの事項:

  1. デコードされたフレームの pcm サンプル形式は何ですか (例: AV_SAMPLE_FMT_S16、AV_SAMPLE_FMT_FLTP など)。

  2. デコードされたフレームに含まれるチャネルごとのサンプル数。

  3. 各オーディオ エンコーダーは特定の種類のサンプル形式のみを使用するため、pcm サンプル形式がエンコーダーのサンプル形式と同じでない場合は、サンプル形式の変換を行う必要があります。

  4. 各オーディオエンコーダーは特定の番号を取ります。フレーム内のチャンネルあたりのサンプル数。

    たとえば、MP3 はチャネルごとに 1152 サンプルを取り、aac-main/lc はチャネルごとに 1024 サンプルを取り、aac-he はチャネルごとに 2048 サンプルを取ります。そのため、期待される番号を提供するために、いくつかのバッファリングを行う必要があります。エンコーダへのサンプルの。

サンプル形式の変換を行うには、libswresample 内にある swr_convert API を使用することをお勧めします。

于 2013-09-26T05:20:08.337 に答える