Page 1 of 1

使用pkmpi例程修改为录制视频保存本地后,什么方法可以在画面加入时间戳

Posted: 2024-06-06 9:50
by 牛腩焖薯仔
// 获取当前时间
time_t now = time(0);
struct tm tstruct;
char timebuf[80];
tstruct = *localtime(&now);
strftime(timebuf, sizeof(timebuf), "%Y-%m-%d %H:%M:%S", &tstruct);

// 在帧上添加时间戳
cv::putText(frame, timebuf, cv::Point(10, 30), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(0, 255, 0), 2);

尝试了这种方法但前五秒又时间戳 后面好像被画面覆盖了

Re: 使用pkmpi例程修改为录制视频保存本地后,什么方法可以在画面加入时间戳

Posted: 2024-06-06 10:09
by Crocodile
牛腩焖薯仔 wrote: 2024-06-06 9:50 // 获取当前时间
time_t now = time(0);
struct tm tstruct;
char timebuf[80];
tstruct = *localtime(&now);
strftime(timebuf, sizeof(timebuf), "%Y-%m-%d %H:%M:%S", &tstruct);

// 在帧上添加时间戳
cv::putText(frame, timebuf, cv::Point(10, 30), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(0, 255, 0), 2);

尝试了这种方法但前五秒又时间戳 后面好像被画面覆盖了
您好,根据您提供的代码片段来看您似乎是打算使用opencv图像处理的方式来添加时间戳,这种方式会导致无论什么情况下每一帧都需要被Opencv图像处理才能在视频流中显示时间,而进行视频保存时一般都需要进行编码,有关键帧和参考帧,如果只是在关键帧上进行图像处理就可能出现您遇到的情况,其它参考帧没有被Opencv作用到。由于没有完整的代码上下文,我无法确定您处理的frame的来源,如果frame能锁定为I帧的话或许可以解决问题。

当然,添加时间戳比较常见的方案还是添加OSD的方式来实现,您可以在RKMPI的VPSS或VENC组件上添加,OSD单独进行渲染大大节省了芯片的资源,与视频流分开也能避免相互影响。