Я надеюсь использовать 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;
}
}
Здесь я не уверен, что делать. С обычными аудио фильтрами это влияет на базовые данные, и вы можете просто использовать полученный кадр. При этом, однако, мне нужно извлечь данные из фильтра, чтобы сказать мне, что такое объем. Как мне это сделать? Или я поступаю неправильно?
Опять же, я просто не могу найти какую-либо документацию по этому вопросу, поэтому заранее спасибо за помощь!