bvd

package module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 21, 2021 License: MIT Imports: 10 Imported by: 0

README

bvd - 又一个B站视频下载工具

又一个B站视频下载工具. 支持通过B站的 Web/TV API 下载视频.

注意事项

  1. 项目仅供学习测试用途, 请勿滥用.
  2. 使用本工具可能造成的任何后果与项目作者无关.
  3. 不排除项目删档的可能性.

安装

go get github.com/hcrgm/bvd

API

文档编写中...

使用

  1. 基础用法.
    bvd av1234bvd BVxxxxxxxxxx
  2. 指定 Cookie 获取会员专享/高码率/高帧率视频.
    bvd --cookie "SESSDATA=*****" av1234
  3. 使用 TV API.
    通过此方法可以获得部分视频的无水印版本 (无水印条件不明).
    游客也可获得最高 1080P 画质视频, 但更高画质可能需要电视大会员.
    bvd --api tv av1234
  4. 下载多个分P bvd -p 1,2,3 av1234

路线图

  • 多分P下载
  • 已安装 FFmpeg 时自动合并音视频
  • 自动选择用户可用的最高画质视频 (最高为 "真彩 HDR")
  • 断点续传
  • 自动打开浏览器获取 Cookie
  • 番剧识别和下载
  • HEVC 编码支持
  • 更清晰简洁的提示信息
  • 更简便的用法

协议

本项目使用 MIT 协议.

特别感谢

  1. NaptieBiliDownload 项目.
  2. SocialSisterYiB站API收集整理 项目.
  3. 本项目使用的其它开源代码库.

Documentation

Index

Constants

View Source
const (
	API_VIDEO_DETAIL   = "https://api.bilibili.com/x/web-interface/view"
	API_BANGUMI_DETAIL = "https://api.bilibili.com/pgc/view/web/season?season_id=26228"
	USER_AGENT_WEB     = "" /* 131-byte string literal not displayed */
	USER_AGENT_TV      = "" /* 139-byte string literal not displayed */
	API_PLAYURL_WEB    = "https://api.bilibili.com/x/player/playurl"
	API_PLAYURL_YST    = "https://api.bilibili.com/x/tv/ugc/playurl"
	REFERER            = "https://www.bilibili.com"
	VERSION            = "v1.0.0"
)

Variables

View Source
var Debug = false

Functions

func IsValidParts

func IsValidParts(detail *videoDetail, parts ...int) bool

func IsValidPartsBangumi

func IsValidPartsBangumi(detail *bangumiDetail, parts ...int) bool

func IsValidVid

func IsValidVid(vids ...string) bool

Types

type DownloadOption

type DownloadOption struct {
	// TODO:画质选项.
	// 数值遵照 API 所返回的数据, 可以通过命令行的 "-i" 参数获取所有的画质选项.
	// 默认值 (0) 代表选择该用户可用的最高画质.
	Quality int
	// 要下载的分 P
	// 若某一分 P 超出范围, 则该分 P 会被忽略. 所有分 P 超出范围会返回一个错误
	Parts []int
}

针对单个视频稿件的下载选项.

func NewDownloadOption

func NewDownloadOption(quality int, parts ...int) *DownloadOption

创建一个下载选项. 例如: option := NewDownloadOption(0, 1,2,3)

type Downloader

type Downloader struct {
	// Cookie 信息, 传递用户登录信息, 用于获取更高画质的视频.
	Cookie string
	// 请求B站 Web API 时附带的 User Agent 头.
	// 默认值: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36 Edg/89.0.774.77"
	UserAgentWeb string
	// 请求B站 TV API 时附带的 User Agent 头.
	// 默认值: "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1"
	UserAgentTv string
	// 要下载的视频. 可指定多个视频, 但同一时间只能下载一个.
	// key: 视频 av/bv 号.
	// value: 下载选项 (值为 nil 时使用默认选项).
	// 默认的下载选项:自动选择最佳画质, 只下载第一个分 P.
	Videos map[string]*DownloadOption
	// 使用的视频流 API. 支持 web,tv.
	// tv 相比于 web 的一些区别为: 游客可获取的画质更高, 部分视频可获得无水印视频流.
	// 但是部分视频 (如番剧) 使用 tv api 无法下载, 会提示 404.
	PlayUrlAPI string
	// 是否自动合并 (需要安装 FFmpeg 工具且在系统 PATH 变量中).
	Merge bool
}

func NewDownloader

func NewDownloader(videos map[string]*DownloadOption, merge bool) *Downloader

创建一个下载器. 示例:

videos := map[string]*DownloadConfig{
		"BVxxxxx1": &DownloadConfig{Parts: []int{1,2,3}}, // 自动选择最佳画质, 下载 1,2,3 分 P
		"avxxxxx2": nil, // 使用默认选项
}

downloader := NewDownloader(videos, true) 参数: videos: 要下载的视频; merge: 是否合并视频和音频.

func (*Downloader) Download

func (d *Downloader) Download() error

开始下载所有视频. 为避免被服务器限制, 暂只能同时下载一个视频.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL