mirror of
https://github.com/zenyd/mpv-scripts.git
synced 2024-06-30 13:11:20 +02:00
non ascii characters seem to conflict with lua/mpv when writing the filename to stdout, which leads to failure in loading the subtitle. This fixes that.
108 lines
4.1 KiB
Python
108 lines
4.1 KiB
Python
from tkinter import *
|
|
from subliminal import *
|
|
from babelfish import Language
|
|
import sys, os
|
|
import tkinter.messagebox
|
|
|
|
class subselect :
|
|
|
|
def __init__(self) :
|
|
self.root = Tk()
|
|
frame = self.root
|
|
frame.title("Subtitle Downloader")
|
|
self.video_title_in = Entry(frame, width=100)
|
|
self.video_title_in.bind("<Return>", self.search_)
|
|
self.video_title_in.insert(0, videotitle)
|
|
self.video_title_in.grid(row=0, column=0)
|
|
self.video_title_in.focus()
|
|
self.search_button = Button(frame, text="Search", command=self.search)
|
|
self.search_button.grid(row=0, column=1)
|
|
self.best_button = Button(frame, text="Best", command=self.download_best_subtitle)
|
|
self.best_button.grid(row=0, column=2, sticky=E+W)
|
|
self.result_listbox = Listbox(self.root)
|
|
|
|
def show_subtitles(self, subtitles) :
|
|
self.result_listbox.delete(0, END)
|
|
self.subtitles_in_list = []
|
|
for s in subtitles :
|
|
if hasattr(s, "filename") :
|
|
self.result_listbox.insert(END, s.filename)
|
|
self.subtitles_in_list += [s]
|
|
self.result_listbox.grid(row=1, column=0, columnspan=3, sticky=E+W)
|
|
|
|
if not hasattr(self, "download_button") :
|
|
self.info_label = Label(self.root)
|
|
self.info_label.grid(row=2, column=0)
|
|
self.download_button = Button(self.root, text="Download", command=self.download_selected_subtitle)
|
|
self.download_button.grid(row=2, column=2)
|
|
self.info_label.configure(text="{} Subtitles".format(self.result_listbox.size()))
|
|
|
|
def get_video_from_title(self) :
|
|
video_title = self.video_title_in.get()
|
|
self.language = sub_language
|
|
if ";" in video_title :
|
|
video_title = video_title.split(";")
|
|
self.language = video_title[-1].strip()
|
|
video_title = video_title[0]
|
|
return Video.fromname(video_title)
|
|
|
|
def search_(self, *args):
|
|
self.search()
|
|
|
|
def search(self) :
|
|
try :
|
|
self.video = self.get_video_from_title()
|
|
subtitles = list_subtitles([self.video], {Language(self.language)}, providers=["opensubtitles"])
|
|
except ValueError as exc :
|
|
self.show_message("Error", str(exc))
|
|
else :
|
|
self.show_subtitles(subtitles[self.video])
|
|
|
|
def download_best_subtitle(self) :
|
|
try :
|
|
self.video = self.get_video_from_title()
|
|
best_subtitles = download_best_subtitles([self.video], {Language(self.language)})
|
|
except ValueError as exc :
|
|
self.show_message("Error", str(exc))
|
|
else :
|
|
if best_subtitles[self.video] != [] :
|
|
best_subtitle = best_subtitles[self.video][0]
|
|
self.save_subtitle(self.video, False, best_subtitle)
|
|
else :
|
|
self.show_message("Not found", "No subtitles found. Try a different name.")
|
|
|
|
def download_selected_subtitle(self) :
|
|
i = self.result_listbox.curselection()
|
|
if i == () :
|
|
self.show_message("Download failed", "Please select a subtitle")
|
|
else :
|
|
selected_subtitle = self.subtitles_in_list[i[0]]
|
|
download_subtitles([selected_subtitle])
|
|
self.save_subtitle(self.video, True, selected_subtitle)
|
|
|
|
def save_subtitle(self, video, change_filename, subtitle) :
|
|
if change_filename :
|
|
video.name = subtitle.filename
|
|
title = os.path.splitext(subtitle.filename)[0]+".srt"
|
|
else :
|
|
title = video.name + ".srt"
|
|
s = save_subtitles(video, [subtitle], True, save_dir)
|
|
if s != [] :
|
|
sys.stdout.buffer.write(title.encode("utf-8"))
|
|
self.root.destroy()
|
|
else :
|
|
self.show_message("Download failed", "Subtitle download failed!")
|
|
|
|
def show_message(self, title, msg) :
|
|
tkinter.messagebox.showinfo(title, msg)
|
|
|
|
videotitle = save_dir = ""
|
|
sub_language = "eng"
|
|
|
|
if len(sys.argv) > 1 :
|
|
videotitle = sys.argv[1]
|
|
save_dir = sys.argv[2]
|
|
sub_language = sys.argv[3]
|
|
|
|
subselect().root.mainloop()
|