用Opencv VideoWriter函数得到的视频没有总帧数,在播放时给进度条设置带来很大的麻烦

wlbc123456789 2018-01-25 03:26:53
int main()
{
Size videoSize=Size(640, 480);
string videoPath3="D:\\videoRecordMP42.avi";
int fourcc3=CV_FOURCC('M', 'P', '4', '2');
float fpsInput=24; // 帧率
float pauseInput=1000/fpsInput; // 帧间隔


VideoWriter videoOutput3(videoPath3,fourcc3,fpsInput,videoSize,true);

cv::Mat image;
while (1)
{
if(socketMat.receive(image) > 0)
{
videoOutput3<<image;
cv::imshow("",image);
char c = cv::waitKey(pauseInput);
if( c == 27 ) break;
}
}

socketMat.socketDisconnect();
return 0;
}
-----------------俺是分割线-------------------------------------------------------
以上是段网络视频传输的代码,其它一切正常,但视频完成后,avi文件没有总帧数(我用其它代码测试过,正常的AVI文件帧率和总帧数都会有,但用opencv生成的avi文件就是没有总帧数),在后续的播放代码中,以下函数
VideoCapture capture;
capture.open(vPath);
int aaa=(int)capture.get(CV_CAP_PROP_FRAME_COUNT);
取出的值,aaa为0,这样就没有办法设置滑动条的取值范围,当然,你可以说用while可以得到总帧数,我也是这样做的,
但问题是,在后续的ontime中无法获得视频文件当前的实时pos值,请问各位大神,有什么办法在生成avi文件时,设置它的总帧数呢?
...全文
1698 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wlbc123456789 2018-01-26
  • 打赏
  • 举报
回复
哈哈,谢谢赵老师,以前都是潜水向您学习,趁这机会说声谢谢...
赵4老师 2018-01-25
  • 打赏
  • 举报
回复
帮结帖+蹭分
wlbc123456789 2018-01-25
  • 打赏
  • 举报
回复
问题找到了,在VideoWriter 的第二个参数,视频格式上,我换成了CV_FOURCC('M', 'J', 'P', 'G') 格式就有了总帧数,因为以后可能的项目中只涉及到视频图像采集,没有对声音有要求,所以OPENCV很适合我的胃口。

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧