From 95d3c196ad93d7b7c1dc78e065a522e085ebc433 Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Thu, 2 May 2019 11:17:51 -0600 Subject: [PATCH] whatever --- br.txt | 86 +++++++++++++++++++++++++++++++++ main.py | 123 +++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 11 +++++ 3 files changed, 220 insertions(+) create mode 100644 br.txt create mode 100644 main.py create mode 100644 requirements.txt diff --git a/br.txt b/br.txt new file mode 100644 index 0000000..ee9de5e --- /dev/null +++ b/br.txt @@ -0,0 +1,86 @@ +alabaster==0.7.11 +apipkg==1.5 +appdirs==1.4.3 +arandr==0.1.9 +atomicwrites==1.2.1 +attrs==18.2.0 +Babel==2.6.0 +babelfish==0.5.5 +beautifulsoup4==4.6.3 +cache==1.0.3 +certifi==2018.8.24 +chardet==3.0.4 +click==6.7 +contextlib2==0.5.5 +coverage==4.5.1 +cwiid==0.6.0 +docutils==0.14 +dogpile==0.2.2 +dogpile.cache==0.6.7 +enzyme==0.4.1 +execnet==1.5.0 +funcsigs==1.0.2 +futures==3.2.0 +guessit==3.0.0 +idna==2.7 +imagesize==1.1.0 +Jinja2==2.10 +louis==3.4.0 +MarkupSafe==1.0 +mock==2.0.0 +more-itertools==4.3.0 +mpmath==1.0.0 +mutagen==1.40.0 +netsnmp-python==1.0a1 +olefile==0.45.1 +packaging==17.1 +pathlib2==2.3.2 +pbr==4.2.0 +pep8==1.7.1 +Pillow==5.0.0 +pluggy==0.7.1 +psutil==5.4.3 +pwquality==1.4.0 +py==1.6.0 +PyBluez==0.22 +pycairo==1.16.3 +pyflakes==2.0.0 +Pygments==2.2.0 +pygobject==3.26.1 +pyparsing==2.2.0 +pysrt==1.1.1 +pytest==3.8.0 +pytest-cache==1.0 +pytest-cov==2.6.0 +pytest-flakes==4.0.0 +pytest-pep8==1.0.6 +python-dateutil==2.7.3 +pytz==2018.5 +PyYAML==3.13 +rarfile==3.0 +rebulk==0.9.0 +requests==2.19.1 +scandir==1.9.0 +simplejson==3.13.2 +six==1.11.0 +snowballstemmer==1.2.1 +Sphinx==1.8.0 +sphinx-rtd-theme==0.4.1 +sphinxcontrib-programoutput==0.11 +sphinxcontrib-websupport==1.1.0 +stevedore==1.29.0 +subliminal==2.0.5 +sympy==1.3 +team==1.0 +terminator==1.91 +toml==0.9.6 +tox==3.3.0 +twodict==1.2 +typing==3.6.6 +urllib3==1.23 +vcrpy==1.13.0 +virtualenv==16.0.0 +wrapt==1.10.11 +wxPython==3.0.2.0 +wxPython-common==3.0.2.0 +Youtube-DLG==0.4 diff --git a/main.py b/main.py new file mode 100644 index 0000000..eb81b2b --- /dev/null +++ b/main.py @@ -0,0 +1,123 @@ +#! /usr/bin/python2.7 + +def get_save_subtitles(fpath) : + import subliminal + from babelfish import Language + from datetime import timedelta + from os import system + print("Finding and saving subtitles for "+str(fpath)) + vids = subliminal.scan_video(fpath) + subs = subliminal.download_best_subtitles([vids], {Language("eng")}) + for v in [vids] : + subliminal.save_subtitles(v, subs[v]) + system("chmod -R 777 {}".format(v.name[:v.name.rindex("/")])) + +import threading +class Downloader(threading.Thread) : + def __init__(self, in_q, rate) : + threading.Thread.__init__(self) + self.q = in_q + self.rate = rate + def run(self) : + @RateLimited(self.rate) + def doit(arg) : + try : + get_save_subtitles(arg) + except Exception as e : + print("Could not save subtitles for "+arg+", "+str(e)) + while True : + job = self.q.get() + if job is None : + return + doit(job) + +class FileWatcher(threading.Thread) : + def __init__(self, root, out_q) : + threading.Thread.__init__(self) + self.q = out_q + self.root = root + def run(self) : + import os + for dirpath, _, fnames in os.walk(self.root) : + fnames = sorted(fnames) + if len(fnames) > 150 : + continue + for fname in fnames : + fname = os.path.join(dirpath, fname) + if not self.isVideoExt(fname.split(".")[-1]) : + continue + if not self.noSubYet(".".join(fname.split(".")[:-1])) : + continue + if self.isLink(fname) : + continue + self.q.put(fname) + + self.q.put(None) + def isVideoExt(self, ext) : + return ext in ["mp4", "avi", "mkv"] + + def noSubYet(self, basename) : + from os import path + return not ( + path.isfile(basename+".srt") or + path.isfile(basename+".en.srt") or + path.isfile(basename+".en.ttml") or + path.isfile(basename+".ttml") + ) + + def isLink(self, fpath) : + from os import path + return path.islink(fpath) + +job_queue = None +def get_job_queue() : + global job_queue + if job_queue is None : + import Queue as queue + job_queue = queue.Queue() + return job_queue + +last = 0.0 +def RateLimited(opsPerSec) : + import time + minInterval = 1.0 / float(opsPerSec) + def dec(func) : + def limitedFunc(*args, **kwargs) : + global last + elapsed = time.clock() - last + left = minInterval - elapsed + if left > 0 : + time.sleep(left) + ret = func(*args, **kwargs) + last = time.clock() + return ret + return limitedFunc + return dec + +def get_args() : + import argparse + parser = argparse.ArgumentParser() + parser.add_argument("--root", type=str, default="/volume1/video/TV") #required=True) + parser.add_argument("--rate", type=float, default=1) + return parser.parse_args() + +def main() : + args = get_args() + + FileWatcher(args.root, get_job_queue()).run() + Downloader(get_job_queue(), args.rate).run() + + return + + threads = [] + threads.append(FileWatcher(args.root, get_job_queue())) + threads.append(Downloader(get_job_queue(), args.rate)) + + for t in threads : + t.start() + + for t in threads : + t.join() + +if __name__ == "__main__" : + main() diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..6b24eb5 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,11 @@ +babelfish==0.5.5 +beautifulsoup4==4.6.3 +cache==1.0.3 +dogpile==0.2.2 +dogpile.cache==0.6.7 +futures==3.2.0 +guessit==3.0.0 +pysrt==1.1.1 +rarfile==3.0 +requests==2.19.1 +subliminal==2.0.5