2017-11-28 18 views
-2

배경비주얼 스튜디오 C++ 프로젝트

내가 OpenCV의에 주로 따라 특정 기능에 대한 비디오 분석 비주얼 스튜디오 C++ 프로젝트 "VideoAnalyser"가에서 cmd를 줄이 .exe를 실행합니다.

이제이 프로젝트를 비디오 파일의 큰 디렉토리에 대해 실행하고 싶습니다. 내가 가진 문제는 프로젝트 내에서 OPENCV 기능을 활용하기 위해 먼저 .avi 파일 형식으로 변환해야한다는 것입니다. FFMPEG로이 작업을 수행 할 수 있습니다. 그것은 큰 디렉토리이고 나는 형식이 변경된 모든 비디오 파일의 복사본을 만들고 싶지 않습니다. 오히려 비디오 파일을 가져 와서 변환 한 다음 다시 포맷 한 파일을 파괴 한 다음 "비디오 분석기"를 실행 한 다음 다음 비디오 파일로 이동하고 반복합니다. 나는 내 질문에

... 그러나 내가 리드 내 "비디오 분석기"프로젝트에이를 통합하는 방법을 확실 해요, 문제없이 명령 행에서 독립적으로 FFMPEG를 실행할 수 있습니다

어떻게 할 내 "VideoAnalyser"C++ 프로젝트에서 cmd 라인을 통해 FFMPEG exectuable을 실행 하시겠습니까?

+0

사용'system()'?? – user0042

+0

@ user0042 임 매우 새로운, 그래서 이런 기능을 인식하지 못합니다. 나는 그것을 조사 할 것이다, 제안을 위해 감사해라! – Pop24

답변

0

Windows OS를 가정 할 때 cmd이라는 태그가 지정되었습니다. 다른 프로세스를 시작할 수도 있습니다. 그래서, 명령 줄을 제공 :

int StartProcess(const std::wstring &executableName, bool wait, bool showConsole) 
{ 
    std::wstring executableName_local(executableName); 

    DWORD rtv = 0; 
    STARTUPINFOW sti; 
    PROCESS_INFORMATION pi; 
    ZeroMemory(&sti, sizeof(STARTUPINFOW)); 
    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION)); 
    BOOL ok = CreateProcess(NULL, (LPWSTR) executableName_local.c_str(), NULL, NULL, FALSE, showConsole ? CREATE_NEW_CONSOLE : CREATE_NO_WINDOW, NULL, NULL, &sti, &pi); 

    if (ok == FALSE) 
     return -1; 

    if (wait) 
    { 
     WaitForSingleObject(pi.hProcess, INFINITE); 
     GetExitCodeProcess(pi.hProcess, &rtv); 
     if (rtv) 
      return -1; 
    } 
    return (int)rtv; 
} 

(안 테스트 : 내 코드에서 붙여 넣기 복사 /)

0

가장 간단한 방법은는 popen C와 시스템을 찾아이다.

+0

'popen'은 C가 아니고 POSIX입니다. Msvc에는 대신 _popen이 있습니다. – MSalters

+0

동의하지만, popen에 대한 검색에서 _popen에 대한 문서를 읽으면 OP가 행복해 질 것으로 기대합니다. 아마도 시스템은 어쨌든 그들이 원하는 전화이지만 선택은 거기에 있습니다. –