2016-06-14 11 views
0

私は現在、オーディオファイルからフレームをデコードし、ビデオに書き込まれている新しいストリームに追加するために、FFMpeg AutoGenプロジェクト(もちろんC#で)を使用しています。これはすべて正常に動作しますが、私は2つのAVFrame *オブジェクトを(デコード後に)一緒にミキシングする方法が不思議でした。デコードされた2つのFFmpeg AVFrameオブジェクトからPCMデータを混ぜる

以前はPCMデータを混在させていましたが、FFmpegに組み込みのAPIがあればより効果的ですか?

short* baseFrameBuffer1 = (short*)baseFrame->data_0; 
short* baseFrameBuffer2 = (short*)baseFrame->data_1; 

short* readFrameBuffer1 = (short*)readFrame->data_0; 
short* readFrameBuffer2 = (short*)readFrame->data_1; 

for (int frameIndex = 0; frameIndex< 1024; frameIndex++) 
{ 
    int dataSample1 = GetInRangeSample(baseFrameBuffer1[frameIndex] + readFrameBuffer1[frameIndex]); 
    int dataSample2 = GetInRangeSample(baseFrameBuffer2[frameIndex] + readFrameBuffer2[frameIndex]); 

    baseFrame->data_0[frameIndex] = (byte)dataSample1; 
    baseFrame->data_1[frameIndex] = (byte)dataSample2; 
} 

private static int GetInRangeSample(int sample) 
{ 
    if (sample > short.MaxValue) 
    { 
     sample = short.MaxValue; 
    } 

    if (sample < short.MinValue) 
    { 
     sample = short.MinValue; 
    } 

    return sample; 
} 

答えて

1

あなたはlibavfilterで​​フィルタを使用することができます。

これは、私は現在、それをやっている方法です。

+0

私の以前の質問を使用してhttp://stackoverflow.com/questions/37570129/increase-decrease-audio-volume-using-ffmpegとあなたの答え、私は問題を解決しました。 – williamtroup

関連する問題