我的节目是
int main(){
cout << "Start the process" << endl;
cv::VideoCapture vcap("rtsp://root:pass@192.168.0.90/axis-media/media.amp?camera=1");
cout << "Camera connection done!" << endl;
cv::Mat image, small;
//Output video
cv::Size S = cv::Size((int) vcap.get(CV_CAP_PROP_FRAME_WIDTH), (int) vcap.get(CV_CAP_PROP_FRAME_HEIGHT));
int ex = static_cast<int>(vcap.get(CV_CAP_PROP_FOURCC));
int fps = vcap.get(CV_CAP_PROP_FPS);
cout << "fps " << fps << " ex " << ex << endl;
cv::VideoWriter outputVideo;
outputVideo.open("TEST.avi", ex/*CV_FOURCC('X', '2', '6', '4')*/, vcap.get(CV_CAP_PROP_FPS), S, true);
if(!outputVideo.isOpened()){
cout << "Could not open the output video for write" << endl;
return -1;
}
for(;;){
if(!vcap.read(image)){
std::cout << "No frame" << std::endl;
cv::waitKey(0);
}
cv::resize(image, small, image.size()/2, 0, 0 , cv::INTER_LINEAR);
cv::imshow("Display", small);
cv::waitKey(1);
outputVideo.write(small);
if(getkey() == '\n')
break;
}
cout << "Camera release" << endl;
outputVideo.release();
vcap.release();
image.release();
small.release();
return 0;
}
int ex = static_cast<int>(vcap.get(CV_CAP_PROP_FOURCC));
ex在这里为0。
我可以录制TEST.avi,但cv :: VideoCapture vcap(“TEST.avi”)无法读取;或VLC播放器或Ubuntu中的视频。
错误是"Could not demultiplex stream"
。
如果我改为
outputVideo.open("TEST.avi", CV_FOURCC('X', '2', '6', '4'), vcap.get(CV_CAP_PROP_FPS), S, true);
outputVideo.open("TEST.avi", CV_FOURCC('P','I','M','1'), vcap.get(CV_CAP_PROP_FPS), S, true);
outputVideo.open("TEST.avi", CV_FOURCC('M', 'P', '4', '2'), vcap.get(CV_CAP_PROP_FPS), S, true);
etc.
都有同样的问题。
如果我设置
outputVideo.open("TEST.avi", CV_FOURCC('i', 'Y', 'U', 'V'), vcap.get(CV_CAP_PROP_FPS), S, true);
我的错误为Opencv: FFMPEG iYUV is not supported with codec id 14
有关
outputVideo.open("TEST.avi", CV_FOURCC('M', 'J', 'P', 'G'), vcap.get(CV_CAP_PROP_FPS), S, true);
OpenCV Error: Assertion failed (img.cols == width && img.rows == height && chann
els == 3) in write, file /home/Softwares/opencv/opencv/modules/videoio/src/
cap_mjpeg_encoder.cpp, line 829
terminate called after throwing an instance of 'cv::Exception'
what(): /home/Softwares/opencv/opencv/modules/videoio/src/cap_mjpeg_enco
der.cpp:829: error: (-215) img.cols == width && img.rows == height && channels =
= 3 in function write
可能有什么不对?这是我的FFMPEG有问题吗?
答案 0 :(得分:0)
获取尺寸。就我而言,我做到了。
`size = images[0].shape[:2]`
这在尝试播放记录时出现了错误。
`out = cv2.VideoWriter(record_path,fourcc, 15, size)`
我尝试过这一方法,并且有效。
`out = cv2.VideoWriter(record_path,fourcc, 15, (size[1],size[0]))`
答案 1 :(得分:0)
如果要从文件中读取视频并调整其大小,然后再使用cv2.imshow显示该帧。确保“向外”尺寸等于调整后尺寸的框架尺寸。