@ -32,6 +32,7 @@ class EmbeddedSubtitle(Subtitle):
super ( ) . __init__ ( stream . language , stream . disposition . hearing_impaired )
self . stream : FFprobeSubtitleStream = stream
self . container : FFprobeVideoContainer = container
self . forced = stream . disposition . forced
self . _matches : set = matches
self . page_link = self . container . path
self . release_info = os . path . basename ( self . page_link )
@ -55,17 +56,21 @@ class EmbeddedSubtitlesProvider(Provider):
Language . fromalpha2 ( l ) for l in language_converters [ " alpha2 " ] . codes
}
languages . update ( set ( Language . rebuild ( lang , hi = True ) for lang in languages ) )
# TODO: add forced support
# languages.update(set(Language.rebuild(lang, forced=True) for lang in languages))
languages . update ( set ( Language . rebuild ( lang , forced = True ) for lang in languages ) )
video_types = ( Episode , Movie )
subtitle_class = EmbeddedSubtitle
def __init__ (
self , include_ass = True , cache_dir = None , ffprobe_path = None , ffmpeg_path = None
self ,
include_ass = True ,
include_srt = True ,
cache_dir = None ,
ffprobe_path = None ,
ffmpeg_path = None ,
) :
self . _include_ass = include_ass
self . _include_srt = include_srt
self . _cache_dir = os . path . join (
cache_dir or tempfile . gettempdir ( ) , self . __class__ . __name__ . lower ( )
)
@ -91,7 +96,7 @@ class EmbeddedSubtitlesProvider(Provider):
video = FFprobeVideoContainer ( path )
try :
streams = video . get_subtitles ( )
streams = filter ( _check_allowed_extensions , video . get_subtitles ( ) )
except fese . InvalidSource as error :
logger . error ( " Error trying to get subtitles for %s : %s " , video , error )
streams = [ ]
@ -99,23 +104,33 @@ class EmbeddedSubtitlesProvider(Provider):
if not streams :
logger . debug ( " No subtitles found for container: %s " , video )
only_forced = all ( lang . forced for lang in languages )
also_forced = any ( lang . forced for lang in languages )
subtitles = [ ]
for stream in streams :
# Only subrip and ass are currently supported
if stream . codec_name not in ( " subrip " , " ass " ) :
logger . debug ( " Ignoring codec: %s " , stream )
if not self . _include_ass and stream . extension == " ass " :
logger . debug ( " Ignoring ASS: %s " , stream )
continue
if not self . _include_ ass and stream . codec_name == " ass " :
logger . debug ( " Ignoring ASS subtitle : %s " , stream )
if not self . _include_ srt and stream . extension == " srt " :
logger . debug ( " Ignoring SRT : %s " , stream )
continue
if stream . language not in languages :
continue
disposition = stream . disposition
if disposition . generic or disposition . hearing_impaired :
if only_forced and not disposition . forced :
continue
if (
disposition . generic
or disposition . hearing_impaired
or ( disposition . forced and also_forced )
) :
logger . debug ( " Appending subtitle: %s " , stream )
subtitles . append ( EmbeddedSubtitle ( stream , video , { " hash " } ) )
else :