You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

VB.NET中获取MP4文件属性(标题、备注)方法咨询

在VB.NET中获取MP4文件的标题/备注属性

嘿,我完全懂你的需求——要的是文件属性详情里的标题、备注这类元数据,不是简单的文件名对吧?这确实比取文件名麻烦点,但有两种实用方案可以搞定,我给你一步步讲清楚,就算VB基础有限也能跟着做:

方法一:使用Windows Shell对象(无需额外安装库)

Windows文件资源管理器里显示的那些属性,其实是通过Shell接口提供的。我们可以直接调用Shell32来获取这些信息,步骤如下:

  1. 添加Shell32引用

    • 在你的VB.NET项目里,右键点击「引用」→「添加引用」
    • 切换到「COM」标签页,找到并勾选「Microsoft Shell Controls And Automation」,然后确定
  2. 示例代码

    Imports Shell32
    
    Public Function GetMP4MetadataUsingShell(filePath As String) As Dictionary(Of String, String)
        Dim metadata As New Dictionary(Of String, String)()
        Dim shell As New Shell()
        Dim folder As Folder = shell.NameSpace(IO.Path.GetDirectoryName(filePath))
        Dim file As FolderItem = folder.ParseName(IO.Path.GetFileName(filePath))
    
        ' 获取标题(对应Shell属性索引21)
        Dim title As String = folder.GetDetailsOf(file, 21)
        If Not String.IsNullOrEmpty(title) Then
            metadata.Add("标题", title)
        End If
    
        ' 获取备注(对应Shell属性索引14)
        Dim comment As String = folder.GetDetailsOf(file, 14)
        If Not String.IsNullOrEmpty(comment) Then
            metadata.Add("备注", comment)
        End If
    
        Return metadata
    End Function
    
    ' 调用示例
    Sub Main()
        Dim mp4Path As String = "C:\YourFile.mp4"
        Dim result = GetMP4MetadataUsingShell(mp4Path)
        For Each kvp In result
            Console.WriteLine($"{kvp.Key}: {kvp.Value}")
        Next
    End Sub
    

    注意:Shell属性的索引可能因Windows版本略有不同,如果上面的索引不对,可以自己测试:遍历folder.GetDetailsOf(Nothing, index)来查看所有属性的名称,找到对应的索引值。

方法二:使用TagLib#(更可靠的媒体元数据处理库)

如果Shell方法不够稳定(比如某些MP4的元数据格式特殊),可以用专门的媒体元数据库TagLib#,它支持几乎所有主流媒体格式,处理MP4的元数据非常靠谱:

  1. 安装TagLib#

    • 在Visual Studio里,打开「工具」→「NuGet包管理器」→「管理解决方案的NuGet包」
    • 搜索「TagLibSharp」,安装到你的项目中
  2. 示例代码

    Imports TagLib
    
    Public Function GetMP4MetadataUsingTagLib(filePath As String) As Dictionary(Of String, String)
        Dim metadata As New Dictionary(Of String, String)()
        Try
            Dim file As TagLib.File = TagLib.File.Create(filePath)
            
            ' 获取标题
            If Not String.IsNullOrEmpty(file.Tag.Title) Then
                metadata.Add("标题", file.Tag.Title)
            End If
    
            ' 获取备注
            If Not String.IsNullOrEmpty(file.Tag.Comment) Then
                metadata.Add("备注", file.Tag.Comment)
            End If
    
            file.Dispose()
        Catch ex As Exception
            ' 处理异常,比如文件不存在、格式错误等
            metadata.Add("错误", ex.Message)
        End Try
        Return metadata
    End Function
    
    ' 调用示例
    Sub Main()
        Dim mp4Path As String = "C:\YourFile.mp4"
        Dim result = GetMP4MetadataUsingTagLib(mp4Path)
        For Each kvp In result
            Console.WriteLine($"{kvp.Key}: {kvp.Value}")
        Next
    End Sub
    

这个方法的优势是不用依赖Shell的属性索引,直接通过Tag对象获取标准的元数据字段,兼容性更好。

小提示

  • 测试时确保你的MP4文件确实已经设置了标题/备注属性,不然会返回空值
  • 如果是批量处理文件,记得加上错误处理,避免单个文件出错导致程序崩溃

内容的提问来源于stack exchange,提问作者Ethan

火山引擎 最新活动