当前位置: 首页 > article >正文

C++ 起始帧数、结束帧数、剪辑视频

C++ 指定起始帧数、结束帧数、
剪辑视频

C++ 无法直接用H264,只能用avi编码格式

#include <iostream>
#include <opencv2/opencv.hpp>

int main() {
    // 读取视频:创建了一个VideoCapture对象,参数为摄像头编号
    std::string path = "E:/zyk_lab/pai/";
    std::string mp4_name = "04010003569000000.mp4";
    std::string inputVideoPath = path + mp4_name;

    std::string outputVideoPath = path + "img/" + "ce.avi";

    cv::VideoCapture inputVideo(inputVideoPath);
    if (!inputVideo.isOpened()) {
        std::cerr << "Error opening input video." << std::endl;
        return -1;
    }

    cv::Size frameSize(static_cast<int>(inputVideo.get(cv::CAP_PROP_FRAME_WIDTH)),
        static_cast<int>(inputVideo.get(cv::CAP_PROP_FRAME_HEIGHT)));

    double fps = inputVideo.get(cv::CAP_PROP_FPS);

    cv::VideoWriter outputVideo(outputVideoPath, cv::VideoWriter::fourcc('M', 'J', 'P', 'G'), fps, frameSize);

    int currentFrame = 0;

    cv::Mat frame;

    double startFrame = ((60 * 48) + 22) * fps;  // 开始帧
    double endFrame = ((60 * 48) + 55) * fps;    // 结束帧
    
    while (inputVideo.read(frame)) {

        if (currentFrame >= (int)startFrame && currentFrame <= (int)endFrame) {
            outputVideo.write(frame);
        }
        currentFrame++;
        std::cout << std::to_string(currentFrame) << std::endl;

        if (currentFrame > (int)endFrame) {
            break;
        }
    }

    inputVideo.release();
    outputVideo.release();

    std::cout << "结束" << std::endl;
    
    return 0;
}



http://www.kler.cn/news/310191.html

相关文章:

  • 【PHP】使用thinkphp5查询最大值时,把varchar类型字段转换成数字
  • jQuery css() 方法
  • 【已解决】【Windows】【Linux】大数据开发环境配置
  • python 实现chudnovsky algorithm楚德诺夫斯基算法
  • 【数据结构】数据结构系列学习笔记——导航篇
  • 数据结构之基数排序简介与举例
  • 大众点评代发排名骗局
  • ZW3D二次开发_UI_非模板表单_设置表单显示位置
  • docker创建rabbitmq容器
  • Django 5 学习笔记 2024版
  • 深入理解指针(四)
  • Spring Boot 常用注解
  • MYSQL常用基本操作总结
  • 新的 MathWorks 硬件支持包支持从 MATLAB 和 Simulink 模型到高通 Hexagon 神经处理单元架构的自动化代码生成
  • 关系数据库设计之Armstrong公理详解
  • 网络运维面试题
  • 反射机制是什么?
  • 57页PPT | 智慧文旅整体建设解决方案
  • [Linux]进程控制详解
  • 【LeetCode】2332. 坐上公交的最晚时间
  • AI驱动TDSQL-C Serverless 数据库技术实战营-ai学生选课系统数据分析
  • 基于Java+SpringMVC+vue+element宠物管理系统设计实现
  • Python安装虚拟环境Conda
  • Nacos未授权访问
  • 情感计算领域可以投稿的期刊与会议
  • C++ | Leetcode C++题解之第415题字符串相加
  • .NET 框架版本年表
  • ChatGPT对话训练数据采集渠道有哪些
  • JavaScript 的 DOM 技术
  • 如何划分 PostgreSQL 数据库权限