分别用ffmpeng和taglib开源库获取音频文件中的专辑封面图片

一,用ffmpeg命令来操作

ffmpeg的编译方法很简单,下载源码后,不用做过多的配置和修改,普通的configure;make;make install就可以编过。

从音频文件中提取出专辑封面图片:
ffmpeg  -i Jive_Cool.mp3  aaa.jpg
执行完这条命令后,专辑封面图片会保存在aaa.jpg文件中;

往音频文件中添加专辑封面:
ffmpeg -y -i audio1.mp3 -i cover.jpg -map 0:0 -map 1:0 -c copy -id3v2_version 3 audio2.mp3
执行完这条命令后,audio2.mp3中便会包含cover.jpg作为它的专辑封面了。


想要看源码?用ffmpeng库去编程解析获取专辑封面?抱歉,暂时没用ffmpeng编程过,如果以后用过再补上源码。


二,用开源库taglib进行专辑封面的获取,下面是源码片段:

char *fileName = "/tmp/aa.mp3";
TagLib::MPEG::File f(fileName);
TagLib::ID3v2::FrameList frameList = f.ID3v2Tag()->frameListMap()["APIC"];
if (!frameList.isEmpty()) {
    //这里取front就好了,back图片一般没用,有人在这里用iterator循环去取,应该就是担心front图片不存在,不过front图片不存在的话,循环也没用吧
    TagLib::ID3v2::AttachedPictureFrame *picFrame = static_cast<TagLib::ID3v2::AttachedPictureFrame *> (frameList.front()); 
    char *jpgFileName = "/tmp/cover.jpg";
    FILE *fd = fopen(jpgFileName, "wb");
    if (fd != NULL) {
        fwrite(picFrame->picture().data(), picFrame->picture().size(), 1, fd);
        fclose(fd);
    }
    cout <<" The album picture has been written to cover.jpg";
} else {
    cout <<"there seem to be no picture frames (APIC) frames in this audio file";
}


发布了22 篇原创文章 · 获赞 10 · 访问量 13万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览