当前位置:   article > 正文

opencv c++ 视频处理与保存(23)_opencv 保存mp4文件

opencv 保存mp4文件

视频清晰度划分:

SD:标清

HD:高清

1、获取视频大小和帧数

    VideoCapture capture(videopath);

    //获取视频的宽高
    int frame_width = capture.get(CAP_PROP_FRAME_WIDTH);
    int frame_height = capture.get(CAP_PROP_FRAME_HEIGHT);
    //获取视频帧数
    int count = capture.get(CAP_PROP_FRAME_COUNT);//总帧数
    double fps = capture.get(CAP_PROP_FPS);//每秒帧数

官网:OpenCV: cv::VideoWriter Class Reference 

 2、保存视频

VideoWriter writer(filename, fourcc, fps, frameSize, isColor);

filename // string 文件名,一般包含路径

fourcc // int 压缩帧的模式(编解码),如果有输入来源视频,可以使用VideoCapture来获取,如:capture.get(CAP_PROP_FOURCC)

fps //double 视频帧率

framesize //Size 储存大小

isColor //bool 是否保存为彩色

使用示例:

先在循环层外定义:

VideoWriter writer("E:\\video_package\\savevideo.mp4", capture.get(CAP_PROP_FOURCC), fps, Size(frame_width, frame_height), true);

 在循环内逐个waitKey保存:

writer.write(frame);//frame为每个waitKey获取的视频Mat

最后在合适位置释放:

writer.release();

完整代码: 

  1. void QuickDemo::video_demo(Mat& image)
  2. {
  3. VideoCapture capture(videopath);
  4. //获取视频的宽高
  5. int frame_width = capture.get(CAP_PROP_FRAME_WIDTH);
  6. int frame_height = capture.get(CAP_PROP_FRAME_HEIGHT);
  7. //获取视频帧数
  8. int count = capture.get(CAP_PROP_FRAME_COUNT);//总帧数
  9. double fps = capture.get(CAP_PROP_FPS);//每秒帧数
  10. cout << "frame_width:" << frame_width << endl;
  11. cout << "frame_height:" << frame_height << endl;
  12. cout << "count:" << count << endl;
  13. cout << "fps:" << fps << endl;
  14. VideoWriter writer("E:\\video_package\\savevideo.mp4", capture.get(CAP_PROP_FOURCC), fps, Size(frame_width, frame_height), true);
  15. Mat frame;
  16. while (true) {
  17. int c = waitKey(fps);
  18. if (c == 27) {//退出
  19. break;
  20. }
  21. else if(frame.empty()){
  22. break;
  23. }
  24. capture.read(frame);
  25. writer.write(frame);
  26. int h = frame.rows;
  27. int w = frame.cols;
  28. resize(frame, frame, Size(w / 2, h / 2), 0, 0, INTER_LINEAR);
  29. // TODO,框图等操作,颜色变换
  30. imshow("frame", frame);
  31. }
  32. //完成后需要释放空间
  33. capture.release();
  34. writer.release();
  35. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/484830
推荐阅读
相关标签
  

闽ICP备14008679号