编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

python 实现指定时间段录制视频(python脚本录制)

wxchong 2024-07-06 00:54:20 开源技术 11 ℃ 0 评论

python 实现指定时间段录制视频

  • 一、pyaudio:
    • 二、cv2:
      • 指定时间录制:


一、pyaudio:

windows下使用 python -m pip install pyaudio 安装
mac 下使用 HomeBrew安装: brew install portaudio, pip install pyaudio
linux 下使用 sudo apt-get install python-pyaudio python3-pyaudio
下面展示一些 代码片段。

class AudioRecorder():
    "Audio class based on pyAudio and Wave"
    def __init__(self, filename="temp_audio.wav", rate=44100, fpb=1024, channels=2):
        self.open = True
        self.rate = rate
        self.frames_per_buffer = fpb
        self.channels = channels
        self.format = pyaudio.paInt16
        self.audio_filename = filename
        self.audio = pyaudio.PyAudio()
        self.stream = self.audio.open(format=self.format,
                                      channels=self.channels,
                                      rate=self.rate,
                                      input=True,
                                      frames_per_buffer = self.frames_per_buffer)
        self.audio_frames = []

    def record(self):
        "Audio starts being recorded"
        self.stream.start_stream()
        while self.open:
            data = self.stream.read(self.frames_per_buffer) 
            self.audio_frames.append(data)
            if not self.open:
                break
12345678910111213141516171819202122232425
class AudioRecorder():
    "Audio class based on pyAudio and Wave"
    def __init__(self, filename="temp_audio.wav", rate=44100, fpb=1024, channels=2):
        self.open = True
        #采样率
        self.rate = rate
        #帧率
        self.frames_per_buffer = fpb
        #声道
        self.channels = channels
        #声音制式
        self.format = pyaudio.paInt16
        self.audio_filename = filename
        self.audio = pyaudio.PyAudio()
        self.stream = self.audio.open(format=self.format,
                                      channels=self.channels,
                                      rate=self.rate,
                                      input=True,
                                      frames_per_buffer = self.frames_per_buffer)
        self.audio_frames = []

    def record(self):
        "Audio starts being recorded"
        self.stream.start_stream()
        while self.open:
            data = self.stream.read(self.frames_per_buffer) 
            self.audio_frames.append(data)
            if not self.open:
                break
1234567891011121314151617181920212223242526272829

二、cv2:

windows下使用 python -m pip install opencv-python 安装
mac 下使用 pip install opencv-python
linux 下使用 pip install opencv-python

下面展示一些 代码。

class VideoRecorder():  
    "Video class based on openCV"#sizex=640, sizey=480, camindex=0, fps=30
    def __init__(self, name="temp_video.avi", fourcc="MJPG", sizex=640, sizey=480, camindex=0, fps=30):
        self.open = True
        self.device_index = camindex
        self.fps = fps                  # fps should be the minimum constant rate at which the camera can
        self.fourcc = fourcc            # capture images (with no decrease in speed over time; testing is required)
        self.frameSize = (sizex, sizey)                                # video formats and sizes also depend and vary according to the camera used
        self.video_filename = name
        self.video_cap = cv2.VideoCapture(self.device_index)
        self.video_writer = cv2.VideoWriter_fourcc(*self.fourcc)
        # self.frameSize = (int(self.video_cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(self.video_cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
        self.video_out = cv2.VideoWriter(self.video_filename, self.video_writer, self.fps, self.frameSize)
        self.frame_counts = 1
        self.start_time = time.time()

    def record(self):
        "Video starts being recorded" 
        # counter = 1
        timer_start = time.time()
        timer_current = 0
        while self.open:
            ret, video_frame = self.video_cap.read()
            if ret:
                self.video_out.write(video_frame)
                # print(str(counter) + " " + str(self.frame_counts) + " frames written " + str(timer_current))
                self.frame_counts += 1
                # counter += 1
                # timer_current = time.time() - timer_start
                time.sleep(1/self.fps)
                # gray = cv2.cvtColor(video_frame, cv2.COLOR_BGR2GRAY)
                # cv2.imshow('video_frame', gray)
                # cv2.waitKey(1)
            else:
                break
1234567891011121314151617181920212223242526272829303132333435
class VideoRecorder():  
    "Video class based on openCV"#sizex=640, sizey=480, camindex=0, fps=30
    def __init__(self, name="temp_video.avi", fourcc="MJPG", sizex=640, sizey=480, camindex=0, fps=30):
        self.open = True
        self.device_index = camindex
        self.fps = fps                  # fps should be the minimum constant rate at which the camera can
        self.fourcc = fourcc            # capture images (with no decrease in speed over time; testing is required)
        self.frameSize = (sizex, sizey)                                # video formats and sizes also depend and vary according to the camera used
        self.video_filename = name
        self.video_cap = cv2.VideoCapture(self.device_index)
        self.video_writer = cv2.VideoWriter_fourcc(*self.fourcc)
        # self.frameSize = (int(self.video_cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(self.video_cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
        self.video_out = cv2.VideoWriter(self.video_filename, self.video_writer, self.fps, self.frameSize)
        self.frame_counts = 1
        self.start_time = time.time()

    def record(self):
        "Video starts being recorded" 
        # counter = 1
        timer_start = time.time()
        timer_current = 0
        while self.open:
            ret, video_frame = self.video_cap.read()
            if ret:
                self.video_out.write(video_frame)
                # print(str(counter) + " " + str(self.frame_counts) + " frames written " + str(timer_current))
                self.frame_counts += 1
                # counter += 1
                # timer_current = time.time() - timer_start
                time.sleep(1/self.fps)
                # gray = cv2.cvtColor(video_frame, cv2.COLOR_BGR2GRAY)
                # cv2.imshow('video_frame', gray)
                # cv2.waitKey(1)
            else:
                break
1234567891011121314151617181920212223242526272829303132333435

指定时间录制:

下面展示一些 代码。

parser = argparse.ArgumentParser()
    parser.add_argument('--starttime', '-s', type=int, default='020000')
    parser.add_argument('--endtime', '-e', type=int, default='050000')
    args  = parser.parse_args()
    starttime = args.starttime
    endtime = args.endtime
    while time.strftime('%H%M%S', time.localtime(time.time()))!=str(starttime):
        if int(time.strftime('%H', time.localtime(time.time())))<=int(str(starttime)[:2]):
            data_definit = int(str(starttime)[:2])*3600+int(str(starttime)[2:4])*60+int(str(starttime)[4:6])
            data_current = int(time.strftime('%H', time.localtime(time.time())))*3600+int(time.strftime('%M', time.localtime(time.time())))*60+\
                int(time.strftime('%S', time.localtime(time.time())))
            print('距离启动录像还有{}秒'.format(data_definit-data_current))
            time.sleep(1)
        else:
            data_definit = int(str(starttime)[:2])*3600+int(str(starttime)[2:4])*60+int(str(starttime)[4:6])+24*3600
            data_current = int(time.strftime('%H', time.localtime(time.time())))*3600+int(time.strftime('%M', time.localtime(time.time())))*60+\
                int(time.strftime('%S', time.localtime(time.time())))
            print('距离启动录像还有{}秒'.format(data_definit-data_current))
            time.sleep(1)

    start_AVrecording()
    while time.strftime('%H%M%S', time.localtime(time.time()))!=str(endtime):
        if int(time.strftime('%H', time.localtime(time.time())))<= int(str(endtime)[:2]):
            data_definit = int(str(endtime)[:2])*3600+int(str(endtime)[2:4])*60+int(str(endtime)[4:6])
            data_current = int(time.strftime('%H', time.localtime(time.time())))*3600+int(time.strftime('%M', time.localtime(time.time())))*60+\
                int(time.strftime('%S', time.localtime(time.time())))
            print('距离结束录像还有{}秒'.format(data_definit-data_current))
            time.sleep(1)
        else:
            data_definit = int(str(endtime)[:2])*3600+int(str(endtime)[2:4])*60+int(str(endtime)[4:6])+24*3600
            data_current = int(time.strftime('%H', time.localtime(time.time())))*3600+int(time.strftime('%M', time.localtime(time.time())))*60+\
                int(time.strftime('%S', time.localtime(time.time())))
            print('距离结束录像还有{}秒'.format(data_definit-data_current))
            time.sleep(1)
    stop_AVrecording()
    file_manager()

12345678910111213141516171819202122232425262728293031323334353637
parser = argparse.ArgumentParser()
    parser.add_argument('--starttime', '-s', type=int, default='020000')
    parser.add_argument('--endtime', '-e', type=int, default='050000')
    args  = parser.parse_args()
    starttime = args.starttime
    endtime = args.endtime
    while time.strftime('%H%M%S', time.localtime(time.time()))!=str(starttime):
        if int(time.strftime('%H', time.localtime(time.time())))<=int(str(starttime)[:2]):
            data_definit = int(str(starttime)[:2])*3600+int(str(starttime)[2:4])*60+int(str(starttime)[4:6])
            data_current = int(time.strftime('%H', time.localtime(time.time())))*3600+int(time.strftime('%M', time.localtime(time.time())))*60+\
                int(time.strftime('%S', time.localtime(time.time())))
            print('距离启动录像还有{}秒'.format(data_definit-data_current))
            time.sleep(1)
        else:
            data_definit = int(str(starttime)[:2])*3600+int(str(starttime)[2:4])*60+int(str(starttime)[4:6])+24*3600
            data_current = int(time.strftime('%H', time.localtime(time.time())))*3600+int(time.strftime('%M', time.localtime(time.time())))*60+\
                int(time.strftime('%S', time.localtime(time.time())))
            print('距离启动录像还有{}秒'.format(data_definit-data_current))
            time.sleep(1)

    start_AVrecording()
    while time.strftime('%H%M%S', time.localtime(time.time()))!=str(endtime):
        if int(time.strftime('%H', time.localtime(time.time())))<= int(str(endtime)[:2]):
            data_definit = int(str(endtime)[:2])*3600+int(str(endtime)[2:4])*60+int(str(endtime)[4:6])
            data_current = int(time.strftime('%H', time.localtime(time.time())))*3600+int(time.strftime('%M', time.localtime(time.time())))*60+\
                int(time.strftime('%S', time.localtime(time.time())))
            print('距离结束录像还有{}秒'.format(data_definit-data_current))
            time.sleep(1)
        else:
            data_definit = int(str(endtime)[:2])*3600+int(str(endtime)[2:4])*60+int(str(endtime)[4:6])+24*3600
            data_current = int(time.strftime('%H', time.localtime(time.time())))*3600+int(time.strftime('%M', time.localtime(time.time())))*60+\
                int(time.strftime('%S', time.localtime(time.time())))
            print('距离结束录像还有{}秒'.format(data_definit-data_current))
            time.sleep(1)
    stop_AVrecording()
    file_manager()

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表