每帧ffmpeg边数据或元数据

时间:2018-07-19 06:06:41

标签: ffmpeg metadata

我是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>

但是没有添加任何编码。

如何分别向每个帧添加数据?

2 个答案:

答案 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中分配数据。