如何在我的pytube代码中添加进度条

时间:2019-04-17 20:50:03

标签: python-3.x pytube

我有一个可以正常工作的pytube脚本,但在多余的代码应该放在哪里以创建进度条方面却有些挣扎。

#! usr/bin/python3

import sys
from pytube import YouTube

if len(sys.argv) < 2:
    print('Argument 1 must be the YouTube URL. Argument 2 must be a location to save it.')

yt = YouTube(sys.argv[1])

print()
print("Knocking on YouTube's Door....")
print(f'Downloading: {yt.title}')
print()

yt = YouTube(sys.argv[1]).streams.first().download(sys.argv[2])

print('Download Complete!')

2 个答案:

答案 0 :(得分:0)

您应该在YouTube对象上调用register_on_progress_callback(func),其中func是一个函数,该函数需要streamchunkfile_handle和{{1} }作为参数。对于您的代码,它将是:

bytes_remaining

然后,您必须使用def on_progress(stream, chunk, file_handle, bytes_remaining): total_size = stream.filesize bytes_downloaded = total_size - bytes_remaining percentage_of_completion = bytes_downloaded / total_size * 100 yt.register_on_progress_callback(on_progress) 变量来绘制进度条,但这有点超出此问题的范围。请记住,每次下载块时都会调用percentage_of_completion函数。我希望现在您能够做自己想要的。

答案 1 :(得分:0)

我设法用几行代码制作了一个漂亮而简单的进度函数:

def progress_func(stream, chunk, bytes_remaining):
    curr = stream.filesize - bytes_remaining
    done = int(50 * curr / stream.filesize)
    sys.stdout.write("\r[{}{}] ".format('=' * done, ' ' * (50-done)) )
    sys.stdout.flush()

然后在创建YouTube对象时使用这个函数

YouTube(url, on_progress_callback=progress_func)

这样,我们会得到一个类似于下面的进度条,填满

[===================================               ]