Попробуйте другой код fourcc
с * .mp4, который лучше в любом случае, и запустите, не показывая изображение.Убедитесь, что видео открыто и успешно выпущено.
void hwnd2mat(cv::Mat &mat)
{
int w = mat.cols;
int h = mat.rows;
auto hdc = GetDC(0);
auto memdc = CreateCompatibleDC(hdc);
auto hbitmap = CreateCompatibleBitmap(hdc, w, h);
auto holdbmp = SelectObject(memdc, hbitmap);
BitBlt(memdc, 0, 0, w, h, hdc, 0, 0, SRCCOPY);
BITMAPINFOHEADER bi = { sizeof(bi), w, -h, 1, 24 };
GetDIBits(hdc, hbitmap, 0, h, mat.data, (BITMAPINFO*)&bi, 0);
SelectObject(memdc, holdbmp);
DeleteDC(memdc);
DeleteObject(hbitmap);
ReleaseDC(0, hdc);
}
int main()
{
int w = GetSystemMetrics(SM_CXSCREEN);
int h = GetSystemMetrics(SM_CYSCREEN);
cv::Size size = cv::Size(w, h);
Mat frame(size, CV_8UC3);
double fps = 10.0;
//string filename = "d:\\outcpp.avi";
//auto fourcc = cv::VideoWriter::fourcc('M', 'J', 'P', 'G');
string filename = "d:\\outcpp.mp4";
auto fourcc = cv::VideoWriter::fourcc('m', 'p', '4', 'v');
VideoWriter video(filename, fourcc, fps, frame.size());
if(!video.isOpened())
{
cout << "codec failed\n";
return 0;
}
while(GetAsyncKeyState(VK_ESCAPE) == 0)
{
cout << ".";
hwnd2mat(frame);
video.write(frame);
Sleep(int(1000.0/fps));
}
video.release();
cout << "\nreleased\n";
return 0;
}