使用FFMpeg 获取MP3文件中的信息和图片

我们在播放音频文件时,如MP3格式的音频文件,一些播放器会显示音乐名称专辑名称歌手音乐图像等信息,如下图片所示:
在这里插入图片描述
下面介绍使用FFMpeg来获取这些信息。

  1. 使用函数avformat_open_input打开文件,结封装。
  2. 使用函数avformat_find_stream_info查找并添加流信息到Format上下文中。
  3. 使用函数av_dict_get获取文件中的字典信息。

下面是关键部分代码:

1.获取音乐相关信息

获取文件中的信息:

// 打开文件
int result = avformat_open_input(&m_AVFormatContext, fileName.toLocal8Bit().data(), nullptr, nullptr);
if (result != 0 || m_AVFormatContext == nullptr)
    return false;

// 查找流信息,把它存入AVFormatContext中
 if (avformat_find_stream_info(m_AVFormatContext, nullptr) < 0)
    return false;

int streamsCount = m_AVFormatContext->nb_streams;

// 读取详细信息
AVDictionaryEntry *tag = nullptr;
while (tag = av_dict_get(m_AVFormatContext->metadata, "", tag, AV_DICT_IGNORE_SUFFIX))
{
    QString keyString = tag->key;
    QString valueString = QString::fromUtf8(tag->value);
    m_InfoMap.insert(keyString, valueString);
}

这里将信息放到了一个QMap中存储。
下面是我本地的音频文件中的得到的字典信息:
在这里插入图片描述

title表示歌曲名,album表示专辑名称,artist表示艺术家(歌手)

2.获取图片

获取图片代码关键部分如下:

int streamsCount = m_AVFormatContext->nb_streams;
for (int i=0; i<streamsCount; ++i)
{
    if (m_AVFormatContext->streams[i]->disposition & AV_DISPOSITION_ATTACHED_PIC)
    {
        AVPacket pkt = m_AVFormatContext->streams[i]->attached_pic;
        m_InfoImage = QImage::fromData((uchar*)pkt.data, pkt.size);
    }
}

这里将图片信息存入到QImage类型的名为m_InfoImage的成员变量中。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值