MSDN.WhiteKnight - Stack Overflow answers
Ответ на "С# Получить длительность видеофайла"
Answer 1297432
или же можно использовать какие-либо внутренние API Windows?
Конечно можно, и даже нужно! Если Windows умеет воспроизводить какой-либо формат видео, то и получение длительности идет в комплекте. Проще всего добраться до него, не подключая библиотек и не декларируя никаких интерфейсов DirectShow / Media Foundation можно через свойства в Shell API. Media Foundation предоставляет провайдер со свойствами для видеофайлов, воспроизведение которых поддерживается, т.е. для тех, которые открываются в Windows Media Player. Именно благодаря этому в свойствах файла в проводнике можно посмотреть длительность, разрешение видео и др. Длительность является 27 свойством (что не документировано, но хорошо известно).
Вот так можно получить свойство через Shell API в C# (идея взята из этого ответа):
[STAThread] static void Main(string[] args) { string path = @"C:\Media\test.avi"; string dir = Path.GetDirectoryName(path); string file = Path.GetFileName(path); Type shellAppType = Type.GetTypeFromProgID("Shell.Application"); dynamic shell = Activator.CreateInstance(shellAppType); dynamic folder = shell.NameSpace(dir); dynamic folderItem = folder.ParseName(file); string value = folder.GetDetailsOf(folderItem, 27).ToString(); Console.WriteLine("Duration: " + value); }
Это выведет строку вида "Duration: 01:54:46"
Стандартно работает с форматами, поддерживаемыми Media Foundation, например WMV, AVI. Провайдеры для других форматов могут быть добавлены с пакетами кодеков.
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.