ffmpeg命令行执行结束后如何回调(返回执行结果,成功或失败)?

在自己的程序代码里,调用ffmpeg命令行程序,想让它执行后返回执行结果,怎么办?

2019音视频研发技能详解视频教程 ffmpeg h264 rtmp C语言 直播
| 月销量11件
优惠价20元
原价¥25

淘口令:

¥gN5hXe3qcqm¥
 

ffmpeg命令行转码完成是否能实现回调

ffmpeg -i …. IF ERRORLEVEL 0 ECHO “转换成功” ELSE ECHO “转换失败” ========== 0为ffmpeg的返回码

因为要接收反馈结果,cmd命令可以这样写:

rtsp://user:password@ip:port -ss 00:00:01 -vframes 1 -f image2 -vcodec png image.png && echo succeeded ||echo failed

当ffmpeg执行正确时,会输出succeeded,当ffmpeg不能正确执行时,会输出failed。

C++ 执行ffmpeg命令行并获取执行后的输出结果

直接上源码:

void ChangedVideoSize()
{
    wstring szStartApp = L"ffmpeg -y -i c:\2.mp4 -s 1280*720 video2_1280x720.mp4";

    SECURITY_ATTRIBUTES sa;
    HANDLE hRead, hWrite;
    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
    sa.lpSecurityDescriptor = NULL;        //使用系统默认的安全描述符    
    sa.bInheritHandle = TRUE;              //创建的进程继承句柄
    if (!CreatePipe(&hRead, &hWrite, &sa, 0)) //创建匿名管道
    {
        ::MessageBoxA(NULL, "CreatePipe Failed!", "提示", MB_OK | MB_ICONWARNING);
        return;
    }
    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;
    if (!CreateProcess(NULL, (LPWSTR)szStartApp.c_str(), NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi)) //创建子进程
    {
        ::MessageBoxA(NULL, "CreateProcess Failed!", "提示", MB_OK | MB_ICONWARNING);
        return;
    }
    ::CloseHandle(pi.hProcess);
    ::CloseHandle(hWrite); //关闭管道句柄

    char buffer[4096] = { 0 };
    DWORD bytesRead;
    string temp;
    while (true)
    {
        if (ReadFile(hRead, buffer, 4095, &bytesRead, NULL) == NULL) //读取管道
            break;
        temp += buffer;
        temp += "\r\n";
    }
    CloseHandle(hRead);
    //得到的temp就是cmd命令行窗口中的数据了
}
© 版权声明
THE END
喜欢就支持一下吧,技术咨询可以联系QQ407933975
点赞0
分享
评论 抢沙发