From 92be39bebac885ff695030756c8e52389569c951 Mon Sep 17 00:00:00 2001 From: morpheus65535 Date: Sun, 15 Jan 2023 09:26:22 -0500 Subject: [PATCH] Fixed analysis of corrupted video file that may wrongly throttle providers. #2034 --- bazarr/subtitles/refiners/ffprobe.py | 2 +- bazarr/subtitles/tools/embedded_subs_reader.py | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/bazarr/subtitles/refiners/ffprobe.py b/bazarr/subtitles/refiners/ffprobe.py index 9e080ae51..c1c69072e 100644 --- a/bazarr/subtitles/refiners/ffprobe.py +++ b/bazarr/subtitles/refiners/ffprobe.py @@ -32,7 +32,7 @@ def refine_from_ffprobe(path, video): data = parse_video_metadata(file=path, file_size=file_id['file_size'], episode_file_id=file_id['episode_file_id']) - if 'ffprobe' not in data and 'mediainfo' not in data: + if not data or ('ffprobe' not in data and 'mediainfo' not in data): logging.debug("No cache available for this file: {}".format(path)) return video diff --git a/bazarr/subtitles/tools/embedded_subs_reader.py b/bazarr/subtitles/tools/embedded_subs_reader.py index b4153ead1..238370d03 100644 --- a/bazarr/subtitles/tools/embedded_subs_reader.py +++ b/bazarr/subtitles/tools/embedded_subs_reader.py @@ -3,7 +3,7 @@ import logging import pickle -from knowit.api import know +from knowit.api import know, KnowitException from languages.custom_lang import CustomLanguage from app.database import TableEpisodes, TableMovies @@ -26,6 +26,10 @@ def embedded_subs_reader(file, file_size, episode_file_id=None, movie_file_id=No data = parse_video_metadata(file, file_size, episode_file_id, movie_file_id, use_cache=use_cache) subtitles_list = [] + + if not data: + return subtitles_list + if data["ffprobe"] and "subtitle" in data["ffprobe"]: for detected_language in data["ffprobe"]["subtitle"]: if "language" not in detected_language: @@ -121,10 +125,18 @@ def parse_video_metadata(file, file_size, episode_file_id=None, movie_file_id=No # if we have ffprobe available if ffprobe_path: - data["ffprobe"] = know(video_path=file, context={"provider": "ffmpeg", "ffmpeg": ffprobe_path}) + try: + data["ffprobe"] = know(video_path=file, context={"provider": "ffmpeg", "ffmpeg": ffprobe_path}) + except KnowitException as e: + logging.error(f"BAZARR ffprobe cannot analyze this video file {file}. Could it be corrupted? {e}") + return None # or if we have mediainfo available elif mediainfo_path: - data["mediainfo"] = know(video_path=file, context={"provider": "mediainfo", "mediainfo": mediainfo_path}) + try: + data["mediainfo"] = know(video_path=file, context={"provider": "mediainfo", "mediainfo": mediainfo_path}) + except KnowitException as e: + logging.error(f"BAZARR mediainfo cannot analyze this video file {file}. Could it be corrupted? {e}") + return None # else, we warn user of missing binary else: logging.error("BAZARR require ffmpeg/ffprobe or mediainfo, please install it and make sure to choose it in "