Задать вопрос

Как убрать треск в звуке при понижении частоты дискретизации используя ffmpeg?

Здравствуйте. У меня возникла проблема с изменением частоты дискретизации и формата сэмпла после декодирования с использованием ffmpeg. А точнее, с понижением ее с 48000 до 44100. В звуке появляется фоновый треск. (При повышении с 44100 до 48000 треска нету.)

После вызова функции:
ErrorCode := avcodec_decode_audio4(AudioCodecContext, AudioFrame,
      @FrameFinished, @Packet);

У меня происходит следующее:
if FrameFinished = 1 then
    begin
      swr := swr_alloc;
      try
        av_opt_set_int(swr, 'in_channel_layout', AudioFrame.channel_layout, 0);
        av_opt_set_int(swr, 'out_channel_layout', AV_CH_LAYOUT_STEREO, 0);

        av_opt_set_int(swr, 'in_sample_rate', AudioFrame.sample_rate, 0);
        av_opt_set_int(swr, 'out_sample_rate', 44100, 0);

        av_opt_set_sample_fmt(swr, 'in_sample_fmt', TAVSampleFormat(AudioFrame.format), 0);
        av_opt_set_sample_fmt(swr, 'out_sample_fmt', AV_SAMPLE_FMT_S16, 0);

        swr_init(swr);

        OutSample := av_rescale_rnd(
          swr_get_delay(swr, AudioFrame.sample_rate) + AudioFrame.nb_samples,
          44100, AudioFrame.sample_rate, AV_ROUND_UP );

        av_samples_alloc(@OutputBuffer, nil, 2, OutSample,
          AV_SAMPLE_FMT_S16, 0);

        ConvertSize := swr_convert(swr, @OutputBuffer, OutSample,
          @AudioFrame.data[0], AudioFrame.nb_samples);

      finally
        swr_free(@swr);
      end;

      ConvertSize := ConvertSize * av_get_bytes_per_sample(AV_SAMPLE_FMT_S16) * 2 {channel numbers};

      BufferDest.Write(OutputBuffer, ConvertSize);
      av_free(outputBuffer);

OutputBuffer у меня объявлен как PByte.

Формат, который я пытаюсь получить на выходе:
Stereo (2 Канала), Signed 16 bit, 44100

Дальше, данные у меня отправляются в уже настроенный на эти параметры DirectSound, но там слышны трески. Я пробовал сохранить конвертированный аудио поток в файл и скармливал его Audacity - результат не изменился. В программе я использую сборку ffmpeg-20150312-git-3bedc99-win32-shared с сайта.
В чем может быть проблема и где искать решение? (Проверки на ошибки я в коде опустил)
  • Вопрос задан
  • 979 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Shadow_ru
filter_type = cubic добавьте
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы