利用ffmpeg讀取音樂文件的專輯信息(包括專輯封面圖片)

工做原理

讀取metadata

AVFormatContext 結構體中有一個屬性是metadata,咱們在讀取一個多媒體文件的時候,能夠經過AVDictionaryEntry訪問這個屬性的數據。html

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的官方示例spa

讀取專輯封面圖片

// 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):code

音樂文件封面縮略圖預覽

clipboard.png

播放預覽

clipboard.png

clipboard.png

clipboard.png

相關文章
相關標籤/搜索