Discord.py и youtube_dl: ищите продолжительность видео перед загрузкой - PullRequest
0 голосов
/ 20 июня 2019

Включенный в этот онлайн-скрипт (не существует) , я пытаюсь выяснить длину видео / аудио, которое будет загружено до того, как это произойдет. Примечания включены в сценарий.

Мой вопрос: как узнать длину видео до его загрузки в качестве аудио?

Пожалуйста, не используйте и не упоминайте какую-либо часть repl.it. Я использую IDLE python 3.7.3, пока эта часть находится на скрипте на моем ПК для запуска моего бота.

Извините, если бы я не мог сказать это лучше.

1 Ответ

0 голосов
/ 20 июня 2019

Вы можете попробовать обработать данные и загрузить, если длина видео меньше или равна определенному значению:

class AudioTooLongError(commands.CommandError): pass

@classmethod
async def from_url(cls, url, *, loop=None, stream=False):
    loop = loop or asyncio.get_event_loop()
    to_run = functools.partial(ytdl.extract_info, url=url, download=False)
    data = await loop.run_in_executor(None, to_run)

    if 'entries' in data:
        # take first item from a playlist
        data = data['entries'][0]

    if data['duration'] > 3600:
        # Forbid downloading of sources more than 1 hour long.
        raise AudioTooLongError

    if not stream:
        try: data = ytdl.process_ie_result(data)
        except PermissionError: pass
        source = ytdl.prepare_filename(data)
        return cls(discord.FFmpegPCMAudio(source), data=data, requester=ctx.author)
    return data['url']

Попробуйте это!

...