Как пропустить свойства «Высота кадра» и «Ширина кадра» видеофайла в C # с помощью Shell32 (Windows 10)? - PullRequest
3 голосов
/ 29 апреля 2019

Я пытаюсь определить разрешение видеофайлов с помощью Shell32 в C #, но свойства возвращают пустые строки, хотя оболочка Windows отображает информацию просто отлично.

Обратите внимание, что я не могу включить какие-либо сторонние организациибиблиотеки для этой задачи (DirectShow или другие).

Это поведение сохраняется для различных видеофайлов.К сожалению, ни один из ответов, предоставленных в здесь , не был полезен.

Я использую следующий код для извлечения информации:

Shell32.Shell shell = new Shell32.Shell();
Shell32.Folder objFolder;

objFolder = shell.NameSpace(Path.GetDirectoryName(videoFile.FullName));
FolderItem objFile = objFolder.ParseName(videoFile.Name);

List<string> arrHeaders = new List<string>();
for (int i = 0; i < 1000; i++) {
  string header = objFolder.GetDetailsOf(null, i);
  if (String.IsNullOrEmpty(header))
    continue;
  arrHeaders.Add(header);
}

var length = objFolder.GetDetailsOf(
  objFile, arrHeaders.FindIndex(h => h == "Length"));
var resWidth = objFolder.GetDetailsOf(
  objFile, arrHeaders.FindIndex(h => h == "Frame width"));
var resHeight = objFolder.GetDetailsOf(
  objFile, arrHeaders.FindIndex(h => h == "Frame height"));

Для следующего файла:Я ожидаю, что resWidth будет иметь значение "1920", а resHeight будет иметь значение "1080", но они оба содержат пустые строки.Оба свойства существуют в arrHeaders, в частности, в моей системе с индексами 301 и 303.

Hearthstone.mp4 file properties

Как примечание: свойство Length работает, как и ожидалось.

1 Ответ

0 голосов
/ 29 апреля 2019

Ого, прости за это.Кажется, я полностью пропустил тот факт, что я неправильно перечисляю индексы, поскольку пропускаю пустые заголовки.? Проблема решена!

...