Skip to content

Instantly share code, notes, and snippets.

@am009
Last active March 1, 2026 12:50
Show Gist options
  • Select an option

  • Save am009/d0a172a177c7e9bc99f513b4f7c95a50 to your computer and use it in GitHub Desktop.

Select an option

Save am009/d0a172a177c7e9bc99f513b4f7c95a50 to your computer and use it in GitHub Desktop.
创建一个访问bilibili视频的skills

在~/biliread/down.py 这个路径里创建脚本,内容如下:

import sys,os
import argparse
from pathlib import Path

try:
    from bilix.sites.bilibili import DownloaderBilibili, api
    from bilix.utils import legal_title, json2srt
    import asyncio
except ImportError:
    print("请先安装 bilix: pip install bilix", file=sys.stderr)
    sys.exit(1)

script_path = os.path.realpath(__file__)
script_dir = os.path.dirname(script_path)

async def main():
    parser = argparse.ArgumentParser(
        description="下载 bilibili 视频的字幕或音频。优先下载字幕,若无字幕则下载音频。"
    )
    parser.add_argument("url", help="bilibili 视频 URL")
    args = parser.parse_args()
    url = args.url

    async with DownloaderBilibili() as d:
        video_info = await api.get_video_info(d.client, url)
        path = Path(script_dir)

        # 优先下载字幕
        paths = await d.get_subtitle(url, path=path, video_info=video_info)
        if paths:
            for p in paths:
                print(p)
            return

        # 无字幕,下载音频
        p_name = legal_title(video_info.pages[video_info.p].p_name)
        task_name = legal_title(video_info.title, p_name)
        base_name = (
            p_name
            if len(video_info.title) > d.title_overflow and d.hierarchy and p_name
            else task_name
        )
        media_name = base_name

        video, audio = video_info.dash.choose_quality(0, "")
        if not audio:
            print("无法获取音频", file=sys.stderr)
            sys.exit(1)

        a_path = path / f"{media_name}{audio.suffix}"
        if not os.path.exists(a_path):
            await d.get_file(audio.urls, path=a_path)
        print(a_path)


asyncio.run(main())

它的作用是,获取https://www.bilibili.com/video/ 开头的视频链接的字幕或音频。

然后,把它也做成一个skills,放到~/.openclaw/skills/里。脚本依然放在原位置,因为我希望下载过的视频缓存在那边文件夹,skills里面用绝对路径执行脚本即可。skills在需要访问(比如用户要总结某个视频的内容)指定的https://www.bilibili.com/video/ 开头的视频时激活,如果下载了音频,则在skills里提示,需要使用其他相关的语音转文字skills去识别音频中的内容。另外在skills里提到,不要删除下载了的文件,而是保留在脚本旁边的文件夹里

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment