ZBLOG

qDebug()

在你提供的代码中,如果录制的视频文件不能打开,可能有几个原因。下面是一些常见问题以及相应的解决方法:

1. 文件路径问题

确保你指定的文件路径是有效的,并且程序有权限写入该路径。请注意以下几点:

  • 在 Windows 上,反斜杠 \ 是转义字符。如果你想在字符串中使用它,通常需要写成 \\。例如:

    oss << "D:\\QT code\\last\\vid\\video_" << times.toStdString() << ".mp4";
    
  • 确保目标目录 (D:\QT code\last\vid\) 已经存在。如果没有,你需要先创建这个目录。

2. 视频编码器支持

你正在使用 ‘XVID’ 编码器,这个编码器需要在你的系统上安装 Xvid 解码器。如果该编解码器不存在或未正确安装,则生成的视频可能无法打开。可以尝试其他编码格式,例如:

int codec = cv::VideoWriter::fourcc('M', 'J', 'P', 'G'); // 使用 MJPEG 编码

3. 检查 videoWriter.isOpened()

在调用 videoWriter.open() 后,应该检查其是否成功打开。在代码中加入如下检查:

if (!videoWriter.isOpened()) {
    qDebug() << "视频文件未能成功打开!";
    return;
}

这将帮助你确认是否是 VideoWriter 打开失败。

4. 确保获取到了帧数据

请确保你从摄像头捕获到帧数据并且 capture >> frame; 是成功的。在调用视频写入函数之前,可以添加一行检查,如下所示:

if (frame.empty()) {
    qDebug() << "捕获的帧为空!";
    return;
}

5. 正确设置视频参数

确保设置的视频参数(如宽度和高度)是有效的,并与捕获到的帧一致。

完整示例修改

结合上述建议,你可以修改相关部分如下:

// 获取当前时间作为视频文件名
QDateTime current = QDateTime::currentDateTime();
QString times = current.toString("yyyy-MM-dd HH mm ss");

std::ostringstream oss;
oss << "D:\\QT code\\last\\vid\\video_" << times.toStdString() << ".mp4";
recordViedo_fileName = oss.str();

cout <<"摄像头开启中,文件名:"<< recordViedo_fileName;

m_video_record=true;
cv::Mat frame;

// 捕获当前帧
capture >> frame; 

if (frame.empty()) {
    qDebug() << "捕获的帧为空!";
    return;
}

// 设置视频编码和帧率
int codec = cv::VideoWriter::fourcc('X', 'V', 'I', 'D');
double fps = 25.0;

int width = capture.get(cv::CAP_PROP_FRAME_WIDTH);
int height = capture.get(cv::CAP_PROP_FRAME_HEIGHT);

// 尝试打开 VideoWriter 
if (!videoWriter.open(recordViedo_fileName, codec, fps, cv::Size(width, height), true)) {
    qDebug() << "视频文件未能成功打开!";
    return;
}

connect(&timer_record, &QTimer::timeout, this, &MainWindow::updateFrame);

通过以上步骤,你应该能够找出导致录制后的视频文件无法打开的问题并进行修复。如果还有其他疑问,请随时告诉我!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=6536

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?