Don't fail when cv2 fails

This commit is contained in:
Nick Mowen 2023-06-16 12:24:49 -06:00
parent b66810247e
commit 4f78e877cc

View File

@ -1147,27 +1147,7 @@ def to_relative_box(
def get_video_properties(url, get_duration=False): def get_video_properties(url, get_duration=False):
width = height = 0 def calculate_duration(video: Optional[any]) -> float:
# Open the video stream
video = cv2.VideoCapture(url)
# Check if the video stream was opened successfully
if not video.isOpened():
logger.debug(f"Error opening video stream {url}.")
return None
# Get the width of frames in the video stream
width = video.get(cv2.CAP_PROP_FRAME_WIDTH)
# Get the height of frames in the video stream
height = video.get(cv2.CAP_PROP_FRAME_HEIGHT)
# Release the video stream
video.release()
result = {"width": round(width), "height": round(height)}
if get_duration:
# Get the frames per second (fps) of the video stream # Get the frames per second (fps) of the video stream
fps = video.get(cv2.CAP_PROP_FPS) fps = video.get(cv2.CAP_PROP_FPS)
total_frames = int(video.get(cv2.CAP_PROP_FRAME_COUNT)) total_frames = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
@ -1192,6 +1172,36 @@ def get_video_properties(url, get_duration=False):
else: else:
duration = -1 duration = -1
result["duration"] = duration return duration
width = height = 0
try:
# Open the video stream
video = cv2.VideoCapture(url)
# Check if the video stream was opened successfully
if not video.isOpened():
logger.debug(f"Error opening video stream {url}.")
raise Exception()
except Exception:
if get_duration:
return {"duration": calculate_duration({})}
return {}
# Get the width of frames in the video stream
width = video.get(cv2.CAP_PROP_FRAME_WIDTH)
# Get the height of frames in the video stream
height = video.get(cv2.CAP_PROP_FRAME_HEIGHT)
# Release the video stream
video.release()
result = {"width": round(width), "height": round(height)}
if get_duration:
result["duration"] = calculate_duration(video)
return result return result