cmd进入到FFmpeg.exe目录中,即可在命令行下进行各种操作,查看视频信息命令:ffmpeg 视频 -i,如下图:
D:\ffmpeg\bin、ffmpeg -i d:\20161019_085353.mp4

ffmpeg version 3.1.5 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 5.4.0 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-dx
va2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-lib
ebur128 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --ena
ble-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfree
type --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enab
le-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-lib
openh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschr
oedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheor
a --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvo
rbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --ena
ble-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --e
nable-decklink --enable-zlib
  libavutil      55. 28.100 / 55. 28.100
  libavcodec     57. 48.101 / 57. 48.101
  libavformat    57. 41.100 / 57. 41.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 47.100 /  6. 47.100
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  1.100 /  2.  1.100
  libpostproc    54.  0.100 / 54.  0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'd:\20161019_085353.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 0
    compatible_brands: isom3gp4
    creation_time   : 2016-10-19 00:54:36
  Duration: 00:00:42.99, start: 0.000000, bitrate: 3178 kb/s
    Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 640x4
80, 3076 kb/s, 30.04 fps, 30 tbr, 90k tbn, 180k tbc (default)
    Metadata:
      rotate          : 90
      creation_time   : 2016-10-19 00:54:36
      handler_name    : VideoHandle
    Side data:
      displaymatrix: rotation of -90.00 degrees
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, flt
p, 122 kb/s (default)
    Metadata:
      creation_time   : 2016-10-19 00:54:36
      handler_name    : SoundHandle
At least one output file must be specified

D:\ffmpeg\bin>

在C++中执行此操作,解析返回结果,可以得到视频码率等信息。

CString CoverProccessMp4(CString cmd)
{
    SECURITY_ATTRIBUTES sa;
    HANDLE hRead,hWrite;
    
    sa.nLength = sizeof(SECURITY_ATTRIBUTES);    
    sa.lpSecurityDescriptor = NULL;        //使用系统默认的安全描述符    
    sa.bInheritHandle = TRUE;              //创建的进程继承句柄
    
    if (!CreatePipe(&hRead,&hWrite,&sa,0)) //创建匿名管道
    {            
        return 0;
    }
    
    STARTUPINFO si;    
    PROCESS_INFORMATION pi;
    
    ZeroMemory(&si,sizeof(STARTUPINFO));
    si.cb = sizeof(STARTUPINFO);    
    GetStartupInfo(&si);    
    si.hStdError = hWrite;    
    si.hStdOutput = hWrite;    //新创建进程的标准输出连在写管道一端
    si.wShowWindow = SW_HIDE;  //隐藏窗口    
    si.dwFlags =STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
    
    
    wchar_t cmdline[1000];
    CString tmp;
    
    tmp.Format(L"cmd /C %s",cmd);
    wsprintf(cmdline,L"%s",tmp);
    
    if (!CreateProcess(NULL,cmdline,NULL,NULL,TRUE,NULL,NULL,L"D:\\ffmpeg\\bin",&si,&pi)) //创建子进程
    {      
        return 0;
    }

    DWORD pid = pi.dwProcessId;
     //关闭管道句柄
    char buffer[4096] = {0};
    DWORD bytesRead;
    CString output=L"";
    CloseHandle(pi.hThread);
    CloseHandle(pi.hProcess);
    CloseHandle(hWrite);
    while (true)
    {
        if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL) //读取管道
            break;

        CString temp;
        temp = buffer;
        output += temp;
    }
    CloseHandle(hRead);
    return output;
}

CString PattInfo(CString info)
{
    ////{}必须要加,否则 mcRule.m_uNumGroups将会为0
    CString strRegex=L"Duration: {(.*?)}, start: {(.*?)}, bitrate: {(\\d*?)} kb\\/s";
    CAtlRegExpreRule;
    wchar_t *wt = (wchar_t *)(LPCTSTR)strRegex;
    REParseError status = reRule.Parse((const ATL::CAtlRegExp::RECHAR *)wt);
    if (REPARSE_ERROR_OK != status)
    {
        return 0;
    }
    CAtlREMatchContextmcRule;
    wt = (wchar_t *)(LPCTSTR)info;
    if (!reRule.Match((const ATL::CAtlRegExp::RECHAR *)wt,&mcRule))
    {
        return 0;
    }
    else
    {
        for (UINT nGroupIndex = 0; nGroupIndex < mcRule.m_uNumGroups; ++nGroupIndex)
        {
            const CAtlREMatchContext<>::RECHAR* szStart = 0;
            const CAtlREMatchContext<>::RECHAR* szEnd = 0;
            mcRule.GetMatch(nGroupIndex, &szStart, &szEnd);
            ptrdiff_t nLength = szEnd - szStart;
            CString str(szStart,  static_cast(nLength));
            if(nGroupIndex==2)
            {
                return str;
            }
        }
    }
    return 0;
}

调用:

CString cmd=L"";
cmd.Format(L"%s -i %s",L"D:\\ffmpeg\\bin\\ffmpeg",视频文件);
CString pattInfo=CoverProccessMp4(cmd);
CString result=PattInfo(pattInfo);


注意:本文归作者所有,未经作者允许,不得转载