|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 伏惜寒 于 2019-10-2 13:22 编辑
代码可以正常运行,但是导出的视频文件无法播放
求告知是代码问题,还是其他问题,最好有解决方法
这是一个模拟录屏软件的程序,通过电脑截图然后合成成视频文件导出
- import cv2, os
- import time
- import win32gui, win32ui, win32con, win32api
- def window_capture(filename):
- hwnd = 0 # 窗口的编号,0号表示当前活跃窗口
- # 根据窗口句柄获取窗口的设备上下文DC(Divice Context)
- hwndDC = win32gui.GetWindowDC(hwnd)
- # 根据窗口的DC获取mfcDC
- mfcDC = win32ui.CreateDCFromHandle(hwndDC)
- # mfcDC创建可兼容的DC
- saveDC = mfcDC.CreateCompatibleDC()
- # 创建bigmap准备保存图片
- saveBitMap = win32ui.CreateBitmap()
- # 获取监控器信息
- MoniterDev = win32api.EnumDisplayMonitors(None, None)
- w = MoniterDev[0][2][2]
- h = MoniterDev[0][2][3]
- #print(w,h) #图片大小
- # 为bitmap开辟空间
- saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)
- # 高度saveDC,将截图保存到saveBitmap中
- saveDC.SelectObject(saveBitMap)
- # 截取从左上角(0,0)长宽为(w,h)的图片
- saveDC.BitBlt((0, 0), (w, h), mfcDC, (0, 0), win32con.SRCCOPY)
- saveBitMap.SaveBitmapFile(saveDC, filename)
- win32gui.DeleteObject(saveBitMap.GetHandle())
- saveDC.DeleteDC()
- mfcDC.DeleteDC()
- win32gui.ReleaseDC(hwnd, hwndDC)
- a = input("输入1开始录制:")
- if a == "1":
- os.chdir("image")
- name = 0
- running = True
- # 10帧,0.03秒一次截图,录制2秒
- while running:
- name += 1
- photo_name = str(name) + ".jng"
- window_capture(photo_name)
- time.sleep(0.03)
- if name == 20:
- running = False
- size = (1366,768) #图片的分辨率片
- # 图片合成视频
- def picvideo(path,size):
- path = r'C:\Users\猫娘赛高\Desktop\录屏程序\image\\'#文件路径
- filelist = os.listdir(path) #获取该目录下的所有文件名
- fps = 10
- file_path = r"C:\Users\猫娘赛高\Desktop\录屏程序\video\" + str(int(time.time())) + ".mp4"#导出路径
- fourcc = cv2.VideoWriter_fourcc('D', 'I', 'V', 'X')#不同视频编码对应不同视频格式(例:'I','4','2','0' 对应avi格式)
- video = cv2.VideoWriter( file_path, fourcc, fps, size )
- for item in filelist:
- if item.endswith('.png'):
- #判断图片后缀是否是.png
- item = path + '/' + item
- img = cv2.imread(item)
- #使用opencv读取图像,直接返回numpy.ndarray 对象,通道顺序为BGR ,注意是BGR,通道值默认范围0-255。
- video.write(img)
- #把图片写进视频
- video.release() #释放
- picvideo(r"C:\Users\猫娘赛高\Desktop\录屏程序\video", size)
复制代码 |
-
|