编程实战——电影管理器之利用MediaInfo获取高清视频文件的相关信息

  • 时间:
  • 浏览:0

StreamKind

,

Parameter

可能性仅仅是想获得某六个 信息,则需用调用下面的一段话

.PtrToStringUni(MediaInfo_GetI(Handle,

)

Option_

StreamNumber

    Public Function Height() As String

官网上的Visual Basic 2010调用代码如下:

    HowTo

)

在打开的项目属性中,点开“调试”,勾上“启用非托管代码调试”,都可不能不能正常调试。

    Sub New()

    ShowInSupported

()

    Chapters

    Public Function AudioCount() As Integer

,

    Text

MediaInfo_Delete

MediaInfo_Inform

Value

(-1,

))

    Public Sub New()

(

StreamKind

_M.Inform

可能性是缺少Lib文件的缘故,不过我没在官网上找到Lib文件的下载

Index = 0

    Audio

Count_Get(

(

MediaInfo_Option

于是萌生了此人 编写电影管理器的想法,并逐步逐步在实现。利用博客记录编写的过程,也是和网友视频见面见面之间的交流。期望在交流的过程中,网友视频见面见面能提出这类于于中肯的意见,使此人 少走些弯路。

(

2、新建项目

随着高速(20M)宽带、HTPC、大容量硬盘(3T)的普及,下载高清片并利用大屏幕观看也成为普通的事情。

_M.Open(FileName)

_M.Option_("Complete")

Return _M.Inform

我包装的代码如下:

在查看信息前,需调用GetInfo(FileName As String)函数,该函数的目的是获得相关的信息,一共三句话

,

    ShowInInform

MediaInfo_New

        _M.Open(FileName)

(StreamKind,

下面就介绍怎么才能 才能 利用MediaInfo来获得高清视频文件的相关信息。

大伙儿儿都可不能不能利用MediaInfo来获取那些信息(视频分辨率、视频时长、音频数、音频的语言类型)

FileName

,

解释一下:

    Max

.PtrToStringUni(MediaInfo_Inform(Handle,

StreamNumber

(MediaInfo_Count_Get(Handle,

这类于于代码在做高清视频文件的信息库的如果有点痛 有用。都可不能不能根据高清视频文件自动获取相关信息,毋须再手动填充信息。

    Text

这两篇文章对参数介绍的很完正,而是文章写得早,提供的DLL版本比较低罢了

视频深度图:_M.Get_(StreamKind.Visual, 0, "Height")

.MaxValue

Get_(

以上信息中的底下六个(视频分辨率、视频时长、音频数、音频的语言类型),用视频播放器都能获得。但会 怎么才能 才能 在此人 的进程中获得那些信息呢?

Index < 0

1920  1040

01:34:48.683

2

English,Chinese

,

,

可能性想获取这类于于的信息,直接给出相应的参数就行了。这类于想获得视频的最大码率,给出参数BitRate_Maximum就行了。如下调用

_M.Get_(

),

,

.Name)

KindOfInfo

StreamNumber

, C

(

音频语言:_M.Get_(StreamKind.Audio, I, "Language/String")。也是多种选折 ,该调用返回 English 这类于于格式;可能性是:_M.Get_(StreamKind.Audio, I, "Language"),则返回 en 这类于于格式。

    Dim Handle As IntPtr

System.

.Visual, 0,

,

Handle

下面是获取 G:\Despicable.Me.2010.BluRay.1060 p.DTS.2Audio.x264-CHD.mkv 这类于于高清视频文件信息的调用代码:

(

    Name

(0,

.General, 0,

)

视频时长:视频文件的时长,这类于:长1小时32分

,

音频个数:_M.Get_(StreamKind.General, 0, "AudioCount")

=

4、再次包装,方便调用

        Handle = MediaInfo_New()

(Parameter,

Public Class MediaInfo

    Visual

)))

)

S.GetInfo("G:\Despicable.Me.2010.BluRay.1060 p.DTS.2Audio.x264-CHD.mkv")

,

    Max

Public Enum InfoOptions As UInteger

L(C - 1)

), Parameter,

),

System.Runtime.InteropServices

)

StreamNumber

)

    Menu

在http://sourceforge.net/projects/mediainfo/files/development_snapshots/上点击Download MediaInfo_GUI_0.7.64_Windows.exe (4.5 MB),下载最新的版本。安装后在安装的目录中找到MediaInfo.dll和MediaInfo_i386.dll这六个 DLL文件。

,

Handle

没办法 ,对应的调用而是

另,不需用在项目中对MediaInfo.dll引用。引用会出错,如下所示:

),

(StreamKind,

    Reserved

Parameter

KindOfInfo

音频的语言类型:具体到每个音频的语言。这类于:音频1是英文,音频2是中文等

    Public Function Duration() As String

音频数:视频文件中的音频数,有不少的高清视频文件中涵盖不止六个 音频。有的涵盖英文、中文六个 音频;有的涵盖英文、中文、粤语六个音频

    Options

)))

可能性底下的代码是提供了六个 类供调用者使用,但会 ,我决定再包装一下,使其看起来简单这类于于(我只需用分辨率、时长、音频数、音频语言这六个信息)。

MediaInfo_State_Get

),

.General, 0,

)

Handle

Handle

    Public Function AudioLanguage() As String()

KindOfInfo

),

首先在类的内控 定义六个 MediaInfo类的实例,具体的功能全是通过该实例来完成。

(StreamKind,

,

    Image

.Audio, I,

=

.Text)

随着下载影片的增多,管理全是了问题,有时在茫茫文件夹下找寻六个 影片也是一件费时费力的事。

_M.Get_(

)

Handle

(

    TypeOfValue

=

    MeasureText

,

先看看MediaInfo的介绍,MediaInfo官网。在官网上有相关的介绍,并给出了调用的代码(很完备。C++,C#,Visual Basic等全是)

)

Handle

MediaInfo_Open

C#使用MediaInfo查看媒体信息

)

Finalize()

文件名:视频文件的文件名,这类于于比较简单,利用FileInfo类就能获得

视频分辨率:视频文件的分辨率,这类于:宽1960 像素,高1040像素。

_M.Get_(StreamKind.Visual, 0, "BitRate_Maximum")

KindOfSearch

,

    Public Function GetInfo(FileName As String) As String

第六个 参数,获取信息的流编号。一般取0(第六个 流,视频一般就六个 流,音频有可能性多于六个 流),音频一段话,取相应的流编号(0如果刚开始,到流数减1)

Option_(

        Return L

)))

第六个参数,获取信息的名字。根据该参数返回对应的信息。

视频深度图:_M.Get_(StreamKind.Visual, 0, "Width")

Handle

,

第1句,打开FileName指定的文件;第2句,获取相关信息,并通知类,可能性获取完毕(可能性在DLL中会有释放资源等操作);第3句,返回视频文件的相关信息。

.PtrToStringUni(MediaInfo_Get(Handle,

(MediaInfo_State_Get(Handle))

Open(

)

MediaInfo_Count_Get

MediaInfo_Open(Handle, FileName)

第六个 参数,获取信息的类别。一般取StreamKind.General(通用信息)、StreamKind.Visual(视频信息)、StreamKind.Audio(音频信息)

    NameText

StreamNumber

    Info

.Visual, 0,

Value

可能性DLL仅仅提供了函数。而目前的编码基本上全是面向对象,所以在官网上针对所以的语言都提供了相应的代码,把函数调用包装成类,方便调用者使用。Visual Basic的调用代码在http://sourceforge.net/p/mediainfo/code/5846/tree/MediaInfoLib/trunk/Project/MSVB2010/上,这类于于语言在相关的网页上都可不能不能找到,这里就不赘述了。

    Public Function AudioLanguage(Index As Integer) As String

.Audio, Index,

说明视频分辨率为1920*1040;时长:1小时34分48秒;六个 音频;分别是英文和中文;

    Max

Parameter

Dim S As New clsMediaInfo

,

_M.Get_(StreamKind.Visual, 0, "Width")

,

)

    General

)

(

(StreamKind,

,

        MediaInfo_Delete(Handle)

StreamNumber =

,

Handle

Get_(

_M.Get_(

= AudioCount()

StreamKind

        _M =

Inform()

),

1、下载相应的DLL

Public Enum StreamKind As UInteger

Close()

        For I = 0 To C - 1

),

一共六个 参数。

3、把官网中的提供的调用代码加在到项目中来

(StreamNumber,

StreamNumber

.PtrToStringUni(MediaInfo_Option(Handle, Option__, Value))

我在拿到六个 高清视频文件时。若果能有最好的措施 获知以下的信息

)))

KindOfSearch

KindOfInfo

,

,

FileName

)))

RichTextBox1.Text = S1

没办法 ,怎么才能 才能 能知道有那些参数呢?参看

高清视频文件的相关信息都保指在文件的头部区域,记录的信息有所以(除却底下的并不是外,还包括码率、编码类型等等)。而MediaInfo而是利用读取头部区域的信息来获得相关的信息。官网的更新太快,笔者下载的是2013年7月6日发布的最新版。

返回的信息如下:

.Text,

MediaInfo参数大全

,

    Public Function Width() As String

(MediaInfo_Count_Get(Handle,

StreamKind

Dim S1 As String = ""

S1 &= S.Width & "  " & S.Height & vbNewLine

S1 &= S.Duration & vbNewLine

S1 &= S.AudioCount & vbNewLine

S1 &= S.AudioLanguage(0) & "," & S.AudioLanguage(1)

StreamKind

可能性没办法 勾上,运行时则会出先下面的对话框

MediaInfo_GetI

)

文件大小:视频文件的大小,这类于于也比较简单,利用FileInfo类能获得

,

.MaxValue)

Public Enum InfoKind As UInteger

视频时长:_M.Get_(StreamKind.General, 0, "Duration/String3")。这类于于有多种选折 ,该调用返回 01:34:48.683 这类于于格式;可能性是:_M.Get_(StreamKind.General, 0, "Duration"),则返回 5688683 ,还需用此人 转换。

.ToInt32(_M.Get_(

        MediaInfo_Close(Handle)

MediaInfo_Get

MediaInfo_Close

Reserved

(

I

(KindOfSearch,

)

Parameter

=

在VS2010中新建项目,把相关的DLLqq克隆好友 到可执行进程的目录(在项目文件夹下的bin\Debug\,可能性qq克隆好友 到系统目录中)

第3句话返回的是所有的信息,长长的一串。

        _M.Option_(

_M

Handle

State_Get()

            L(I) = _M.Get_(

StreamKind

(StreamNumber,

Option__

注:MediaInfo.dll貌似是64位的;MediaInfo_i386.dll貌似是32位的;在底下的调试中,MediaInfo.dll始终会报错,反而MediaInfo_i386.dll改成MediaInfo.dll后qq克隆好友 到目录中调试一遍成功。

要注意的是,在如上所做时,还得在VS2010中进行设置

=

(KindOfInfo,

Index > AudioCount() - 1

)

)

(StreamNumber,

    Measure

(KindOfInfo,

(

_M.Get_(