nik*_*rov 83 python ffmpeg youtube-dl discord
我在不和谐(discord.py,PYTHON)中有一个非常强大的机器人,它可以在语音通道中播放音乐。它从 youtube (youtube_dl) 获取音乐。以前它工作得很好,但现在它不想处理任何视频。我尝试更新 youtube_dl 但它仍然不起作用我到处搜索但我仍然找不到可能对我有帮助的答案。
这是错误:Error: Unable to extract uploader id
错误日志之后和之前没有更多信息。有人可以帮忙吗?
我将留下一些用于我的机器人的代码... youtube 设置:
youtube_dl.utils.bug_reports_message = lambda: ''
ytdl_format_options = {
'format': 'bestaudio/best',
'outtmpl': '%(extractor)s-%(id)s-%(title)s.%(ext)s',
'restrictfilenames': True,
'noplaylist': True,
'nocheckcertificate': True,
'ignoreerrors': False,
'logtostderr': False,
'quiet': True,
'no_warnings': True,
'default_search': 'auto',
'source_address': '0.0.0.0', # bind to ipv4 since ipv6 addresses cause issues sometimes
}
ffmpeg_options = {
'options': '-vn',
}
ytdl = youtube_dl.YoutubeDL(ytdl_format_options)
class YTDLSource(discord.PCMVolumeTransformer):
def __init__(self, source, *, data, volume=0.5):
super().__init__(source, volume)
self.data = data
self.title = data.get('title')
self.url = data.get('url')
self.duration = data.get('duration')
self.image = data.get("thumbnails")[0]["url"]
@classmethod
async def from_url(cls, url, *, loop=None, stream=False):
loop = loop or asyncio.get_event_loop()
data = await loop.run_in_executor(None, lambda: ytdl.extract_info(url, download=not stream))
#print(data)
if 'entries' in data:
# take first item from a playlist
data = data['entries'][0]
#print(data["thumbnails"][0]["url"])
#print(data["duration"])
filename = data['url'] if stream else ytdl.prepare_filename(data)
return cls(discord.FFmpegPCMAudio(filename, **ffmpeg_options), data=data)
Run Code Online (Sandbox Code Playgroud)
运行音频的大约命令(来自我的机器人):
sessionChanel = message.author.voice.channel
await sessionChannel.connect()
url = matched.group(1)
player = await YTDLSource.from_url(url, loop=client.loop, stream=True)
sessionChannel.guild.voice_client.play(player, after=lambda e: print(
f'Player error: {e}') if e else None)
Run Code Online (Sandbox Code Playgroud)
inn*_*ree 96
这是一个已知问题,已在 Master 中修复。对于临时修复,
python3 -m pip install --force-reinstall https://github.com/yt-dlp/yt-dlp/archive/master.tar.gz
Run Code Online (Sandbox Code Playgroud)
这将安装主版本。通过命令行运行它
yt-dlp URL
Run Code Online (Sandbox Code Playgroud)
其中 URL 是您想要的视频的 URL。请参阅yt-dlp --help参考资料 中的所有选项。它应该可以正常工作而不会出现错误。
如果您将其用作模块,
import yt_dlp as youtube_dl
Run Code Online (Sandbox Code Playgroud)
可能会解决您的问题(尽管 API 更改可能会破坏您的代码;我不知道您yt_dlp使用的是哪个版本等)。
Ric*_*evi 67
我v2021.12.17通过编辑文件暂时解决了这个问题( ),直到有新的更新:
your/path/to/site-packages/youtube_dl/extractor/youtube.py
示例路径:
~/.local/lib/python3.10/site-packages/youtube_dl/extractor/youtube.py/usr/local/Cellar/youtube-dl/2021.12.17/libexec/lib/python3.10/site-packages/youtube_dl/extractor/youtube.py行号(~): 1794 并添加选项fatal=False
前:
'uploader_id': self._search_regex(r'/(?:channel|user)/([^/?&#]+)', owner_profile_url, 'uploader id') if owner_profile_url else None
Run Code Online (Sandbox Code Playgroud)
后:
'uploader_id': self._search_regex(r'/(?:channel|user)/([^/?&#]+)', owner_profile_url, 'uploader id', fatal=False) if owner_profile_url else None
Run Code Online (Sandbox Code Playgroud)
这会将其从严重(退出脚本)转换为警告(简单地继续)
boe*_*oez 23
对于每个使用 youtube_dl 并想知道如何在不使用其他库的情况下解决此问题的人,例如ytdlp:首先卸载 youtube_dl,pip uninstall youtube_dl然后从其 github 安装 youtube_dl 的主分支pip install git+https://github.com/ytdl-org/youtube-dl.git@master#egg=youtube_dl。为此,您需要 git,请在此处下载。我已经测试过了,它确实有效。
编辑:
Youtube_dl 不再维护,所以我建议使用ytdlp,另请参阅此链接以了解 yt-dl 和 ytdlp 在默认行为方面的差异
Rom*_*n M 14
此修复(对于 Ubuntu/Linux):
sudo apt install git
Run Code Online (Sandbox Code Playgroud)
sudo apt install pip
Run Code Online (Sandbox Code Playgroud)
sudo pip install --upgrade --force-reinstall "git+https://github.com/ytdl-org/youtube-dl.git"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
98918 次 |
| 最近记录: |