使用 C# 和 MediaInfo 如何检测 HDR 格式

Posted

技术标签:

【中文标题】使用 C# 和 MediaInfo 如何检测 HDR 格式【英文标题】:Using C# and MediaInfo How to detect HDR format 【发布时间】:2021-11-08 02:24:27 【问题描述】:

我正在使用MediaInfo Nuget Wrapper 来分析一堆文件

在我可以看到的文件上使用 MediaInfo Actual

Video 
ID : 1 
Format : HEVC 
Format/Info : High Efficiency Video Coding 
Format profile : Main 10@L5.1@Main 
HDR format : Dolby Vision, Version 1.0, dvhe.05.09, BL+RPU 
Codec ID : dvhe 
Codec ID/Info : High Efficiency Video Coding with Dolby Vision 

Console.WriteLine(mw1.Inform()); 也可以看到这一点

但是我无法从下面的代码中得到它 我尝试过 HDR 格式、HDRformat 和其他拼写,但总是返回 ""

鉴于每个文件都会有所不同,是否有一种更动态的方式来执行此操作,而不是对每个属性进行硬编码?

代码仍处于测试阶段

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MediaInfo;
using MediaInfo.Model;

namespace GetMediaInfo

 class Program

    static void Main(string[] args)
    

        string BaseFold = @"Path\To\Test\Samples";

        string[] Files = Directory.GetFiles(BaseFold, "*.*", SearchOption.AllDirectories);
        foreach (var Vid in Files)
        

            string VidName = Path.GetFileName(Vid);
            if (VidName.EndsWith("jpg"))
            
                continue;
            
            Console.WriteLine(VidName);

            var mw1 = new MediaInfo.MediaInfo();
            mw1.Option("ParseSpeed", "0");
            mw1.Open(Vid);
            string ToDisplay = "";
            var videostreamcount = mw1.CountGet(StreamKind.Video, 0);
            var Audiostreamcount = mw1.CountGet(StreamKind.Audio, 0);
            if (videostreamcount > 0)
            
                    
                Console.WriteLine(mw1.Inform());
                foreach (var item in mw1.Get(StreamKind.Video,0,"*"))
                
                    Console.WriteLine(item);
                
                var Height = mw1.Get(StreamKind.Video, 0, "Height");
                var Width = mw1.Get(StreamKind.Video, 0, "Width");
                var VidFormat = mw1.Get(StreamKind.Video, 0, "Format");
                var HDRformat = mw1.Get(StreamKind.Video, 0, "HDR format"); // Always = ""
                var Codec = mw1.Get(StreamKind.Video, 0, "CodecID/Info");
                var CodecID = mw1.Get(StreamKind.Video, 0, "CodecID");
                Console.WriteLine("Height " + Height + ", Width " + Width + ", Codec " + Codec + ", CodecID " + CodecID + ", Format " + VidFormat + " , HDR format " + HDRformat);


                ToDisplay += "\r\n\r\nInfo_Parameters\r\n";
                ToDisplay += mw1.Option("Info_Parameters");

                //ToDisplay += "\r\n\r\nInfo_Capacities\r\n";
                //ToDisplay += mw1.Option("Info_Capacities");

                //ToDisplay += "\r\n\r\nInfo_Codecs\r\n";
                //ToDisplay += mw1.Option("Info_Codecs");
            //    Console.WriteLine(ToDisplay);
            
            else
            
                Console.WriteLine("Error No video streams in file");
            

            if (AudioStreamcount > 0)
            

                var AudioCodec = mw1.Get(StreamKind.Audio, 0, "CodecID/Info");
                var AudioCodecID = mw1.Get(StreamKind.Audio, 0, "CodecID");
                var AudioFormat = mw1.Get(StreamKind.Audio, 0, "Format");

                Console.WriteLine("AudioCodec: 0, AudioCodecID: 1, AudioFormat 2", AudioCodec, AudioCodecID, AudioFormat);
            
            else
            
                Console.WriteLine("Error No Audio streams in file");
            
        
        Console.ReadLine();
    


感谢

【问题讨论】:

【参考方案1】:

我尝试过 HDR 格式、HDR 格式和其他拼写但总是返回 ""

HDR_Format

提示:要知道要使用的键,请使用带有“--Language=raw”的 MediaInfo 命令行或带有 XML 输出的图形界面。

Jérôme,MediaInfo 开发人员

【讨论】:

感谢@Jérôme Martinez 的成功。我知道它必须是一些简单的 XML 输出提示,以后会很方便

以上是关于使用 C# 和 MediaInfo 如何检测 HDR 格式的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Mac 系统上同时打开多个 MediaInfo 应用程序实例?

在 C# 项目中使用 MediaInfo.dll

C#使用MediaInfo查看媒体信息

将 MediaInfo DLL 与 C# DLLImport 一起使用

centos7下mediainfo安装与使用

centos7下mediainfo安装与使用