全网最简单最快的b站视频(mp4)下载方法
文章首发在我的博客,欢迎访问
https://www.wilan.top/Home/Index/article/aid/87

提醒:此工具仅用于方便二创,引用视频请标明出处,请不要有盗用视频的行为
欢迎点个star https://github.com/Kevin-Red/bilidown
如果你不想看实现方式,直接加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号,即可全自动下载,速度也是非常可观
