Clean up exception handling

This commit is contained in:
Nick Mowen 2023-06-17 08:47:13 -06:00
parent 4f78e877cc
commit 0f3bc345e2

View File

@ -1148,14 +1148,18 @@ def to_relative_box(
def get_video_properties(url, get_duration=False):
def calculate_duration(video: Optional[any]) -> float:
duration = None
if video is not None:
# Get the frames per second (fps) of the video stream
fps = video.get(cv2.CAP_PROP_FPS)
total_frames = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
if fps and total_frames:
duration = total_frames / fps
else:
# if cv2 failed need to use ffprobe
if duration is None:
ffprobe_cmd = [
"ffprobe",
"-v",
@ -1167,6 +1171,7 @@ def get_video_properties(url, get_duration=False):
f"{url}",
]
p = sp.run(ffprobe_cmd, capture_output=True)
if p.returncode == 0 and p.stdout.decode():
duration = float(p.stdout.decode().strip())
else:
@ -1182,14 +1187,16 @@ def get_video_properties(url, get_duration=False):
# Check if the video stream was opened successfully
if not video.isOpened():
logger.debug(f"Error opening video stream {url}.")
raise Exception()
video = None
except Exception:
video = None
result = {}
if get_duration:
return {"duration": calculate_duration({})}
return {}
result["duration"] = calculate_duration(video)
if video is not None:
# Get the width of frames in the video stream
width = video.get(cv2.CAP_PROP_FRAME_WIDTH)
@ -1201,7 +1208,4 @@ def get_video_properties(url, get_duration=False):
result = {"width": round(width), "height": round(height)}
if get_duration:
result["duration"] = calculate_duration(video)
return result