如何在C#/.NET中使用MediaInfo库提取媒体文件封面?
解决MediaInfo提取音频文件全部封面的问题
问题原因
你当前的代码仅尝试读取General流第0项的Cover_Data,但多封面的实际数据需要按封面索引逐个获取,且需正确配置MediaInfo选项以确保返回Base64格式的封面数据。
正确实现步骤
- 初始化MediaInfo并打开文件后,指定
Cover_Data的返回格式为Base64 - 从General流的
Cover字段解析出封面总数 - 遍历每个封面索引,分别提取对应的封面数据
完整代码示例
using MediaInfoDotNet; // 确保引用官方提供的包装类 List<string> allCoversBase64 = new List<string>(); using (MediaInfo mi = new MediaInfo()) { mi.Open(filePath); // 配置返回Base64格式的封面数据 mi.Option("Cover_Data", "base64"); // 解析封面总数:针对返回"Yes / Yes"的情况拆分计数 string coverStatus = mi.Get(StreamKind.General, 0, "Cover"); int coverCount = coverStatus.Split('/').Count(s => s.Trim().Equals("Yes", StringComparison.OrdinalIgnoreCase)); // 遍历每个封面,提取对应Base64数据 for (int i = 0; i < coverCount; i++) { string base64Data = mi.Get(StreamKind.General, 0, $"Cover_Data_{i+1}"); if (!string.IsNullOrEmpty(base64Data)) { allCoversBase64.Add(base64Data); } } mi.Close(); } // 后续处理示例:将Base64转为图片字节数组 foreach (var base64 in allCoversBase64) { byte[] imageBytes = Convert.FromBase64String(base64); // 可保存为文件或转换为Image对象使用 }
关键说明
- 必须通过
mi.Option("Cover_Data", "base64")明确指定返回格式,否则MediaInfo可能返回无法直接使用的原始二进制字符串 - 多封面的字段命名规则为
Cover_Data_1、Cover_Data_2...,需按索引依次获取 - 使用
using语句可确保MediaInfo资源被正确释放 - 不同文件的
Cover字段返回格式可能不同(部分文件直接返回数字),可根据实际情况调整计数逻辑
内容的提问来源于stack exchange,提问作者Makaveli84
相关产品推荐
相关产品推荐

