如果你不想看实现方式,直接加QQ群下载即可,982236115,依赖的软件也一同打包了,运行down.exe即可


首先我们借助两个软件

1.youtube-dl

超级好用的视频下载工具,良心开源,首页非常简洁,哈哈哈


2.ffmpeg

这个很多人应该都知道,非常牛的转码工具,flv和MP4的编码格式是互相兼容的,所以互转时可以更换容器,ffmpeg就能实现,速度非常快





接下来进入代码部分,C++实现


bv转av算法来自知乎@mcfx

#include <iostream>
#include <string>
#include <cmath>
#include <map>
#include <direct.h>

using namespace std;

string table = "fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF";
map<long, long> tr;
long s[] = {11, 10, 3, 8, 4, 6};
long long xor1 = 177451812;
long long add1 = 8728348608;


//bv转av
string dec(string x1) {
    long long r = 0;
    for (int a = 0; a < 6; a++) {
        r += tr[x1[s[a]]] * pow(58, a);
    }
    return to_string(((long long)r - (long long)add1) ^ xor1);
}

int main() {
    for (int i = 0; i < 58; i++) {
        tr[table[i]] = i;
    }
    string avid;
    cout << "请输入bv号:";
    cin >> avid;

    //获取av号
    avid = dec(avid);

    //当前路径
    char *dir;
    dir = getcwd(NULL, 0);
    string dirs(dir, dir + strlen(dir));

    //下载命令
    string youtube = dirs + "/youtube-dl.exe https://www.bilibili.com/video/av" + avid + " -o" + avid + ".flv";
    system((char*)youtube.data());

    //转码命令
    string ffmpeg = dirs + "/ffmpeg.exe -i " + avid + ".flv -vcodec copy -acodec copy " + avid + ".mp4";
    system((char*)ffmpeg.data());

    //删除flv
    string down = "del /F " + avid + ".flv";
    system((char*)down.data());

    return 0;
}



运行结果如下,只用输入bv号,即可全自动下载,速度也是非常可观



个人网站运营不易ヾ(◍°∇°◍)ノ゙如果有帮到你赞助一下吧

Kevin博客
  • 最新评论
  • 总共0条评论