将xml文件转ass格式文件

本文介绍了一种方法,通过Danmu2Ass软件实现B站视频下载后的XML弹幕转换为ASS格式。提供了软件下载链接,并展示了一个C++程序示例,用于循环调用Danmu2Ass.exe来批量处理多个XML文件。该程序遍历指定目录下的所有XML和JSON文件,并使用系统命令执行转换操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

you-get 下载b站视频后,可以看到有xml格式的弹幕,但需要转下格式才可以看

1、下载 Danmu2Ass 软件

https://newsoftdown01.rbread05.cn/down/Danmu2Ass_v1.1.zip?timestamp=61ff4176&auth_key=64b2cc8e3ea95da99182df0736c60667

可以直接把文件拉到对应的exe文件图标处,就可以了。但是如果很多视频,可以选择程序循环调用 Danmu2Ass.exe 打开xml转码。

下面是我

2、编写程序,循环调用

#include <io.h>
#include <iostream>
#include <vector>
#include<windows.h>
using namespace std;
bool endswith(const char*str1, const char*str2) {
    int len1 = strlen(str1), len2 = strlen(str2);
    if (len2 > len1) return false;
    return strcmp(&str1[len1-len2], str2) == 0;
}
void getFiles(string path, vector<string>& files)
{
    //文件句柄
    long   hFile = 0;
    //文件信息,声明一个存储文件信息的结构体
    struct _finddata_t fileinfo;
    string p;//字符串,存放路径
    if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1)//若查找成功,则进入
    {
        do
        {
            //如果是目录,迭代之(即文件夹内还有文件夹)
            if ((fileinfo.attrib & _A_SUBDIR))
            {
                //文件名不等于"."&&文件名不等于".."
                //.表示当前目录
                //..表示当前目录的父目录
                //判断时,两者都要忽略,不然就无限递归跳不出去了!
                if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
                    getFiles(p.assign(path).append("\\").append(fileinfo.name), files);
            }
            //如果不是,加入列表
            else
            {
                if(endswith(fileinfo.name, "xml")||endswith(fileinfo.name,".json"))
                    files.push_back(p.assign(path).append("\\").append(fileinfo.name));
            }
        } while (_findnext(hFile, &fileinfo) == 0);
        //_findclose函数结束查找
        _findclose(hFile);
    }
}

int state = 0;

void ENTER() {
    keybd_event(VK_RETURN, 0, 0, 0);
    keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);
}


DWORD WINAPI ThreadProc(LPVOID lpParameter)
{   
    while (1) {
        if (state) {//控制先后顺序
            Sleep(100);
            ENTER();
        }
    }
    return 0L;
}

void function(string filePath) {
    vector<string> files;
    获取该路径下的所有文件
    getFiles(filePath, files);
    int size = files.size();
    char exe[50] = "D:\\转弹幕\\Danmu2Ass_v1.1\\Kaedei.Danmu2Ass.exe";
    char command[200] = "\0";
    string fileAbsolutePath;
    for (int i = 0; i < size; i++)
    {
        fileAbsolutePath =  files[i];
        sprintf_s(command, 200, "%s \"\" \"%s\"", exe, fileAbsolutePath.c_str());
        state = 1;
        system(command);
        memset(command, 0, 200);
        state = 0;
    }
}
int main() {
    //创建一个线程
    HANDLE thread = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);
    string filePath1 = "C:\\Users\\Lenovo\\Desktop\\新建文件夹";//自己设置目录
    function(filePath1);
    //关闭线程
    if(thread!=0)
        CloseHandle(thread);
}

Danmaku2ASS 用来将来自 Niconico/Acfun/Bilibili 的评论ASS 格式,这样就可以在任意支持 ASS 字母的媒体播放器中使用弹幕。使用方法:usage: danmaku2ass.py [-h] [-f FORMAT] [-o OUTPUT] -s WIDTHxHEIGHT [-fn FONT]                       [-fs SIZE] [-a ALPHA] [-dm SECONDS] [-ds SECONDS]                       [-fl FILTER] [-p HEIGHT] [-r]                       FILE [FILE ...] positional arguments:   FILE                  Comment file to be processed optional arguments:   -h, --help            show this help message and exit   -f FORMAT, --format FORMAT                         Format of input file (autodetect|Bilibili|Tudou2|MioMi                         o|Acfun|Niconico|Tudou) [default: autodetect]   -o OUTPUT, --output OUTPUT                         Output file   -s WIDTHxHEIGHT, --size WIDTHxHEIGHT                         Stage size in pixels   -fn FONT, --font FONT                         Specify font face [default: sans-serif]   -fs SIZE, --fontsize SIZE                         Default font size [default: 25]   -a ALPHA, --alpha ALPHA                         Text opacity   -dm SECONDS, --duration-marquee SECONDS                         Duration of scrolling comment display [default: 5]   -ds SECONDS, --duration-still SECONDS                         Duration of still comment display [default: 5]   -fl FILTER, --filter FILTER                         Regular expression to filter comments   -p HEIGHT, --protect HEIGHT                         Reserve blank on the bottom of the stage   -r, --reduce          Reduce the amount of comments if stage is full 标签:Danmaku2ASS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

广大菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值