【问题标题】:How can I read the info of a media file using visual c++?如何使用 Visual C++ 读取媒体文件的信息?
【发布时间】:2013-10-06 17:18:12
【问题描述】:

有没有办法使用 Visual Studio C++ 在 Windows 上读取媒体文件(avi、mp4、mkv 等)的信息(fps、比特率、持续时间、所需的编解码器等)?

我设法使用 directshow (http://msdn.microsoft.com/en-us/library/windows/desktop/dd389098%28v=vs.85%29.aspx) 播放了各种文件(实际上我什至不想要),但我不知道如何只从文件中获取信息。

编辑:我让它像这样工作......

int             height, width, framerate, bitrate;
LARGE_INTEGER   duration;

// initialize the COM library
CoInitialize(NULL);

// 
IPropertyStore* store = NULL;
SHGetPropertyStoreFromParsingName(L"E:\\test.avi", NULL, GPS_DEFAULT, __uuidof(IPropertyStore), (void**)&store);

PROPVARIANT variant;

store->GetValue(PKEY_Media_Duration, &variant);
duration = variant.hVal;
store->GetValue(PKEY_Video_FrameHeight, &variant);
height = variant.lVal;
store->GetValue(PKEY_Video_FrameWidth, &variant);
width = variant.lVal;
store->GetValue(PKEY_Video_FrameRate, &variant);
framerate = variant.lVal;
store->GetValue(PKEY_Video_TotalBitrate, &variant);
bitrate = variant.lVal;
// 
store->Release();
//
CoUninitialize();

【问题讨论】:

    标签: visual-c++ video windows-7


    【解决方案1】:

    您可以通过 DirectShow 获取此信息,但是如果您不需要播放/流式传输管道并且您使用的是 Windows 7,那么您可能有一个更好的替代选项来从 shell 属性获取数据 - 那些提供数据到显示在 Windows 资源管理器的其他列中。

    【讨论】:

      【解决方案2】:

      您是否考虑过使用MediaInfo SDK?您可以获得有关容器中所有可用音频和视频流的广泛信息,包括编解码器细节以及您所询问的所有内容。

      他们的入门指南和参考文档在这里: http://mediaarea.net/en/MediaInfo/Support/SDK/Quick_Start http://mediaarea.net/en/MediaInfo/Support/SDK/More_Info

      代码可在他们的 SourceForge 页面here 上找到。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-22
        • 1970-01-01
        • 2016-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多