2016-06-14 17 views
0

。这一切工作正常,但我不知道怎么一会去混合两种AVFrame *对象一起(它们被解码后)。混合PCM数据解码目前我使用的FFmpeg的AUTOGEN项目(在C#中的课程)的帧从一个音频文件进行解码,并将它们添加到正在写入到视频的新流的FFmpeg AVFrame *对象

我以前混合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