mirror of
https://github.com/tubearchivist/tubearchivist.git
synced 2024-12-21 17:30:13 +00:00
pass whole video object into YoutubeSubtitle class
This commit is contained in:
parent
4e2d0fa464
commit
4e4cfe3334
@ -18,16 +18,13 @@ from ryd_client import ryd_client
|
|||||||
class YoutubeSubtitle:
|
class YoutubeSubtitle:
|
||||||
"""handle video subtitle functionality"""
|
"""handle video subtitle functionality"""
|
||||||
|
|
||||||
def __init__(self, config, youtube_meta, media_url, youtube_id):
|
def __init__(self, video):
|
||||||
self.config = config
|
self.video = video
|
||||||
self.youtube_meta = youtube_meta
|
|
||||||
self.media_url = media_url
|
|
||||||
self.youtube_id = youtube_id
|
|
||||||
self.languages = False
|
self.languages = False
|
||||||
|
|
||||||
def sub_conf_parse(self):
|
def sub_conf_parse(self):
|
||||||
"""add additional conf values to self"""
|
"""add additional conf values to self"""
|
||||||
languages_raw = self.config["downloads"]["subtitle"]
|
languages_raw = self.video.config["downloads"]["subtitle"]
|
||||||
self.languages = [i.strip() for i in languages_raw.split(",")]
|
self.languages = [i.strip() for i in languages_raw.split(",")]
|
||||||
|
|
||||||
def get_subtitles(self):
|
def get_subtitles(self):
|
||||||
@ -41,7 +38,7 @@ class YoutubeSubtitle:
|
|||||||
if relevant_subtitles:
|
if relevant_subtitles:
|
||||||
return relevant_subtitles
|
return relevant_subtitles
|
||||||
|
|
||||||
if self.config["downloads"]["subtitle_source"] == "auto":
|
if self.video.config["downloads"]["subtitle_source"] == "auto":
|
||||||
relevant_auto = self.get_auto_caption()
|
relevant_auto = self.get_auto_caption()
|
||||||
return relevant_auto
|
return relevant_auto
|
||||||
|
|
||||||
@ -49,8 +46,8 @@ class YoutubeSubtitle:
|
|||||||
|
|
||||||
def get_auto_caption(self):
|
def get_auto_caption(self):
|
||||||
"""get auto_caption subtitles"""
|
"""get auto_caption subtitles"""
|
||||||
print(f"{self.youtube_id}: get auto generated subtitles")
|
print(f"{self.video.youtube_id}: get auto generated subtitles")
|
||||||
all_subtitles = self.youtube_meta.get("automatic_captions")
|
all_subtitles = self.video.youtube_meta.get("automatic_captions")
|
||||||
|
|
||||||
if not all_subtitles:
|
if not all_subtitles:
|
||||||
return False
|
return False
|
||||||
@ -58,7 +55,8 @@ class YoutubeSubtitle:
|
|||||||
relevant_subtitles = []
|
relevant_subtitles = []
|
||||||
|
|
||||||
for lang in self.languages:
|
for lang in self.languages:
|
||||||
media_url = self.media_url.replace(".mp4", f"-{lang}.vtt")
|
video_media_url = self.video.json_data["media_url"]
|
||||||
|
media_url = video_media_url.replace(".mp4", f"-{lang}.vtt")
|
||||||
all_formats = all_subtitles.get(lang)
|
all_formats = all_subtitles.get(lang)
|
||||||
subtitle = [i for i in all_formats if i["ext"] == "vtt"][0]
|
subtitle = [i for i in all_formats if i["ext"] == "vtt"][0]
|
||||||
subtitle.update(
|
subtitle.update(
|
||||||
@ -71,7 +69,7 @@ class YoutubeSubtitle:
|
|||||||
|
|
||||||
def _normalize_lang(self):
|
def _normalize_lang(self):
|
||||||
"""normalize country specific language keys"""
|
"""normalize country specific language keys"""
|
||||||
all_subtitles = self.youtube_meta.get("subtitles")
|
all_subtitles = self.video.youtube_meta.get("subtitles")
|
||||||
if not all_subtitles:
|
if not all_subtitles:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@ -87,7 +85,7 @@ class YoutubeSubtitle:
|
|||||||
|
|
||||||
def get_user_subtitles(self):
|
def get_user_subtitles(self):
|
||||||
"""get subtitles uploaded from channel owner"""
|
"""get subtitles uploaded from channel owner"""
|
||||||
print(f"{self.youtube_id}: get user uploaded subtitles")
|
print(f"{self.video.youtube_id}: get user uploaded subtitles")
|
||||||
all_subtitles = self._normalize_lang()
|
all_subtitles = self._normalize_lang()
|
||||||
if not all_subtitles:
|
if not all_subtitles:
|
||||||
return False
|
return False
|
||||||
@ -95,7 +93,8 @@ class YoutubeSubtitle:
|
|||||||
relevant_subtitles = []
|
relevant_subtitles = []
|
||||||
|
|
||||||
for lang in self.languages:
|
for lang in self.languages:
|
||||||
media_url = self.media_url.replace(".mp4", f"-{lang}.vtt")
|
video_media_url = self.video.json_data["media_url"]
|
||||||
|
media_url = video_media_url.replace(".mp4", f"-{lang}.vtt")
|
||||||
all_formats = all_subtitles.get(lang)
|
all_formats = all_subtitles.get(lang)
|
||||||
subtitle = [i for i in all_formats if i["ext"] == "vtt"][0]
|
subtitle = [i for i in all_formats if i["ext"] == "vtt"][0]
|
||||||
subtitle.update(
|
subtitle.update(
|
||||||
@ -108,10 +107,9 @@ class YoutubeSubtitle:
|
|||||||
|
|
||||||
def download_subtitles(self, relevant_subtitles):
|
def download_subtitles(self, relevant_subtitles):
|
||||||
"""download subtitle files to archive"""
|
"""download subtitle files to archive"""
|
||||||
|
videos_base = self.video.config["application"]["videos"]
|
||||||
for subtitle in relevant_subtitles:
|
for subtitle in relevant_subtitles:
|
||||||
dest_path = os.path.join(
|
dest_path = os.path.join(videos_base, subtitle["media_url"])
|
||||||
self.config["application"]["videos"], subtitle["media_url"]
|
|
||||||
)
|
|
||||||
response = requests.get(subtitle["url"])
|
response = requests.get(subtitle["url"])
|
||||||
if subtitle["source"] == "auto":
|
if subtitle["source"] == "auto":
|
||||||
parser = SubtitleParser(response.text)
|
parser = SubtitleParser(response.text)
|
||||||
@ -125,7 +123,7 @@ class YoutubeSubtitle:
|
|||||||
with open(dest_path, "w", encoding="utf-8") as subfile:
|
with open(dest_path, "w", encoding="utf-8") as subfile:
|
||||||
subfile.write(subtitle_str_clean)
|
subfile.write(subtitle_str_clean)
|
||||||
else:
|
else:
|
||||||
print(f"{self.youtube_id}: failed to download subtitle")
|
print(f"{self.video.youtube_id}: failed to download subtitle")
|
||||||
|
|
||||||
|
|
||||||
class SubtitleParser:
|
class SubtitleParser:
|
||||||
@ -375,12 +373,7 @@ class YoutubeVideo(YouTubeItem, YoutubeSubtitle):
|
|||||||
|
|
||||||
def _check_subtitles(self):
|
def _check_subtitles(self):
|
||||||
"""optionally add subtitles"""
|
"""optionally add subtitles"""
|
||||||
handler = YoutubeSubtitle(
|
handler = YoutubeSubtitle(self)
|
||||||
self.config,
|
|
||||||
self.youtube_meta,
|
|
||||||
media_url=self.json_data["media_url"],
|
|
||||||
youtube_id=self.youtube_id,
|
|
||||||
)
|
|
||||||
subtitles = handler.get_subtitles()
|
subtitles = handler.get_subtitles()
|
||||||
if subtitles:
|
if subtitles:
|
||||||
self.json_data["subtitles"] = subtitles
|
self.json_data["subtitles"] = subtitles
|
||||||
|
Loading…
Reference in New Issue
Block a user