wangzhibo
2022-03-24 a01eb79d5bd40decaaa4693534de77efdf330bb8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# -*- coding: utf-8 -*-
 
# 命令
__author__ = '上海色宁'
 
import datetime
import cv2
import getopt
import sys
from _image_clip_setting import image_clip
 
 
def start_check_opts(argv):
    filemame = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")+".mp4"
 
    length_seconds = ""
 
    try:
        """
            options, args = getopt.getopt(args, shortopts, longopts=[])
            参数args:一般是sys.argv[1:]。过滤掉sys.argv[0],它是执行脚本的名字,不算做命令行参数。
            参数shortopts:短格式分析串。例如:"hp:i:",h后面没有冒号,表示后面不带参数;p和i后面带有冒号,表示后面带参数。
            参数longopts:长格式分析串列表。例如:["help", "ip=", "port="],help后面没有等号,表示后面不带参数;ip和port后面带冒号,表示后面带参数。
            返回值options是以元组为元素的列表,每个元组的形式为:(选项串, 附加参数),如:('-i', '192.168.0.1')
            返回值args是个列表,其中的元素是那些不含'-'或'--'的参数。
        """
        opts, args = getopt.getopt(
            argv, "ho:l:", ["help", "output_video_name=", "length_seconds="])
    except getopt.GetoptError:
        print('Error: 0_get_video.py -o <output_video_name> -l <length_seconds>')
        print('   or: 0_get_video.py --output_video_name=<video.mp4> --length_seconds=30')
        sys.exit(2)
 
    # 处理 返回值options是以元组为元素的列表。
    if len(opts) <= 0:
        print('Error: Parameters not enough!')
        print('Error: 0_get_video.py -o <output_video_name> -l <length_seconds>')
        print('   or: 0_get_video.py --output_video_name=<video.mp4> --length_seconds=30')
        sys.exit()
    for opt, arg in opts:
        if opt in ("-h", "--h", "-help", "--help"):
            print('Error: 0_get_video.py -o <output_video_name> -l <length_seconds>')
            print(
                '   or: 0_get_video.py --output_video_name=<video.mp4> --length_seconds=30')
            sys.exit()
        elif opt in ("-o", "--output_video_name"):
            filemame = arg
        elif opt in ("-l", "--length_seconds"):
            length_seconds = arg
 
    if (not length_seconds.isdigit()):
        print(length_seconds + " is  not valid digit !!!")
        sys.exit()
 
    start_save_mp4(filemame, int(length_seconds))
 
 
def start_save_mp4(filename, length_seconds):
    print('ready to save '+str(length_seconds)+' seconds mp4 into file '+filename)
    cap = cv2.VideoCapture(0)
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
    mp4_fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') 
 
    mp4_fps=25
    mp4_size=(640, 480)
    vout=cv2.VideoWriter()
    vout.open(filename, mp4_fourcc, mp4_fps, mp4_size)
    cnt=0
    while cnt < mp4_fps * length_seconds:
        ret, frame=cap.read()
        vout.write(frame)
        cnt += 1
    vout.release()
    cap.release()
 
# 程序入口
if __name__ == '__main__':
    start_check_opts(sys.argv[1:])