使用FFMPEG進行視頻截取與合併

   SHELLEXECUTEINFO ShExecInfo = {0};
   ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
   ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
   ShExecInfo.hwnd = NULL;
   ShExecInfo.lpVerb = _T("open");

   char pBuf[512];
   _getcwd(pBuf, 512);  ////獲取當前路徑
   string ffmpegPath = string(pBuf) +"/"+"ffmpeg";

   wchar_t lpFile[512];
   Acsii2WideByte(ffmpegPath.c_str(), lpFile);
   ShExecInfo.lpFile = lpFile;  ///默認爲當前目錄下

   string shExe_lpParameters = "";
   if(is_codec)
   {
       sprintf(pBuf, " -vframes %d -s %dx%d -r %d ", frames, width, height, fps);
       shExe_lpParameters = "-y -i " + input_video +" -ss " + start_time + pBuf +"-vcodec flv1 " + out_video;
   }
   else
   {
       sprintf(pBuf, " -vframes %d -r %d ", frames, fps);
       shExe_lpParameters = "-y -i " + input_video +" -ss " + start_time + pBuf +"-vcodec copy " + out_video;
   }
   wchar_t lpParam[512];
   Acsii2WideByte(shExe_lpParameters.c_str(), lpParam);
   ShExecInfo.lpParameters = lpParam;

   ShExecInfo.lpDirectory = NULL;
   ShExecInfo.nShow = SW_HIDE;
   ShExecInfo.hInstApp = NULL;
   BOOL bResult = ShellExecuteEx(&ShExecInfo);

   WaitForSingleObject(ShExecInfo.hProcess, INFINITE);

   if( ShExecInfo.hProcess != NULL)
   {
       TerminateProcess(ShExecInfo.hProcess,0);
       CloseHandle(ShExecInfo.hProcess);
       ShExecInfo.hProcess = NULL;
   }

   ShExecInfo.lpFile = NULL;


SHELLEXECUTEINFO ShExecInfo = {0};
    ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
    ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
    ShExecInfo.hwnd = NULL;
    ShExecInfo.lpVerb = _T("open");
    char pBuf[512];
    _getcwd(pBuf, 512);
    string memcoderPath = string(pBuf) +"/"+"mencoder.exe";
    wchar_t lpFile[512];
    Acsii2WideByte(memcoderPath.c_str(), lpFile);
    ShExecInfo.lpFile = lpFile;  ///默認爲當前目錄下

    string shExe_lpParameters = videoname1 + " " + videoname2 + " -ovc copy -o " + mergeVideoPath;
    wchar_t lpParam[512];
    Acsii2WideByte(shExe_lpParameters.c_str(), lpParam);
    ShExecInfo.lpParameters = lpParam;

    ShExecInfo.lpDirectory = NULL;
    ShExecInfo.nShow = SW_HIDE;
    ShExecInfo.hInstApp = NULL;
    ShellExecuteEx(&ShExecInfo);

    WaitForSingleObject(ShExecInfo.hProcess, INFINITE);

    if( ShExecInfo.hProcess != NULL)
    {
        TerminateProcess(ShExecInfo.hProcess,0);
        CloseHandle(ShExecInfo.hProcess);
        ShExecInfo.hProcess = NULL;
    }
    ShExecInfo.lpFile = NULL;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章