使用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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用FFmpeg可以非常方便地进行视频截取。可以通过指定参数来实现不同的截图格式,如将-vcodec参数指定为mjpeg或者使用-f参数指定为mjpeg可以输出jpg截图,指定-vcodec参数为png或者指定输出文件扩展名为png可以输出png截图。要指定截取视频的具体时间,可以使用-ss参数来实现。比如,如果要截取视频的第5秒,可以通过-ss参数来指定。 此外,还有一种方法是使用OpenCV来截取视频,该方法在精确性方面被认为是非常高的,但是无法捕捉视频的音频。可以使用FFmpeg截取音频,然后将音频和视频合并在一起。 具体的关于FFmpeg截取视频的详细教程可以参考以下链接:http://www.kindcent.com/blog/view/ffmpeg-mjpeg <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [使用ffmpeg可以生成视频截图](https://blog.csdn.net/xiaochawan/article/details/8804789)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [使用FFmpeg实现精确剪切视频](https://blog.csdn.net/yunxiaobaobei/article/details/106529585)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值