视频保存(直接转换另存不播放)
#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
// 读取输入视频
cv::VideoCapture inputVideo("1.avi");
if (!inputVideo.isOpened()) {
std::cerr << "无法打开输入视频文件" << std::endl;
return -1;
}
// 获取视频帧的宽度、高度和帧率
int frameWidth = static_cast<int>(inputVideo.get(cv::CAP_PROP_FRAME_WIDTH));
int frameHeight = static_cast<int>(inputVideo.get(cv::CAP_PROP_FRAME_HEIGHT));
double fps = inputVideo.get(cv::CAP_PROP_FPS);
// 定义视频编码器和输出视频文件
cv::VideoWriter outputVideo("2.avi", cv::VideoWriter::fourcc('M', 'J', 'P', 'G'), fps, cv::Size(frameWidth, frameHeight));
if (!outputVideo.isOpened()) {
std::cerr << "无法打开输出视频文件" << std::endl;
return -1;
}
cv::Mat frame;
while (true) {
// 读取视频帧
inputVideo >> frame;
if (frame.empty()) {
break; // 视频结束
}
// 写入视频帧到输出文件
outputVideo.write(frame);
}
std::cout << "视频处理完成" << std::endl;
return 0;
}
播放并另存
#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
// 读取输入视频
cv::VideoCapture inputVideo("1.avi");
if (!inputVideo.isOpened()) {
std::cerr << "无法打开输入视频文件" << std::endl;
return -1;
}
// 获取视频帧的宽度、高度和帧率
int frameWidth = static_cast<int>(inputVideo.get(cv::CAP_PROP_FRAME_WIDTH));
int frameHeight = static_cast<int>(inputVideo.get(cv::CAP_PROP_FRAME_HEIGHT));
double fps = inputVideo.get(cv::CAP_PROP_FPS);
// 定义视频编码器和输出视频文件
cv::VideoWriter outputVideo("2.avi", cv::VideoWriter::fourcc('M', 'J', 'P', 'G'), fps, cv::Size(frameWidth, frameHeight));
if (!outputVideo.isOpened()) {
std::cerr << "无法打开输出视频文件" << std::endl;
return -1;
}
cv::Mat frame;
while (true) {
// 读取视频帧
inputVideo >> frame;
if (frame.empty()) {
break; // 视频结束
}
// 显示视频帧
cv::imshow("Video Playback", frame);
// 写入视频帧到输出文件
outputVideo.write(frame);
// 按键响应,按 'q' 键退出
if (cv::waitKey(30) == 'q') {
break;
}
}
std::cout << "视频处理完成" << std::endl;
return 0;
}