You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#/.NET中使用MediaInfo库提取媒体文件封面?

解决MediaInfo提取音频文件全部封面的问题

问题原因

你当前的代码仅尝试读取General流第0项的Cover_Data,但多封面的实际数据需要按封面索引逐个获取,且需正确配置MediaInfo选项以确保返回Base64格式的封面数据。

正确实现步骤

  1. 初始化MediaInfo并打开文件后,指定Cover_Data的返回格式为Base64
  2. 从General流的Cover字段解析出封面总数
  3. 遍历每个封面索引,分别提取对应的封面数据

完整代码示例

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 09:55:10