元数据未显示 ffmpeg C++
Metadata is not showing ffmpeg C++
我正在将 h264 编码视频数据和 PCM g711 编码音频数据混合到 .mov
媒体容器中。我正在尝试在 header 上写入元数据,但是当我转到 windows 上的文件-> 右键单击-> 属性-> 详细信息时元数据没有显示,同样在 Ubuntu 上。这是我的代码 -
// Instead of creating new AVDictionary object, I also tried following way
// stated here:
// but no luck
AVDictionary* pMetaData = m_pFormatCtx->metadata;
av_dict_set(&pMetaData, "title", "Cloud Recording", 0);
av_dict_set(&pMetaData, "artist", "Foobar", 0);
av_dict_set(&pMetaData, "copyright", "Foobar", 0);
av_dict_set(&pMetaData, "filename", m_sFilename.c_str(), 0);
time_t now = time(0);
struct tm tStruct = *localtime(&now);
char date[100];
strftime(date, sizeof(date), "%c", &tStruct); // i.e. Thu Aug 23 14:55:02 2001
av_dict_set(&pMetaData, "date", date, 0);
av_dict_set(&pMetaData, "creation_time", date, 0);
av_dict_set(&pMetaData, "comment", "This video has been created using Eyeball MSDK", 0);
// ....................
// .................
/* write the stream header, if any */
int ret = avformat_write_header(m_pFormatCtx, &pMetaData);
我还尝试使用 linux 中的 mediainfo
和 exiftools
查看文件是否包含任何元数据。我也试过 ffmpeg -i output.mov
但没有显示元数据。
有什么问题吗? av_dict_set
中的flags
值0
可以吗?我是否需要为不同的平台设置不同的标志 (windows/linux)?
我看到了 this link,它说对于 windows,我必须使用 id3v2_version 3
和 -write_id3v1 1
来使元数据工作。如果是这样,我如何在 C++ 中执行此操作?
我有一些与您的代码类似的东西,但我将 AVDictionary
添加到我的 AVFormatContext
metadata 参数中,这对我来说很有效。这是基于您的代码的片段。
AVDictionary *pMetaData = NULL;
av_dict_set(&pMetaData, "title", "Cloud Recording", 0);
m_pFormatCtx->metadata = pMetaData;
avformat_write_header(m_pFormatCtx, NULL);
我正在将 h264 编码视频数据和 PCM g711 编码音频数据混合到 .mov
媒体容器中。我正在尝试在 header 上写入元数据,但是当我转到 windows 上的文件-> 右键单击-> 属性-> 详细信息时元数据没有显示,同样在 Ubuntu 上。这是我的代码 -
// Instead of creating new AVDictionary object, I also tried following way
// stated here:
// but no luck
AVDictionary* pMetaData = m_pFormatCtx->metadata;
av_dict_set(&pMetaData, "title", "Cloud Recording", 0);
av_dict_set(&pMetaData, "artist", "Foobar", 0);
av_dict_set(&pMetaData, "copyright", "Foobar", 0);
av_dict_set(&pMetaData, "filename", m_sFilename.c_str(), 0);
time_t now = time(0);
struct tm tStruct = *localtime(&now);
char date[100];
strftime(date, sizeof(date), "%c", &tStruct); // i.e. Thu Aug 23 14:55:02 2001
av_dict_set(&pMetaData, "date", date, 0);
av_dict_set(&pMetaData, "creation_time", date, 0);
av_dict_set(&pMetaData, "comment", "This video has been created using Eyeball MSDK", 0);
// ....................
// .................
/* write the stream header, if any */
int ret = avformat_write_header(m_pFormatCtx, &pMetaData);
我还尝试使用 linux 中的 mediainfo
和 exiftools
查看文件是否包含任何元数据。我也试过 ffmpeg -i output.mov
但没有显示元数据。
有什么问题吗? av_dict_set
中的flags
值0
可以吗?我是否需要为不同的平台设置不同的标志 (windows/linux)?
我看到了 this link,它说对于 windows,我必须使用 id3v2_version 3
和 -write_id3v1 1
来使元数据工作。如果是这样,我如何在 C++ 中执行此操作?
我有一些与您的代码类似的东西,但我将 AVDictionary
添加到我的 AVFormatContext
metadata 参数中,这对我来说很有效。这是基于您的代码的片段。
AVDictionary *pMetaData = NULL;
av_dict_set(&pMetaData, "title", "Cloud Recording", 0);
m_pFormatCtx->metadata = pMetaData;
avformat_write_header(m_pFormatCtx, NULL);