是否可以使用 discord.py(从视频中的给定时间戳播放)搜索流式 youtube 音频?

问题描述

不幸的是,传入带有 &t= 标记的 URL 不会导致 discord.pyVoiceClient 在该时间戳开始播放.我正在使用 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+

相关文章