从Delphi或Lazarus中的视频文件中提取Exif Metadata等效日期和时间数据

时间:2014-07-19 17:27:20

标签: file delphi video metadata exif

所以,我的所有个人家庭照片的硬盘今天都崩溃了。

我不想花几百美元专业地收回一切。

我设法使用Easeus数据恢复软件恢复了一切(我认为) 我编写了一个应用程序,通过每张照片并提取 日期和时间Exif数据然后将其应用于文件日期和时间。

现在我必须对视频剪辑做同样的事情。

有谁知道如何做到这一点? 是否有任何库可以让程序员访问videofile Exif 等效的日期和时间数据?

1 个答案:

答案 0 :(得分:1)

PSLookupPropertyHandlerCLSID API + IPropertyStore界面可让您快速访问视频/音频/图像文件的元数据,Windows本身具有识别功能。

资源管理器使用此API在详细信息视图中填充列,您还可以使用this post中的应用程序快速检查文件与提及的API,无论它是否有用:

  

Bonus工具:FilePropertyStore应用程序,用于读取您拖放到其上的文件的属性,Win32x64版本。

按文件路径访问属性的C ++代码段将是:

    CLSID ClassIdentifier = CLSID_NULL;
    __C(PSLookupPropertyHandlerCLSID(CStringW(pszPath), &ClassIdentifier));
    CComPtr<IPropertyStore> pPropertyStore;
    __C(pPropertyStore.CoCreateInstance(ClassIdentifier));
    // NOTE: Initializing Property Handlers
    //       http://msdn.microsoft.com/en-us/library/windows/desktop/cc144131%28v=vs.85%29.aspx
    const CComQIPtr<IInitializeWithStream> pInitializeWithStream = pPropertyStore;
    __D(pInitializeWithStream, E_NOINTERFACE);
    CComPtr<IStream> pStream;
    __C(SHCreateStreamOnFileEx(CStringW(pszPath), STGM_READ, FILE_ATTRIBUTE_NORMAL, FALSE, NULL, &pStream));
    __C(pInitializeWithStream->Initialize(pStream, STGM_READ));
    DWORD nPropertyCount = 0;
    __C(pPropertyStore->GetCount(&nPropertyCount));
    // TODO: Access individual properties

当然,这不完全是EXIF。 EXIF值映射到获取的属性集合以及相应的视频文件属性。此API对静态文件和音频文件也有效。