try audio/video only and without limit after that
This commit is contained in:
parent
2cd000698e
commit
7c96d9e994
1 changed files with 60 additions and 3 deletions
|
@ -1,10 +1,11 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import json
|
import json
|
||||||
import subprocess
|
import logger
|
||||||
import shutil
|
|
||||||
import tempfile
|
|
||||||
import os
|
import os
|
||||||
|
import shutil
|
||||||
|
import subprocess
|
||||||
|
import tempfile
|
||||||
|
|
||||||
import ox
|
import ox
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
@ -14,6 +15,9 @@ from item.tasks import load_subtitles
|
||||||
|
|
||||||
from . import models
|
from . import models
|
||||||
|
|
||||||
|
logger = logging.getLogger('pandora.' + __name__)
|
||||||
|
|
||||||
|
|
||||||
info_keys = [
|
info_keys = [
|
||||||
'title',
|
'title',
|
||||||
'description',
|
'description',
|
||||||
|
@ -88,6 +92,15 @@ def add_subtitles(item, media, tmp):
|
||||||
sub.selected = True
|
sub.selected = True
|
||||||
sub.save()
|
sub.save()
|
||||||
|
|
||||||
|
def load_formats(url):
|
||||||
|
cmd = ['yt-dlp', '-q', url, '-j', '-F']
|
||||||
|
p = subprocess.Popen(cmd,
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.PIPE, close_fds=True)
|
||||||
|
stdout, stderr = p.communicate()
|
||||||
|
formats = stdout.decode().strip().split('\n')[-1]
|
||||||
|
return json.loads(formats)
|
||||||
|
|
||||||
def download(item_id, url, referer=None):
|
def download(item_id, url, referer=None):
|
||||||
item = Item.objects.get(public_id=item_id)
|
item = Item.objects.get(public_id=item_id)
|
||||||
info = get_info(url, referer)
|
info = get_info(url, referer)
|
||||||
|
@ -121,6 +134,50 @@ def download(item_id, url, referer=None):
|
||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
stderr=subprocess.PIPE, close_fds=True)
|
stderr=subprocess.PIPE, close_fds=True)
|
||||||
stdout, stderr = p.communicate()
|
stdout, stderr = p.communicate()
|
||||||
|
if stderr and b'Requested format is not available.' in stderr:
|
||||||
|
formats = load_formats(url)
|
||||||
|
has_audio = bool([fmt for fmt in formats['formats'] if fmt['resolution'] == 'audio only'])
|
||||||
|
has_video = bool([fmt for fmt in formats['formats'] if 'x' in fmt['resolution']])
|
||||||
|
|
||||||
|
cmd = [
|
||||||
|
'yt-dlp', '-q', url,
|
||||||
|
'-o', '%(title)80s.%(ext)s'
|
||||||
|
]
|
||||||
|
if referer:
|
||||||
|
cmd += ['--referer', referer]
|
||||||
|
elif 'referer' in media:
|
||||||
|
cmd += ['--referer', media['referer']]
|
||||||
|
if has_video and not has_audio:
|
||||||
|
cmd += [
|
||||||
|
'-f', 'bestvideo[height<=%s][ext=mp4]' % max_resolution,
|
||||||
|
]
|
||||||
|
elif not has_video and has_audio:
|
||||||
|
cmd += [
|
||||||
|
'bestaudio[ext=m4a]'
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
cmd = []
|
||||||
|
if cmd:
|
||||||
|
p = subprocess.Popen(cmd,
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.PIPE, close_fds=True)
|
||||||
|
stdout, stderr = p.communicate()
|
||||||
|
if stderr and b'Requested format is not available.' in stderr:
|
||||||
|
cmd = [
|
||||||
|
'yt-dlp', '-q', url,
|
||||||
|
'-o', '%(title)80s.%(ext)s'
|
||||||
|
]
|
||||||
|
if referer:
|
||||||
|
cmd += ['--referer', referer]
|
||||||
|
elif 'referer' in media:
|
||||||
|
cmd += ['--referer', media['referer']]
|
||||||
|
if cmd:
|
||||||
|
p = subprocess.Popen(cmd,
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.PIPE, close_fds=True)
|
||||||
|
stdout, stderr = p.communicate()
|
||||||
|
if stdout or stderr:
|
||||||
|
logger.error("import failed:\n%s\n%s\n%s", " ".join(cmd), stdout.decode(), stderr.decode())
|
||||||
parts = list(os.listdir(tmp))
|
parts = list(os.listdir(tmp))
|
||||||
if parts:
|
if parts:
|
||||||
part = 1
|
part = 1
|
||||||
|
|
Loading…
Reference in a new issue