2016-09-14 1 views
1

필자는 personnal 프로젝트에 FFmpeg 라이브러리를 사용하는데, 한 가지 도움이 필요합니다. 스테레오 사운드의 음악 파일이 있고이 스테레오 사운드를 모노 사운드로 변환하고 싶습니다. 이 라이브러리로 가능합니까? 이 일을 할 수있는 내부 기능이 있습니까? 내 프로젝트는 C/C++입니다.FFmpeg로 스테레오 사운드를 모노로 변환하는 방법은 무엇입니까?

FFmpeg 웹 사이트와이 포럼에서 Doxygen 설명서를 검색했지만 흥미로운 것을 찾지 못했습니다.

읽어 주셔서 감사합니다.

+0

나는 함수가 없다는 것을 기억하지만 두 스트림을 함께 계산하여 쉽게 변환 할 수 있습니다. – user1810087

+0

예를 들어 줄 코드가 있습니까? – Meugiwara

답변

3

사용 swr_convert이 포맷 간의 변환합니다. 다음과 같이 입력하십시오 :

#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 참조)와 채널 수에 따라 다릅니다. 버퍼가 16 비트 스테레오로 처리되었다고 가정 해 봅시다 :

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

이제 버퍼를 반복하고 왼쪽 및 오른쪽 샘플을 함께 계산하십시오. 그것 뿐이다

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; 
} 

... libswresample에서

관련 문제