zoukankan      html  css  js  c++  java
  • python实现视频录制功能

    需要安装的第三方库有pillow、opencv-python、numpy、pynput

    以下为实现代码:

    import time,threading
    from datetime import datetime
    from PIL import ImageGrab
    import cv2
    import numpy as np
    from pynput import keyboard
    def video_record():   # 录入视频
      global name
      name = datetime.now().strftime('%Y-%m-%d %H-%M-%S') # 当前的时间(当文件名)
      screen = ImageGrab.grab() # 获取当前屏幕
      width, high = screen.size # 获取当前屏幕的大小
      fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D') # MPEG-4编码,文件后缀可为.avi .asf .mov等
      video = cv2.VideoWriter('%s.avi' % name, fourcc, 15, (width, high)) # (文件名,编码器,帧率,视频宽高)
      #print('3秒后开始录制----')  # 可选
      #time.sleep(3)
      print('开始录制!')
      global start_time
      start_time = time.time()
      while True:
        if flag:
          print("录制结束!")
          global final_time
          final_time = time.time()
          video.release() #释放
          break
        im = ImageGrab.grab()  # 图片为RGB模式
        imm = cv2.cvtColor(np.array(im),cv2.COLOR_RGB2BGR) # 转为opencv的BGR模式
        video.write(imm)  #写入
    def on_press(key):   # 监听按键
      global flag
      if key == keyboard.Key.home: #键盘上的Home键
        flag = True # 改变
        return False # 返回False,键盘监听结束!
    def video_info():   # 视频信息
      video = cv2.VideoCapture('%s.avi' % name)  # 记得文件名加格式不要错!
      fps = video.get(cv2.CAP_PROP_FPS)
      Count = video.get(cv2.CAP_PROP_FRAME_COUNT)
      size = (int(video.get(cv2.CAP_PROP_FRAME_WIDTH)), int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)))
      print('帧率=%.1f'%fps)
      print('帧数=%.1f'%Count)
      print('分辨率',size)
      print('视频时间=%.3f秒'%(int(Count)/fps))
      print('录制时间=%.3f秒'%(final_time-start_time))
      print('推荐帧率=%.2f'%(fps*((int(Count)/fps)/(final_time-start_time))))
    if __name__ == '__main__':
      flag = False
      th = threading.Thread(target=video_record)
      th.start()
      with keyboard.Listener(on_press=on_press) as listener:
        listener.join()
      time.sleep(1)  # 等待视频释放过后
      video_info()

    转载:https://www.jb51.net/article/181757.htm(经过优化)

  • 相关阅读:
    2018-2019-2 20189212 《网络攻防技术》第一周作业
    2017、5、4
    Pyinstaller 打包exe 报错 "failed to execute script XXX"的一种解决方案
    解决 Onenote 默认全角输入的一种解决办法(输入法已经设置为默认半角)
    OneDrive一直后台占用CPU的一种解决办法
    etimer
    简单三层BP神经网络学习算法的推导
    win10无法设置移动热点的一种解决办法
    如何恢复误删的OneNote页面
    安装mysql遇到的坑--->Can't connect to MySQL server on 'localhost' (10061)
  • 原文地址:https://www.cnblogs.com/Frank-guo/p/15211252.html
Copyright © 2011-2022 走看看