在预定义的时间段内捕获视频时出错

Error while capturing video for a pre-defined time period

此程序会捕获视频,直到我按 Esc。但是我需要修改这个程序并捕获 30s 的视频。

录制视频后播放速度非常快,视频长度缩短。我试过在最后加waitKey,还是不行。录制后的视频长度应该是一样的。我怎样才能做到这一点?有什么建议吗?

int main( int argc, const char** argv )
{
    using namespace std;
    using namespace cv;
VideoCapture cap(0); 

    while(!(cap.isOpened() && cap.grab()))  
    {
cout << "Camera not ready" << endl;
    }
VideoWriter Writer("D:/MyVideo.avi", CV_FOURCC('P','I','M','1'),20,Size(640,480), true); 


    while (waitKey(30)!= 27)
            {
                Mat frame;
                cap >> frame; 
                Writer.write(frame); 
                imshow("D:/MyVideo", frame); 
            }

}
int64 t0 = cv::getTickCount();
while (waitKey(30)!= 27)
{
    Mat frame;
    cap >> frame; // read a new frame from video
    Writer.write(frame); //writer the frame into the file
    double t = (cv::getTickCount() - t0) / cv::getTickFrequency();
    if (t > 30)
        break;
    ...
    // now, we need to adjust to the desired framerate of 20fps, 
    // so we need to sleep for 1000/20 = 50 milliseconds
    // either have a window, and use waitKey():
    //   imshow("lalala", frame);
    //   waitKey(50);
    // or just sleep(), unfortunately system dependant ;(
    // win:
    //   Sleep(50);
    // linux, etc.:
    //   usleep(50);
}