import os import subprocess import ox import shutil import tempfile from archive.models import File, Stream, User from archive.external import get_info, add_subtitles def import_items(items): import item.models for data in items: i = item.models.Item() i.user = User.objects.all()[0] i.save() i.edit(data, True) i.level = 0 i.save() load_vimeo(i) print(i) def load_vimeo(item): urls = [url for url in item.data.get("links", []) if "vimeo.com" in url] cdir = os.path.abspath(os.curdir) orig = None for url in urls: info = get_info(url, None) media = info[0] #for resolution in (720, 360): for resolution in (720,): tmp = tempfile.mkdtemp() if isinstance(tmp, bytes): tmp = tmp.decode('utf-8') os.chdir(tmp) cmd = ['yt-dlp', '-q', url] cmd += ['-o', '%(title)80s.%(ext)s'] cmd += [ '-f', 'bestvideo[height<=%s][ext=mp4]+bestaudio[ext=m4a]' % resolution, '--merge-output-format', 'mp4' ] p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) stdout, stderr = p.communicate() parts = list(os.listdir(tmp)) if parts: part = 1 for name in parts: name = os.path.join(tmp, name) oshash = ox.oshash(name) if orig is None: f, created = File.objects.get_or_create(oshash=oshash) if created: orig = f f.item = item f.info = ox.avinfo(name) f.info['extension'] = media['extension'] f.info['url'] = url f.path = '%(title)s.%(extension)s' % media f.parse_info() f.selected = True f.queued = False if len(parts) > 1: f.part = part part += 1 f.save() f.item.save() else: return 'file exists' stream, created = Stream.objects.get_or_create(file=orig, resolution=resolution, format="mp4") stream.media.name = stream.path(stream.name()) ox.makedirs(os.path.dirname(stream.media.path)) shutil.move(name, stream.media.path) stream.available = True if resolution == 720: source = stream else: stream.source = source stream.save() stream.make_timeline() if resolution == 720 and len(parts) == 1: add_subtitles(item, media, tmp) os.chdir(cdir) shutil.rmtree(tmp) item.update_timeline() item.save()