diff --git a/config/config.example.yml b/config/config.example.yml index b9786e700..162df2f74 100644 --- a/config/config.example.yml +++ b/config/config.example.yml @@ -81,6 +81,12 @@ cameras: # hwaccel_args: [] # input_args: [] # output_args: [] + + ################ + ## Optionally specify the resolution of the video feed. Frigate will try to auto detect if not specified + ################ + # height: 1280 + # width: 720 ################ ## Optional mask. Must be the same dimensions as your video feed. diff --git a/frigate/video.py b/frigate/video.py index 28d91680e..1fc8d2e3f 100644 --- a/frigate/video.py +++ b/frigate/video.py @@ -62,7 +62,15 @@ def get_frame_shape(source): video_info = [s for s in info['streams'] if s['codec_type'] == 'video'][0] - return (video_info['height'], video_info['width'], 3) + if video_info['height'] != 0 and video_info['width'] != 0: + return (video_info['height'], video_info['width'], 3) + + # fallback to using opencv if ffprobe didnt succeed + video = cv2.VideoCapture(source) + ret, frame = video.read() + frame_shape = frame.shape + video.release() + return frame_shape def get_ffmpeg_input(ffmpeg_input): frigate_vars = {k: v for k, v in os.environ.items() if k.startswith('FRIGATE_')} @@ -170,7 +178,10 @@ class Camera: 'show_timestamp': self.config.get('snapshots', {}).get('show_timestamp', True) } self.regions = self.config['regions'] - self.frame_shape = get_frame_shape(self.ffmpeg_input) + if 'width' in self.config and 'height' in self.config: + self.frame_shape = (self.config['height'], self.config['width'], 3) + else: + self.frame_shape = get_frame_shape(self.ffmpeg_input) self.frame_size = self.frame_shape[0] * self.frame_shape[1] * self.frame_shape[2] self.mqtt_client = mqtt_client self.mqtt_topic_prefix = '{}/{}'.format(mqtt_prefix, self.name)