故厶 2024-05-25 18:07 采纳率: 14.3%
浏览 10
已结题

有什么方法可以下载tx视频的弹幕保存.ass文件

能用potplay播放就行
自从网页端从mfm.换成.dm之后,网上就找不到工具了

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-05-25 18:07
    关注

    引自免费微信小程序:皆我百晓生

    要下载Bilibili(B站)视频的弹幕并将其保存为ASS格式,你需要安装一些Python库,并编写一个简单的脚本。这里是一个详细的步骤指南:

    1. 安装必要的Python库:

      • requests:用于发送HTTP请求
      • pyquery:用于解析HTML文档
      • asslib:用于处理ASS格式的字幕
      • fake_useragent:用于设置随机User-Agent,防止被网站识别为机器人

      使用pip安装这些库:

      pip install requests pyquery asslib fake-useragent
      
    2. 编写Python脚本来获取视频ID、请求弹幕数据并保存为ASS文件。

    以下是完整的Python代码示例:

    import requests
    from bs4 import BeautifulSoup
    from asslib import AssFile
    from asslib编剧 import Dialogue
    import random
    import re
    import json
    import time
    from fake_useragent import UserAgent
    
    # 生成随机User-Agent
    ua = UserAgent()
    
    def get_video_id(url):
        match = re.search(r"/video/(\d+)", url)
        if match:
            return match.group(1)
    
    def get_danmu_url(video_id):
        danmu_url = f"https://api.bilibili.com/x/v2/dm/list.so?oid={video_id}"
        headers = {
            "User-Agent": ua.random,
        }
        response = requests.get(danmu_url, headers=headers)
        data = response.json()
        return data["data"]["dms"]
    
    def save_to_ass(danmus, output_file):
        ass = AssFile()
        
        for danmu in danmus:
            start_time = float(danmu["ctime"])/1000
            end_time = start_time + float(danmu["duration"]/1000)
            text = danmu["content"]
            
            dialogue = Dialogue(text=text, start=start_time, end=end_time, layer=0, style="Default", margin_left=0, margin_right=0, margin_top=0, margin_bottom=0)
            ass.append(dialogue)
        
        ass.save(output_file)
    
    if __name__ == "__main__":
        video_url = input("请输入Bilibili视频URL: ")
        video_id = get_video_id(video_url)
        
        danmus = get_danmu_url(video_id)
        
        # 将时间戳转换为毫秒
        for danmu in danmus:
            danmu["ctime"] *= 1000
            danmu["duration"] *= 1000
        
        output_file = f"{video_id}.ass"
        save_to_ass(danmus, output_file)
    
        print(f"已将弹幕保存到 {output_file} 文件。请在PotPlayer或其他支持ASS的播放器中打开观看。")
    
    1. 运行脚本:
      • 复制上述代码并粘贴到一个新的Python文件中,例如download_bilibili_danmu.py
      • 在命令行中运行这个脚本,提供B站视频的URL作为输入:
        python download_bilibili_danmu.py
        
      • 脚本会自动下载弹幕并保存为.ass文件,然后提示你在哪里找到这个文件。

    注意:这个脚本可能不适用于所有B站视频,因为B站可能会改变其API或页面结构。如果有任何错误,你可能需要根据最新的API或页面结构进行调整。此外,由于B站的反爬虫策略,某些情况下可能需要更复杂的逻辑来处理登录和验证码等问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月26日
  • 创建了问题 5月25日