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

news/2024/9/21 21:53:54 标签: c++, 音视频, opencv

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.niftyadmin.cn/n/5669513.html

相关文章

论文阅读笔记:Sapiens: Foundation for Human Vision Models

Sapiens: Foundation for Human Vision Models 1 背景1.1 问题1.2 目标 2 方法3 创新点4 模块4.1 Humans-300M数据集4.2 预训练4.3 2D位姿估计4.4 身体部位分割4.5 深度估计4.6 表面法线估计 5 实验5.1 实现细节5.2 2D位姿估计5.3 身体部位分割5.4 深度估计5.5 表面法线估计5.6…

【RabbitMQ 项目】服务端:数据管理模块之绑定管理

文章目录 一.编写思路二.代码实践 一.编写思路 定义绑定信息类 交换机名称队列名称绑定关键字&#xff1a;交换机的路由交换算法中会用到 没有是否持久化的标志&#xff0c;因为绑定是否持久化取决于交换机和队列是否持久化&#xff0c;只有它们都持久化时绑定才需要持久化。绑…

详解 FFmpeg 中的 -map 选项

FFmpeg 是一个强大的多媒体处理工具&#xff0c;可以处理各种音视频转换、编辑任务。-map 选项是 FFmpeg 中非常重要且灵活的一个功能&#xff0c;它允许用户精确控制输入流如何映射到输出文件中。使用 -map&#xff0c;可以指定视频、音频或字幕等特定流进行处理&#xff0c;这…

go语言基础入门(一)

变量声明:批量声明变量:变量赋值: 声明变量同时为变量赋值可以在变量声明时为其赋值go中赋值时的编译器会自动根据等号右侧的数据类型自动推导变量的类型使用 : 进行赋值匿名变量 常量常量计数器iota1. 使用场景2. 基本用法3. 简化语法4. 自定义增量5. 复杂使用go的类似枚举 使…

opencv滤波算法总结

opencv平滑算法总结 1、高斯滤波 有大佬已经写的很好了&#xff0c;直接引用&#xff0c;备忘 链接: 高斯滤波 按照正态分布概率&#xff0c;将卷积核内灰度值加权求出最终的灰度值 2、中值滤波 最终取值为卷积核的中值 3、均值滤波 最终取值为卷积核的均值 4、双边滤波…

Hadoop的安装和使用

1. Hadoop简介 Hadoop是一个能够对大量数据进行分布式处理的软件框架&#xff0c;并且是以一种可靠、高效、可伸缩的方式进行处理的&#xff0c;它具有以下几个方面的特性。 高可靠性。高效性。高可扩展性。高容错性。成本低。运行在Linux平台上。支持多种编程语言。 2. 分布…

线性表一(vector)

#include<bits/stdc.h> using namespace std; vector<int> a(5,2);//定义一个初始长度为5&#xff0c;每个元素值为2的可变数组 vector<char> b(3);//定义一个初始长度为3&#xff0c;每个元素为默认值的可变数组 vector<int> v;//定义一个长度为0的可…

python使用Pandas读取excel的行列内容

我的Excel文件名称是“测试.xlsx” 首先读取excle的文件内容 import pandas as pd dfpd.read_excel(测试.xlsx) #这个会直接默认读取到这个Excel的第一个sheet print(df)可以看看输出的是什么&#xff1a; 2. df.loc[0]&#xff0c;表示读取Excel的第一行&#xff08;这里…