FastestBilibiliDownloader:B站视频下载,用 Goroutine 把速度拉满
文章目录FastestBilibiliDownloaderB站视频下载用 Goroutine 把速度拉满1、三种输入方式2、为什么用 Golang 写3、运行方式4、版本删除的功能5、适用人群FastestBilibiliDownloaderB站视频下载用 Goroutine 把速度拉满这个项目在 GitHub 上拿到了 736 Star用 Golang 写的 B 站视频下载器。它解决一个场景你要下载某个 UP 主投稿的全部视频数量可能上百个手动逐个保存耗时过长需要一个工具把整个过程自动化。1、三种输入方式工具接收三类 IDav 号以 av 开头的一串数字对应 B 站旧版视频编号BV 号以 BV 开头的一串字符对应 B 站新版视频编号UP 主 mid一串数字对应 UP 主个人 ID你把视频链接或 UP 主主页链接传进去工具自动解析出对应的 ID 并开始下载不需要手动从 URL 中提取。2、为什么用 Golang 写B 站视频下载器在 GitHub 上搜一下Python 版和 Node.js 版的都能找到。这个项目选 Golang核心原因是 goroutine 的并发机制。并发优势体现在两层第一层多视频同时下载。当你下载某个 UP 主的全部视频或者一个视频分了多个 part所有下载任务同时发起带宽被充分利用。第二层下载和合并解耦。一个视频的所有 part 各自下载一旦某个视频的全部分片下载完成立刻触发合并不等待其他视频的下载进度。结果是整个流程不是先全部下载再统一合并而是流水线式的边下边合。视频数量越多总耗时越接近单个视频的下载时长而不是所有视频时长的累加。3、运行方式提供两种。方式一Golang 环境入口文件是cmd/start-concurrent-engine.gogo run cmd/start-concurrent-engine.go-t(aid/bvid/upid)-v(id)-t指定 ID 类型-v填入对应 ID 值。首次运行会自动拉取依赖。注意合并视频依赖 FFmpeg。如果系统没装 FFmpeg视频只下载不会自动合并。国内用户可能还需要先配 Go 代理goenv-wGO111MODULEon goenv-wGOPROXYhttps://goproxy.io方式二Docker 运行不想装 Golang 和 FFmpeg 的话项目已经写了 Dockerfile 和 MakefilecdFastestBilibiliDownloadermakebuild# 构建镜像makerun# 启动容器镜像集成了运行环境和 FFmpeg开箱可用。4、版本删除的功能当前版本是 fork 后做了功能删减的。原项目包含 video merge通过 FFmpeg 对下载的 .flv 分片进行拼接和转码。作者实测发现 FFmpeg 这一步太耗时在这个版本里把合并功能移除了。所以下载完的文件是 .flv 格式需要 .mp4 或其他封装格式的话自己用其他工具转一次。文件目录结构临时文件download/下每个视频按aid_视频标题建立文件夹输出结果output/下每个视频以视频标题命名文件夹5、适用人群想批量保存某个 UP 主所有投稿视频到本地的人带宽足够、希望通过并发缩短下载总耗时的人具备 Golang 或 Docker 运行环境的人项目并发引擎框架参考 ccmouse 的设计思路B 站请求 API 部分来自 stevenjoezhang 的 bilibili-downloader 项目。作者声明项目仅限学习交流请勿商用。se 的设计思路B 站请求 API 部分来自 stevenjoezhang 的 bilibili-downloader 项目。作者声明项目仅限学习交流请勿商用。