使用C#结合MediaInfo检测视频HDR格式的取值问题咨询
解决方案
1. HDR format字段读取为空的修复
你使用的是MediaInfo界面显示的友好字段名,不是接口查询用的内部键名,该字段对应的内部查询键为HDR_Format,将对应代码修改为如下内容即可正常读取:
var HDRformat = mw1.Get(StreamKind.Video, 0, "HDR_Format");
如果后续遇到其他显示字段读不到的情况,可以通过输出mw1.Option("Info_Parameters")查看所有支持的内部参数名,或者直接遍历所有参数键值对匹配目标字段。
2. 无需硬编码的动态属性读取方案
MediaInfo Wrapper提供了直接获取当前流所有可用参数名的能力,你可以通过遍历参数名列表,将所有属性存入字典实现动态读取,不需要提前硬编码任何字段:
// 视频流动态读取示例 if (videostreamcount > 0) { Dictionary<string, string> videoProps = new Dictionary<string, string>(); // 获取当前视频流所有可用的参数键名 var allParamKeys = mw1.Get(StreamKind.Video, 0, "*").Split(new[] {'\n'}, StringSplitOptions.RemoveEmptyEntries); foreach (var key in allParamKeys) { var cleanKey = key.Trim(); if (!string.IsNullOrEmpty(cleanKey)) { videoProps[cleanKey] = mw1.Get(StreamKind.Video, 0, cleanKey).Trim(); } } // 取值使用示例 if (videoProps.TryGetValue("Height", out string height)) Console.WriteLine($"Height: {height}"); if (videoProps.TryGetValue("HDR_Format", out string hdrFormat)) Console.WriteLine($"HDR Format: {hdrFormat}"); // 打印所有属性方便调试 foreach (var kvp in videoProps) { Console.WriteLine($"{kvp.Key}: {kvp.Value}"); } }
音频流、字幕流等其他类型的流都可以用同样的逻辑实现动态读取,只需要把StreamKind.Video替换为对应流类型即可。
内容的提问来源于stack exchange,提问作者Holly
相关产品推荐
相关产品推荐

