ffmpeg获取过滤器日志

时间:2018-07-08 20:38:34

标签: c ffmpeg

我在程序中使用了ffmpeg libavfilter / af_silencedetect.c,它的工作原理很吸引人。

此过滤器记录有关输出中静默持续时间的一些信息,如下所示:

[silencedetect @ 0x2a894c0] silence_start: 0
[silencedetect @ 0x2a894c0] silence_end: 1.61725 | silence_duration: 1.61725
[silencedetect @ 0x2a894c0] silence_start: 3.19175
[silencedetect @ 0x2a894c0] silence_end: 4.70413 | silence_duration: 1.51238

但是我需要在程序中获得这些持续时间。如何在程序中将这些值作为变量获取。值得注意的是,由于模块性,我不想在af_silencedetect.c文件中进行更改。

谢谢

2 个答案:

答案 0 :(得分:1)

就像@Gyan所说的,您可以使用元数据密钥,例如 lavfi.silence_start lavfi.silence_end lavfi.silence_duration < / strong>。这些值是通过 av_dict_set 设置的,还可以设置其他元数据键。

然后在程序中利用 av_dict_get 获得这些值。使用这种方法,您可以将逻辑与ffmpeg代码分开。

答案 1 :(得分:-1)

/usa/file1.zip
/usa/file2.zip
/canada/file1.zip
/canada/file2.zip

AVFilter * astats = avfilter_get_by_name(“ astats”);

initialize astats audio filter as snprintf(strbuf, sizeof(strbuf),"reset=1:metadata=1");

然后从经过过滤的音频帧中获得均方根电平

avfilter_graph_create_filter(&astats_ctx, astats,NULL, strbuf, NULL, filtergraph); AVDictionaryEntry *e = NULL; while(e = av_dict_get(filter_frame>metadata,"lavfi.astats.Overall.RMS_level", e,AV_DICT_IGNORE_SUFFIX)) printf(“%s:%s \ n”,e-> key,e-> value); }