如何从 .mov 文件中提取开始时间码和持续时间/长度元数据?

问题描述 投票:0回答:3

我在 Windows 上有 C# .NET 客户端,需要从 .mov 文件中提取开始时间码和持续时间/长度元数据。有谁知道该怎么做吗?我在网上查了一下,但还没有找到任何东西。

c# .net quicktime
3个回答
0
投票

我不知道有任何 C# 库能够解析 .mov 文件。您可以在您的环境中调用非托管代码吗? (需要 FullTrust 权限)

自己解析文件确实很困难(我们在 DirectShow 过滤器中做过一次),所以我建议使用库来为您完成这项工作。看看例如 MediaInfoffmpeg

MP4 容器与 .mov 文件非常相似,因此您还可以使用 mp4box 等 MP4 工具来提取非常详细的信息(例如开始时间码)


0
投票

如果您可以调用非托管代码,您也许可以仅使用 Windows 版 QuickTime 来获取此信息。

如果做不到这一点,您想要的所有信息都在电影头原子中。所有 QuickTime 影片都从时间 0 开始(这样问题就解决了一半)并在指定的持续时间结束,该持续时间等于其最长轨道的持续时间。时间以电影时间尺度来指定,它定义了每秒的时间单位数;默认为每秒 600 个单位。

您可以通过扫描文件中的电影头原子(其类型为

'mvhd'
)来找到电影时间尺度和持续时间,然后向前跳到该原子的时间尺度和持续时间字段,它们比电影开头的 16 个字节长。原子类型字段(您找到的“mvhd”)。每个都是大端 4 字节无符号整数。

QuickTime 是一种容器格式,但并非所有电影文件都包含电影标头。有些只是参考或流媒体电影,指向实际电影数据所在的其他位置。即使电影标头存在,也不要求它实际上是文件数据的标头。

您可以在 QuickTime 文件格式规范 中阅读太多有关 QuickTime 文件格式的内容。 (MPEG-4 文件格式实际上基于 QuickTime 文件格式,因此如果您对此有所了解,那么这些知识应该可以转移。)


0
投票

LibVLCSharp 可能就是您正在寻找的。

记得安装平台对应的包(例如LibVLC.Windows),然后就可以这样使用了:

using LibVLCSharp.Shared;

internal class Program
{
    private static void Main(string[] args)
    {
        var vlc = new LibVLC();

        Media m = new(vlc,new Uri(@"d:\sample.mov"));
        
        // async method, using awaiter here for simplicity
        m.Parse().GetAwaiter().GetResult();

        // video duration in ms
        Console.WriteLine(m.Duration);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.