FFMPEG фильтр "Volumedetect" в C ++ - PullRequest
0 голосов
/ 20 марта 2020

Я надеюсь использовать FFMPEG для расчета громкости моих аудиофайлов, но мне не хватает документации по этой конкретной проблеме. В основном я пытаюсь сделать что-то похожее на следующую команду:

ffmpeg -i "myfile.mp3" -filter:a volumedetect -f null /dev/null

Но в C ++. Таким образом, создание фильтра и передача моих аудиокадров в фильтр кажется относительно простым, если сделать что-то вроде:

avfilter_register_all();
_volumeFilter = avfilter_get_by_name("volumedetect");

_filterGraph = avfilter_graph_alloc();

_volumeFilterCtx = avfilter_graph_alloc_filter(_filterGraph, _volumeFilter, "volumedetect");

Приведенный выше код является успешным с точки зрения инициализации фильтра. Затем, когда я читаю кадр, я в основном делаю:

if (frameFinished) 
{
    /* push the audio data from decoded frame into the filtergraph */
    if (av_buffersrc_add_frame_flags(_volumeFilterCtx, _audioFrame, 0) < 0) 
    {
        av_log(NULL, AV_LOG_ERROR, "Error while feeding the audio filtergraph\n");
        break;
    }
    /* pull filtered audio from the filtergraph */
    while (1) 
    {
        ret = av_buffersink_get_frame(_volumeFilterCtx, _filteredFrame);
        if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
                break;
    }
}

Здесь я не уверен, что делать. С обычными аудио фильтрами это влияет на базовые данные, и вы можете просто использовать полученный кадр. При этом, однако, мне нужно извлечь данные из фильтра, чтобы сказать мне, что такое объем. Как мне это сделать? Или я поступаю неправильно?

Опять же, я просто не могу найти какую-либо документацию по этому вопросу, поэтому заранее спасибо за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...