我是C语言的新手,并且在指针和数据构造函数方面苦苦挣扎...
我正在尝试使用FFMpeg编码示例在每帧添加一些辅助数据或元数据。 (https://ffmpeg.org/doxygen/trunk/encode_video_8c-example.html)
这是我到目前为止尝试过的:
enctype
我也尝试过使用并将其设置为等于AVDictionary
<form action="" method="post" enctype="multipart/form-data">input here</form>
但是没有添加任何编码。
如何分别向每个帧添加数据?
答案 0 :(得分:1)
您可以使用AVFrame struct中的元数据字段。
一个简单的例子:
static int addMetadata(AVFrame *frame)
{
AVDictionary* frame_metadata = av_frame_get_metadata(frame);
int frame_dict_count = 0;
AVDictionaryEntry *tag = NULL;
av_dict_set(&frame_metadata, "test0", "test", 0);
av_dict_set_int(&frame_metadata, "test1", 0, 0);
frame_dict_count = av_dict_count(frame_metadata);
av_log(ctx, AV_LOG_INFO,
"Metadata count: %d\n", frame_dict_count);
while ((tag = av_dict_get(frame_metadata, "", tag, AV_DICT_IGNORE_SUFFIX)))
av_log(ctx, AV_LOG_INFO, "%s=%s\n", tag->key, tag->value);
av_frame_set_metadata(frame, frame_metadata);
}
如果您需要添加其他数据类型,例如浮点数组,请使用sprintf将该数组转换为char数组(稍后使用sscanf进行解析)。
答案 1 :(得分:1)
您应该尝试将数据直接应用于框架的侧面数据
av_dict_set(&(frame->metadata), "foo", "bar", 0);
同样,您可能需要在AVFrameSideData中分配数据。