问题描述
不幸的是,传入带有 &t= 标记的 URL 不会导致 discord.py 的 VoiceClient 在该时间戳开始播放.我正在使用 youtube_dl.
Unfortunately passing in a URL with a &t= tag does not cause discord.py's VoiceClient to start playing at that timestamp. I'm using youtube_dl.
是否可以在 discord.py 中搜索音频,以便从开头以外的某个地方开始流式传输 YouTube 视频?
Is is possible to seek through audio within discord.py in order to start streaming a YouTube video from somewhere besides the start?
我知道像 Groovy 之类的一些专业机器人具有用于流式 YouTube 视频的搜索命令,因此 Discord API 本身能够这个.
I know some professional bots like Groovy have seek commands for streamed YouTube videos, so the Discord API itself is capable of this.
我使用的代码来自 这里一个>.
推荐答案
在 ffmpeg_options 中,您可以使用 -ss 查找特定的时间戳代码>标志.
In the ffmpeg_options, you're able to seek to a specific timestamp with the use of the -ss flag.
如果您希望从例如 40 秒开始,这就是选项的外观:
This is just how the options should look if you wish to start from, for example, 40 seconds:
ffmpeg_options = { 'options': '-vn -ss 40' }
当然你可以在 stream 命令中添加一个可选变量:
And of course you can add an optional variable to the stream command:
import typing # for the optional argument of the timestamp @classmethod async def from_url(cls, url, *, loop=None, stream=False, timestamp=0): # moved the options from outside the class to inside the method. # this allows the use of variables in the options ffmpeg_options = { 'options': f'-vn -ss {timestamp}' } # rest of the from_url code @commands.command() async def stream(self, ctx, timestamp: typing.Optional[int]=0, *, url): # add the arg """Streams from a url (same as yt, but doesn't predownload)""" async with ctx.typing(): player = await YTDLSource.from_url(url, loop=self.bot.loop, stream=True, timestamp=timestamp) # other code
我只添加了我从音乐机器人示例编辑的代码,所以我希望我编辑的内容很清楚.如果需要任何进一步的说明/某些东西是如何工作的,那么我很乐意进行编辑.
I only added in the code that I edited from the music bot example, so I hope it's clear what I edited. If any further clarification is needed/how something works, then I'll be happy to make edits.
参考资料:
- FFMPEG 文档 - -ss 的 Ctrl + F.李>
- discord 命令中的可选参数
- f-strings - Python 3.6.0+
- FFMPEG Docs - Ctrl + F for -ss.
- Optional arguments in discord commands
- f-strings - Python 3.6.0+