2016-09-14 76 views
1

私はpersonnalプロジェクトにFFmpegライブラリを使用しています。私は1つのことについて助けが必要です。私はステレオサウンドの音楽ファイルを持っており、このステレオサウンドをモノラルサウンドに変換したいのですか?このライブラリで可能ですか?この仕事をする機能がありますか?私のプロジェクトはC/C++です。FFmpegでステレオサウンドをモノラルに変換するには?

私はFFmpegのウェブサイトとこのフォーラムでDoxygenのドキュメントを検索しましたが、面白いものは見つかりませんでした。

読んでいただきありがとうございます!

+0

私は関数がないことを覚えていますが、両方のストリームを一緒に計算して簡単に変換できます。 – user1810087

+0

例として挙げるコードはありますか? – Meugiwara

答えて

3

使用swr_convertフォーマット間の変換するlibswresampleから。次のようなもの:

#include "libswresample/swresample.h" 

au_convert_ctx = swr_alloc(); 

out_channel_layout = AV_CH_LAYOUT_MONO; 
out_sample_fmt = AV_SAMPLE_FMT_S16; 
out_sample_rate = 44100; 
out_channels = av_get_channel_layout_nb_channels(out_channel_layout); 

in_sample_fmt = pCodecCtx->sample_fmt; 
in_channel_layout=av_get_default_channel_layout(pCodecCtx->channels); 

au_convert_ctx=swr_alloc_set_opts(au_convert_ctx,out_channel_layout, out_sample_fmt, out_sample_rate, 
      in_channel_layout, in_sample_fmt, pCodecCtx->sample_rate, 0, NULL); 
swr_init(au_convert_ctx); 
//Generate your frame of original audio, then use swr_convert to convert to mono, 
//converted number of samples will now be in out_buffer. 
int converted = swr_convert(au_convert_ctx, &out_buffer, MAX_AUDIO_FRAME_SIZE, (const uint8_t **)&pFrame->data , pFrame->nb_samples); 
//... 
swr_free(&au_convert_ctx); 

これにより、元のフォーマットが44100 kHzのモノに変換されます。また、出力サンプルレートとしてpCodecCtx->sample_rateを使用することもできます。

これは最も柔軟で簡単な解決策です。

0

私がコメントで述べたように、自分でそれを再サンプリングすることができます。あなたがすでに持っているものと使用するフォーマットに依存するので、即座に動作するコードを与えることはできませんが、私はあなたに例(擬似/実際のコードミックス)を与えることができます。

フレームをエンコードした後、行う必要があることを実行した後で、データバッファにオーディオが書き込まれます。今はあなたのフォーマットがどのように(hereを参照)、あなたが持っているチャンネル数に依存します。今、バッファを反復処理し、一緒に左右のサンプルを計算

+-----+-----+-----+-----+-----+ 
| LS1 | RS1 | LS2 | RS2 | ... | 
+-----+-----+-----+-----+-----+ 
// LS = LEFT SAMPLE 16 Bit 
// RS = RIGHT SAMPLE 16 Bit 

:あなたのバッファは次のようになりよりも、のは、それが16ビットステレオを締結していると仮定しましょう。それだ

for(int i=0; i<sample_size; i+=2) { 
    auto r = (static_cast<int32_t>(buffer[i]) + buffer[i+1])/2; 
    buffer[i] = buffer[i+1] = r; 
} 

...

関連する問題