如何从 YouTube 视频下载器中删除 'cipher' 错误并下载 mp3 格式的视频?
How to remove 'cipher' error from YouTube video downloader and download video in mp3 format?
我正在尝试使用 pytube 和 tkinter 在 python 中创建 YouTube 视频下载器。大多数视频都可以正常下载,但在某些视频中我收到错误 'cipher'。发生这种情况时有人可以提供帮助吗?
我还尝试以 mp3 格式下载,但将 'audioonly' 属性设置为 True 会以 mp4 格式下载我的文件,但没有视频。但我想要 mp3 格式。我该怎么做?
这是我的代码
def startDownload(url):
global file_size
path_to_save = askdirectory()
if path_to_save is None:
return
try:
global MaxFileSize, fileSizeInBytes
choice = youtubeChoicesLabel.get()
url=urlField.get()
yt = YouTube(url)
nome = yt.title
# video2 = urlField.get()
if (choice == download_choices[1]):
print("720p video is downloading")
selectVideo = yt.streams.filter(progressive=True, file_extension='mp4').first()
elif (choice == download_choices[2]):
print("Audio file is downloading")
# selectVideo =yt.streams.get_audio_only()
# new_filename= nome + '*.mp3'
# default_filename= nome + '*.mp4'
# ffmpeg = ('ffmpeg -i ' %path_to_save %default_filename + new_filename)
# subprocess.run(ffmpeg, shell=True)
selectVideo = yt.streams.filter(only_audio=True).first()
elif (choice == download_choices[0]):
return
fileSizeInBytes = selectVideo.filesize
MaxFileSize = fileSizeInBytes/1024000
MB =str(MaxFileSize)+ "MB"
print("File Size = : {:00.000f}".format (MaxFileSize))
# yt = YouTube(url)
# st=yt.streams.first()
st= selectVideo
yt.register_on_complete_callback(complete_download)
yt.register_on_progress_callback(progress_download)
file_size=st.filesize
st.download(output_path=path_to_save)
except Exception as e:
print(e)
修复非常简单,它在 GitHub 存储库中,但是由于这个问题出现在这里,所以我就是这样修复它的。这不是因为您的文件的工作方式,而是因为 YouTube 改变了他们的搜索模式或从 cipher 到 signatureCipher 的东西而发生的问题。
首先,在终端说pip install pytube3
。
其次,进入路径-C:\Users\<user>\AppData\Local\Programs\Python\Python37-32\Lib\site-packages\pytube
。请记住,路径会有所不同,因此请将 <user>
替换为您的 Windows 用户名,将 python37-32
替换为您安装 pytube 的 Python 版本。
第三,从上面的导航目录打开 extract.py
并转到第 301 行或搜索该行:
cipher_url = [
parse_qs(formats[i]["cipher"]) for i, data in enumerate(formats)
]
- 现在替换为:
cipher_url = [
parse_qs(formats[i]["signatureCipher"]) for i, data in enumerate(formats)
]
万一您在更改文件时损坏了它,只需说 pip uninstall pytube3
然后重新安装它,然后重复。请记住,您的导入仍将是 import pytube
.
我正在尝试使用 pytube 和 tkinter 在 python 中创建 YouTube 视频下载器。大多数视频都可以正常下载,但在某些视频中我收到错误 'cipher'。发生这种情况时有人可以提供帮助吗?
我还尝试以 mp3 格式下载,但将 'audioonly' 属性设置为 True 会以 mp4 格式下载我的文件,但没有视频。但我想要 mp3 格式。我该怎么做?
这是我的代码
def startDownload(url):
global file_size
path_to_save = askdirectory()
if path_to_save is None:
return
try:
global MaxFileSize, fileSizeInBytes
choice = youtubeChoicesLabel.get()
url=urlField.get()
yt = YouTube(url)
nome = yt.title
# video2 = urlField.get()
if (choice == download_choices[1]):
print("720p video is downloading")
selectVideo = yt.streams.filter(progressive=True, file_extension='mp4').first()
elif (choice == download_choices[2]):
print("Audio file is downloading")
# selectVideo =yt.streams.get_audio_only()
# new_filename= nome + '*.mp3'
# default_filename= nome + '*.mp4'
# ffmpeg = ('ffmpeg -i ' %path_to_save %default_filename + new_filename)
# subprocess.run(ffmpeg, shell=True)
selectVideo = yt.streams.filter(only_audio=True).first()
elif (choice == download_choices[0]):
return
fileSizeInBytes = selectVideo.filesize
MaxFileSize = fileSizeInBytes/1024000
MB =str(MaxFileSize)+ "MB"
print("File Size = : {:00.000f}".format (MaxFileSize))
# yt = YouTube(url)
# st=yt.streams.first()
st= selectVideo
yt.register_on_complete_callback(complete_download)
yt.register_on_progress_callback(progress_download)
file_size=st.filesize
st.download(output_path=path_to_save)
except Exception as e:
print(e)
修复非常简单,它在 GitHub 存储库中,但是由于这个问题出现在这里,所以我就是这样修复它的。这不是因为您的文件的工作方式,而是因为 YouTube 改变了他们的搜索模式或从 cipher 到 signatureCipher 的东西而发生的问题。
首先,在终端说
pip install pytube3
。其次,进入路径-
C:\Users\<user>\AppData\Local\Programs\Python\Python37-32\Lib\site-packages\pytube
。请记住,路径会有所不同,因此请将<user>
替换为您的 Windows 用户名,将python37-32
替换为您安装 pytube 的 Python 版本。第三,从上面的导航目录打开
extract.py
并转到第 301 行或搜索该行:
cipher_url = [
parse_qs(formats[i]["cipher"]) for i, data in enumerate(formats)
]
- 现在替换为:
cipher_url = [
parse_qs(formats[i]["signatureCipher"]) for i, data in enumerate(formats)
]
万一您在更改文件时损坏了它,只需说 pip uninstall pytube3
然后重新安装它,然后重复。请记住,您的导入仍将是 import pytube
.