C++来自 MPEG 4 文件的 Taglib 封面艺术

发布于 2024-11-18 03:16:41 字数 667 浏览 3 评论 0原文

作为一个副业/有趣的项目,我正在构建一个音频播放器(Qt 应用程序),其中一个障碍是显示嵌入式封面艺术。对于 *.mp3 文件,这最终不是太大的问题,主要归功于提供的示例 此处

static QImage imageForTag(TagLib::ID3v2::Tag *tag)
{
    TagLib::ID3v2::FrameList l = tag->frameList("APIC");

    QImage image;

    if(l.isEmpty())
        return image;

    TagLib::ID3v2::AttachedPictureFrame *f =
        static_cast<TagLib::ID3v2::AttachedPictureFrame *>(l.front());

    image.loadFromData((const uchar *) f->picture().data(), f->picture().size());

    return image;
}

但是,如何为 MPEG 4 文件(特别是 *.m4a)提取嵌入的封面艺术?

As a side/fun project I'm building an audio player (Qt application), and one of the hurdles is displaying embedded cover art. With *.mp3 files this ended up not being too much of an issue, mainly thanks to the example provided here:

static QImage imageForTag(TagLib::ID3v2::Tag *tag)
{
    TagLib::ID3v2::FrameList l = tag->frameList("APIC");

    QImage image;

    if(l.isEmpty())
        return image;

    TagLib::ID3v2::AttachedPictureFrame *f =
        static_cast<TagLib::ID3v2::AttachedPictureFrame *>(l.front());

    image.loadFromData((const uchar *) f->picture().data(), f->picture().size());

    return image;
}

However, how can embedded cover arts be extracted for MPEG 4 files (particularly *.m4a)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一梦等七年七年为一梦 2024-11-25 03:16:41

操作方法如下:

TagLib::MP4::File f(file);
TagLib::MP4::Tag* tag = f.tag();
TagLib::MP4::ItemListMap itemsListMap = tag->itemListMap();
TagLib::MP4::Item coverItem = itemsListMap["covr"];
TagLib::MP4::CoverArtList coverArtList = coverItem.toCoverArtList();
if (!coverArtList.isEmpty()) {
    TagLib::MP4::CoverArt coverArt = coverArtList.front();
    image.loadFromData((const uchar *)
    coverArt.data().data(),coverArt.data().size());
}

image 来自 Qt QImage 类,“file”只是一个 char* 变量。

Here is how to do it:

TagLib::MP4::File f(file);
TagLib::MP4::Tag* tag = f.tag();
TagLib::MP4::ItemListMap itemsListMap = tag->itemListMap();
TagLib::MP4::Item coverItem = itemsListMap["covr"];
TagLib::MP4::CoverArtList coverArtList = coverItem.toCoverArtList();
if (!coverArtList.isEmpty()) {
    TagLib::MP4::CoverArt coverArt = coverArtList.front();
    image.loadFromData((const uchar *)
    coverArt.data().data(),coverArt.data().size());
}

image is from the Qt QImage class, and "file" is simply a char* variable.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文