Embedded Subtitles provider: handle ASS errors

Fix #2168
pull/2131/head
Vitiko 1 year ago
parent a13d69ddb2
commit 1c1caeb78b

@ -14,7 +14,6 @@ from fese import FFprobeSubtitleStream
from fese import FFprobeVideoContainer from fese import FFprobeVideoContainer
from fese import tags from fese import tags
from fese.exceptions import InvalidSource from fese.exceptions import InvalidSource
from subliminal.subtitle import fix_line_ending
from subliminal_patch.core import Episode from subliminal_patch.core import Episode
from subliminal_patch.core import Movie from subliminal_patch.core import Movie
from subliminal_patch.providers import Provider from subliminal_patch.providers import Provider
@ -187,19 +186,18 @@ class EmbeddedSubtitlesProvider(Provider):
def download_subtitle(self, subtitle: EmbeddedSubtitle): def download_subtitle(self, subtitle: EmbeddedSubtitle):
path = self._get_subtitle_path(subtitle) path = self._get_subtitle_path(subtitle)
modifiers = _type_modifiers.get(subtitle.stream.codec_name) modifiers = _type_modifiers.get(subtitle.stream.codec_name) or set()
logger.debug( logger.debug("Found modifiers for %s type: %s", subtitle.stream, modifiers)
"Found modifiers for %s type: %s", subtitle.stream.codec_name, modifiers
)
if modifiers is not None: for mod in modifiers:
for mod in modifiers: logger.debug("Running %s modifier for %s", mod, path)
logger.debug("Running %s modifier for %s", mod, path) try:
mod(path, path) mod(path, path)
except Exception as error:
logger.debug("'%s' raised running modifier", error)
with open(path, "rb") as sub: with open(path, "rb") as sub:
content = sub.read() subtitle.content = sub.read()
subtitle.content = fix_line_ending(content)
def _get_subtitle_path(self, subtitle: EmbeddedSubtitle): def _get_subtitle_path(self, subtitle: EmbeddedSubtitle):
container = subtitle.container container = subtitle.container
@ -341,7 +339,7 @@ def _clean_ass_subtitles(path, output_path):
clean_lines = [] clean_lines = []
with open(path, "r") as f: with open(path, "r", encoding="utf-8", errors="ignore") as f:
lines = f.readlines() lines = f.readlines()
for line in lines: for line in lines:
if _SIGNS_LINE_RE.search(line) is None: if _SIGNS_LINE_RE.search(line) is None:

Loading…
Cancel
Save