我是靠谱客的博主 冷傲皮皮虾,最近开发中收集的这篇文章主要介绍 利用ffmpeg读取音乐文件的专辑信息(包括专辑封面图片),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

工作原理

读取metadata

AVFormatContext 结构体中有一个属性是metadata,我们在读取一个多媒体文件的时候,可以通过AVDictionaryEntry访问这个属性的数据。

        AVFormatContext *fmt_ctx = NULL;
        AVDictionaryEntry *tag = NULL;
        
        av_register_all();
        
        if ((ret = avformat_open_input(&fmt_ctx, "path_to_file.mp3", NULL, NULL))){
            printf("Fail to open file");
        }
        
        //读取metadata中所有的tag
        while ((tag = av_dict_get(fmt_ctx->metadata, "", tag, AV_DICT_IGNORE_SUFFIX))){
            printf("Tag:%s , Value: %s", tag->key, tag->value);
        }

clipboard.png

AvFormatContext
AVDictionaryEntry
读取metadata的官方示例

读取专辑封面图片

        // read the format headers
        if (fmt_ctx->iformat->read_header(fmt_ctx) < 0) {
            printf("No header format");
            return;
        }

        for (int i = 0; i < fmt_ctx->nb_streams; i++){
            if (fmt_ctx->streams[i]->disposition & AV_DISPOSITION_ATTACHED_PIC) {
                AVPacket pkt = fmt_ctx->streams[i]->attached_pic;
                //使用QImage读取完整图片数据(注意,图片数据是为解析的文件数据,需要用QImage::fromdata来解析读取)
                QImage img = QImage::fromData((uchar*)pkt.data, pkt.size);
                imageWidget->setPixmap(QPixmap::fromImage(img));
                break;
            }
        }

clipboard.png


我给深度文件管理器添加的音乐文件预览播放的支持效果(Linux deepin):

音乐文件封面缩略图预览

clipboard.png

播放预览

clipboard.png

clipboard.png

clipboard.png

最后

以上就是冷傲皮皮虾为你收集整理的 利用ffmpeg读取音乐文件的专辑信息(包括专辑封面图片)的全部内容,希望文章能够帮你解决 利用ffmpeg读取音乐文件的专辑信息(包括专辑封面图片)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部