AhFei

AhFei

简洁的写作需要勇气

BBDown 下載 B 站視頻 - 快捷的命令行工具

若無單獨說明,按照文章代碼塊中命令的順序,一條一條執行,即可實現目標。
適用系統:Debian 系發行版,包括 Ubuntu 和 Armbian,其他發行版按流程稍改命令一般也可。

走通預計時間:10 分鐘

I might have made some mistakes, please let me know if I’ve gotten anything wrong!


BBDown 是一款命令行 B 站 下載器。

GitHub: nilaoda/BBDown: Bilibili Downloader. 一款命令行式哔哩哔哩下載器. (github.com)

下面是它結合網路記事本方便日常使用的演示。

image

安裝與配置#

安裝前置工具

sudo apt install -y wget unzip curl

安裝 BBDown#

一鍵複製運行即可安裝(更新的話重複運行一遍即可)

# 獲取最新下載鏈接
github_project="nilaoda/BBDown"
tag=$(wget -qO- -t1 -T2 "https://api.github.com/repos/${github_project}/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g')
browser_download_url=$(wget -qO- -t1 -T2 "https://api.github.com/repos/${github_project}/releases/latest" | grep "browser_download_url" | head -n 1 | awk -F "_" '{print $5}' | sed 's/\"//g;s/,//g;s/ //g')
# echo $browser_download_url
# 下載
wget https://github.com/nilaoda/BBDown/releases/download/$tag/BBDown_${tag}_${browser_download_url}_linux-x64.zip
# 解壓並整理
unzip BBDown_*_linux-x64.zip && rm BBDown_*_linux-x64.zip
chmod +x BBDown
sudo mv BBDown /usr/local/bin/

創建數據文件(不提前創建的話,由於這個 .data 文件默認同程序一個目錄,而程序所在目錄普通用戶沒有寫權限,導致登錄的 session 不能保存)

sudo touch /usr/local/bin/BBDown.data && \
sudo chown $USER:$USER /usr/local/bin/BBDown.data

安裝依賴 ffmpeg#

sudo apt update && sudo apt install -y ffmpeg

查看 ffmpeg 版本,確保安裝成功

ffmpeg -version

配置#

更多配置請查看項目的 GitHub 頁面

sudo vim /usr/local/bin/BBDown.config
# 非空白內容程序逐行讀取,對於一個選項,其參數應當在下一行出現

# 設置輸出文件名格式
--file-pattern
<videoTitle>

--multi-file-pattern
<videoTitle>/[P<pageNumberWithZero>]<pageTitle>

# 下面設置下載多個分P時,每個分P的下載間隔為2秒
--delay-per-page
2

# 開啟彈幕下載功能
--download-danmaku
# 跳過字幕下載
--skip-subtitle

也可以在配置文件中指定下載目錄,將下面加入上面文件 BBDown.config 即可。

# 下載目錄
--work-dir
/home/vfly2/bilibili

使用#

需要先登錄(登錄才能下 1080p),有效期大概 1 個月。在命令行運行:

BBDown login   # 需要APP掃碼

然後就可以下載視頻了。

視頻鏈接可以是完整的網址 "https://www.bilibili.com/video/BV1Ee411u7hm" ,也可以是裡面的這段 BV1Ee411u7hm 。命令如下:

# 下載單個視頻
BBDown BV1Ee411u7hm
BBDown "https://www.bilibili.com/video/BV1Ee411u7hm"

# 下載合集
BBDown https://space.bilibili.com/88895225/channel/collectiondetail?sid=39377

更多使用,請查看項目的 GitHub 頁面

批量下載#

可能前面的內容還不容易看出,命令行工具相比有用戶界面工具的優勢,也就是快捷簡便自動化。下面通過一個小腳本來發揮出它的優勢。

批量下載腳本#

先創建一個腳本文件:

filename="bbdl.sh"
touch $filename && chmod +x $filename && vim $filename

編輯內容:

vim bbdl.sh

需要修改 BBLIST 變量的值,也就是待會保存視頻網址的文件的絕對路徑。

#!/bin/bash
# download bilibili videos according to selected file containing urls 

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

# 存有 視頻網址 的文件路徑,只需要修改這個
BBLIST="/home/vfly2/bblist"


# 取文件指定的第幾行的內容,變量1是文件路徑,變量2是第幾行
function grepline(){
    url=$(cat ${1} | head -n ${2} | tail -n 1)
    echo ${url}
}


LINE=1
URL=$(grepline ${BBLIST} ${LINE})   # 先取第一行
ENDLINE=$(cat ${BBLIST} | tail -n 1)   # 取最後一行


# 每次取一行,直到行的內容是 ENDLINE
until [ "${URL}" == "${ENDLINE}" ]
do

/usr/local/bin/BBDown ${URL}
# /usr/local/bin/BBDown ${URL} --work-dir /home/vfly2/bilibili   # 可在這指定下載目錄
LINE=$((${LINE}+1))   # 加1
URL=$(grepline ${BBLIST} ${LINE})   # 取下一行,如果是 ENDLINE,則退出循環

done

/usr/local/bin/BBDown ${ENDLINE}   # 補上最後一行網址的下載,如果就一個鏈接,會下兩次

將視頻鏈接保存在 bblist 中:

vim /home/vfly2/bblist

一行一個鏈接

BV1Ee411u7hm
BV1p34y1G79Q

執行腳本(默認下載在當前目錄下)

bash -ex  ./bbdl.sh

如此一來,只需要先在本地電腦上把所有鏈接保存,再在伺服器或 NAS 上通過腳本一鍵全部下載,非常便捷。

結合網路記事本#

命令行工具的不足在於使用上有一定門檻,以及不方便日常的零碎化使用。也就是如果每次只下載一兩個視頻,還需要 SSH 編輯文件並執行腳本,有些繁瑣。

本博客之前有一篇介紹網路記事本的文章:分享我使用兩年的極簡 網頁記事本 - 承飛之咎 (vfly2.com),它保存數據的方式就是一個文件。

那不如通過網路記事本隨時保存鏈接,再把腳本中的 BBLIST 變量改為相應文件,這樣每隔一段時間自動執行腳本下載視頻,就可以省去操作。(實際上 AhFei 是利用 curl 抓取內容到本地,而非在本機部署一個網路記事本)

不過這樣實時性沒那麼高,AhFei 是將下載目錄改為 Emby 的媒體庫,通過 Emby 觀看。這樣高質量視頻直接就保存了,看完後刪去不需要的,不用擔心視頻被和諧,也不需要單獨抽空下載收藏的視頻。


類似上面的腳本流程:

filename="bbdl.sh"
touch $filename && chmod +x $filename && vim $filename
vim bbdl.sh

除了 BBLIST,還增加了一個變量 WEBLIST ,它的值是網路記事本的網址,這裡使用 AhFei 搭建的演示: https://forward.vfly.app/bblist ,將鏈接複製到這上面,一行一個。

各位讀者可以直接使用這個公開實例,或者自行搭建:分享我使用兩年的極簡 網頁記事本 - 承飛之咎 (vfly2.com)

#!/bin/bash
# download bilibili videos according to the file containing urls 

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

# 存有 視頻網址 的文件路徑
BBLIST="/home/vfly2/bblist"
WEBLIST="https://forward.vfly.app/bblist"

# 下載網頁上的視頻鏈接
curl -k $WEBLIST > $BBLIST


# 取文件指定的第幾行的內容,變量1是文件路徑,變量2是第幾行
function grepline(){
    url=$(cat ${1} | head -n ${2} | tail -n 1)
    echo ${url}
}


LINE=1
URL=$(grepline ${BBLIST} ${LINE})   # 先取第一行
ENDLINE=$(cat ${BBLIST} | tail -n 1)   # 取最後一行


# 每次取一行,直到行的內容是 ENDLINE
until [ "${URL}" == "${ENDLINE}" ]
do

# echo ${URL}
/usr/local/bin/BBDown ${URL}
# /usr/local/bin/BBDown ${URL} --work-dir /home/vfly2/bilibili   # 可在這指定下載目錄
LINE=$((${LINE}+1))   # 加1
URL=$(grepline ${BBLIST} ${LINE})   # 取下一行,如果是 ENDLINE,則退出循環

done

/usr/local/bin/BBDown ${ENDLINE}   # 補上最後一行網址的下載,如果就一個鏈接,會下兩次
# 向網頁記事本傳送已完成的標誌
echo "\nabove have done, but may skip" >> $BBLIST
curl -k --data-urlencode "text@${BBLIST}" $WEBLIST

這樣每次 SSH 只需要運行一遍下面命令即可,不需要編輯文件複製鏈接了

bash -ex ./bbdl.sh

最後分享一下我是怎麼看 B 站的。

為了防止刷刷刷,我的手機裡沒有 B 站 APP,而是在電腦上通過網頁看,每次只看動態裡關注的 UP 。然而這樣也有刷的風險,不過這時更多是會被首頁等妨礙注意力。

於是,我通過 RSSHub 生成個人動態的 RSS,通過 RSS 閱讀器發現更新,然後直接跳轉到視頻頁,再把鏈接保存到網路記事本上。每 4 小時自動下載,而後就可以在 Emby 上觀看,尤其是在手機用 Emby 客戶端看,避免了被商業平台各種廣告和手段分散注意力,同時保持了攝入信息的獨立性和主動性。(有這種習慣就會潛移默化培養意識,從而增強 “免疫力”)


過去用過的一款有用戶界面的 B 站下載客戶端: leiurayer/downkyi: 哔哩下載姬 downkyi,哔哩哔哩網站視頻下載工具,支持批量下載,支持 8K、HDR、杜比視界,提供工具箱(音視頻提取、去水印等)。 (github.com)

可以登錄賬號從而下載收藏夾,但是視頻多的話,很容易閃退。


原文鏈接: https://blog.vfly2.com/2023/10/bbdown-download-bilibili-videos/

版權聲明:本博客所有文章除特別聲明外,均為 AhFei 原創,採用 CC BY-NC-SA 4.0 許可協議。转载请注明來源 承飛之咎 (blog.vfly2.com)

保持更新 ٩(・̤̀ᵕ・̤́๑)ᵒᵏᵎᵎᵎᵎ 清晰可重複的實用技能,歡迎使用 RSS 訂閱,也歡迎留言指正。

可在 Telegram 群組 https://t.me/vfly2 交流依文章步驟遇到的問題。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。