bazarr/bazarr/embedded_subs_reader.py

59 lines
2.5 KiB
Python
Raw Normal View History

# coding=utf-8
import enzyme
2019-10-20 12:03:55 +00:00
from enzyme.exceptions import MalformedMKVError
import logging
import os
2020-03-18 19:33:54 +00:00
from knowit import api
class EmbeddedSubsReader:
def __init__(self):
2020-07-19 20:02:38 +00:00
self.ffprobe = None
def list_languages(self, file):
2020-07-19 20:02:38 +00:00
from utils import get_binary
self.ffprobe = get_binary("ffprobe")
2019-04-27 12:13:47 +00:00
subtitles_list = []
2020-09-23 13:59:03 +00:00
if self.ffprobe:
2020-03-18 19:33:54 +00:00
api.initialize({'provider': 'ffmpeg', 'ffmpeg': self.ffprobe})
data = api.know(file)
traditional_chinese = ["cht", "tc", "traditional", "zht", "hant", "big5", u"", u"雙語"]
2020-03-18 19:33:54 +00:00
if 'subtitle' in data:
for detected_language in data['subtitle']:
2020-03-22 13:23:06 +00:00
if 'language' in detected_language:
language = detected_language['language'].alpha3
if language == 'zho' and 'name' in detected_language:
if any (ext in (detected_language['name'].lower()) for ext in traditional_chinese):
language = 'zht'
2020-09-10 18:26:37 +00:00
forced = detected_language['forced'] if 'forced' in detected_language else False
hearing_impaired = detected_language['hearing_impaired'] if 'hearing_impaired' in \
detected_language else False
2020-03-22 13:23:06 +00:00
codec = detected_language['format'] if 'format' in detected_language else None
2020-09-10 18:26:37 +00:00
subtitles_list.append([language, forced, hearing_impaired, codec])
2020-03-18 19:33:54 +00:00
else:
continue
2019-04-27 12:13:47 +00:00
else:
if os.path.splitext(file)[1] == '.mkv':
with open(file, 'rb') as f:
2019-10-20 12:03:55 +00:00
try:
mkv = enzyme.MKV(f)
except MalformedMKVError:
logging.error('BAZARR cannot analyze this MKV with our built-in MKV parser, you should install ffmpeg: ' + file)
else:
for subtitle_track in mkv.subtitle_tracks:
2020-09-10 18:26:37 +00:00
hearing_impaired = False
if subtitle_track.name:
if 'sdh' in subtitle_track.name.lower():
hearing_impaired = True
subtitles_list.append([subtitle_track.language, subtitle_track.forced, hearing_impaired,
subtitle_track.codec_id])
2019-04-27 12:13:47 +00:00
return subtitles_list
embedded_subs_reader = EmbeddedSubsReader()