大华.dav视频格式转avi的一种办法 您所在的位置:网站首页 大华摄像头用什么浏览器最好 大华.dav视频格式转avi的一种办法

大华.dav视频格式转avi的一种办法

2024-07-03 11:30| 来源: 网络整理| 查看: 265

最新更新:格式工厂也可以。。。。

在网上寻找转换工具未果,所幸自己写一个,这个办法不是最好的但比较快捷。

1 首先使用大华SDK获取视频的帧率和每一帧的大小,这在后面转换的时候要用。

2 其次参照大华sdk手册,播放dav视频,在解码回调函数中保存每一帧图片。

3 最后使用python的VideoWriter类将图片写入avi视频

 

dav视频转jpg代码:

//在mfc中的测试代码 LONG nPort = -1; void CALLBACK DecCBFun(LONG nPort, char * pBuf, LONG nSize, FRAME_INFO * pFrameInfo, void* pUserData, LONG nReserved2) { CtestDahuaDlg *pCTestDahuaDlg = (CtestDahuaDlg*)pUserData; if(pFrameInfo->nType == 3) //视频数据 { Mat yuvImg; yuvImg.create(pFrameInfo->nHeight*3/2, pFrameInfo->nWidth, CV_8UC1); memcpy(yuvImg.data, pBuf, nSize*sizeof(unsigned char)); cv::cvtColor(yuvImg, pCTestDahuaDlg->m_mtFrame, CV_YUV2RGB_YV12); //static int iIndex = 0; char str[128] = {0}; sprintf_s(str, "frame_%d.jpg", PLAY_GetCurrentFrameNum(nPort)); OutputDebugStringA(str); OutputDebugStringA("\n"); CString path ; path.Format("%s\\%s", pCTestDahuaDlg->m_dir, str); OutputDebugStringA(path.GetBuffer()); cv::imwrite(path.GetBuffer(), pCTestDahuaDlg->m_mtFrame); } else if(pFrameInfo->nType == T_AUDIO16) { } else { } return; } void CtestDahuaDlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 //打开待播放的文件 BOOL bFlag = FALSE; //获取播放库端口号 bFlag = PLAY_GetFreePort(&nPort); CString fileName = "2_2019-03-24_09_40_28"; CString playerName = fileName + ".dav"; bFlag = PLAY_OpenFile(nPort, playerName.GetBuffer()); if(bFlag == FALSE) { char str[128]={0}; sprintf_s(str, "Open file failed %d", PLAY_GetLastErrorEx()); OutputDebugStringA(str); return; } CString str = ".\\" + fileName; CreateDirectory(str, NULL); m_dir = str; PLAY_SetDecCallBackEx(nPort, DecCBFun, (void*)this); int iFrames = PLAY_GetFileTotalFrames(nPort); //开始播放文件 PLAY_Play(nPort, this->m_hWnd); //播放声音 //PLAY_PlaySound(nPort); //Sleep(PLAY_GetFileTime(nPort)* 1000); Sleep(12000000); //停止播放 PLAY_Stop(nPort); //停止播放声音 PLAY_StopSound(); //关闭文件 PLAY_CloseFile(nPort); CDialogEx::OnOK(); }

jpg图片转avi格式代码:  

import os import cv2 import numpy as np path = './2_2019-03-22_11_36_31/' filelist = os.listdir(path) filelist.sort(key = lambda x:int(x[6:-4]))#自定义对图片名称中的数字部分进行排序 fps = 25 #视频每秒25帧 size = (1920, 1080) #需要转为视频的图片的尺寸 #可以使用cv2.resize()进行修改 video = cv2.VideoWriter("2_2019-03-22_11_36_31.avi", cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), fps, size) #视频保存在当前目录下 for item in filelist: if item.endswith('.jpg'): #找到路径中所有后缀名为.png的文件,可以更换为.jpg或其它 item = path + item print(item) img = cv2.imread(item) video.write(img) video.release() cv2.destroyAllWindows()

大华SDK播放文件流程:



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有