VB.NET中获取MP4文件属性(标题、备注)方法咨询
在VB.NET中获取MP4文件的标题/备注属性
嘿,我完全懂你的需求——要的是文件属性详情里的标题、备注这类元数据,不是简单的文件名对吧?这确实比取文件名麻烦点,但有两种实用方案可以搞定,我给你一步步讲清楚,就算VB基础有限也能跟着做:
方法一:使用Windows Shell对象(无需额外安装库)
Windows文件资源管理器里显示的那些属性,其实是通过Shell接口提供的。我们可以直接调用Shell32来获取这些信息,步骤如下:
添加Shell32引用:
- 在你的VB.NET项目里,右键点击「引用」→「添加引用」
- 切换到「COM」标签页,找到并勾选「Microsoft Shell Controls And Automation」,然后确定
示例代码:
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的元数据非常靠谱:
安装TagLib#:
- 在Visual Studio里,打开「工具」→「NuGet包管理器」→「管理解决方案的NuGet包」
- 搜索「TagLibSharp」,安装到你的项目中
示例代码:
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




