-
Notifications
You must be signed in to change notification settings - Fork 2
/
test_video_codec.py
89 lines (78 loc) · 2.79 KB
/
test_video_codec.py
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
80
81
82
83
84
85
86
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
(c) L3i - Univ. La Rochelle
joseph.chazalon (at) univ-lr (dot) fr
SmartDoc 2017 Sample Method
This is a simple test program which plays a given video in a window if
OpenCV has the support for reading such file. It fails otherwise.
"""
# ==============================================================================
# Imports
import argparse
import os
import os.path
import sys
import cv2
# ==============================================================================
# Constants
PROG_VERSION = "1.0"
PROG_NAME = "SD17-codec-test"
PROG_DESCRIPTION = "SmartDoc 2017 Sample Method - codec test for video input"
EXITCODE_OK = 0
EXITCODE_KBDBREAK = 10
EXITCODE_IOERROR = 20
EXITCODE_UNKERR = 254
DBGLINELEN = 80
DBGSEP = "-"*DBGLINELEN
# ==============================================================================
# ==============================================================================
class Application(object):
'''Main application class.'''
def main(self):
'''Public main function.'''
# Parse args
parser = argparse.ArgumentParser(
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
description=PROG_DESCRIPTION,
version=PROG_VERSION)
parser.add_argument('video',
help='Path to `input.mp4` file.')
args = parser.parse_args()
# Print info
print "Test codec for file '%s'" % args.video
try:
win_video = "Video"
cv2.namedWindow(win_video, cv2.WINDOW_NORMAL)
print "Starting display, press <q> to quit."
videocap = cv2.VideoCapture(args.video)
status, current_frame = videocap.read()
frame_count = 1
# Display loop
while status:
print "Got frame %03d" % frame_count
cv2.imshow(win_video, current_frame)
key_code = cv2.waitKey(40)
if key_code & 0xff == ord('q'):
raise KeyboardInterrupt()
status, current_frame = videocap.read()
frame_count += 1
print "End of stream reached at frame %03d" % frame_count
print "Processing complete."
return EXITCODE_OK
except KeyboardInterrupt:
print "Process interrupted by user."
return EXITCODE_KBDBREAK
except IOError as e:
print "Problem in reading or writing file."
print e
return EXITCODE_IOERROR
except e:
print "Unknown error."
print e
return EXITCODE_UNKERR
# ==============================================================================
if __name__ == "__main__":
res = Application().main()
if res is not None:
sys.exit(res)