我有一个可以正常工作的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!')
答案 0 :(得分:0)
您应该在YouTube对象上调用register_on_progress_callback(func)
,其中func
是一个函数,该函数需要stream
,chunk
,file_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)
这样,我们会得到一个类似于下面的进度条,填满
[=================================== ]