AhFei

AhFei

简洁的写作需要勇气

BBDownでB站の動画をダウンロード - 簡単なコマンドラインツール

特に説明がない限り、記事のコードブロック内のコマンドの順序に従って、一つずつ実行することで目標を達成できます。
対応システム:Debian 系ディストリビューション、Ubuntu や Armbian を含む。他のディストリビューションでも、流れに沿ってコマンドを少し変更すれば一般的に可能です。

予想所要時間:10 分

私は何か間違えたかもしれませんので、何か間違っていたら教えてください!


BBDown はコマンドラインの Bilibili ダウンローダーです。

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 ファイルがプログラムと同じディレクトリにデフォルトで作成され、プログラムのあるディレクトリに一般ユーザーが書き込み権限を持たないため、ログインセッションが保存できません)。

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のQRコードをスキャンする必要があります

その後、動画をダウンロードできます。

動画リンクは完全な URL "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 変数の値を変更する必要があります。これは後で保存する動画 URL のファイルの絶対パスです。

#!/bin/bash
# 選択したURLを含むファイルに基づいてbilibili動画をダウンロードします。

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

# 動画URLを含むファイルのパス。これだけを変更すれば大丈夫です。
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}   # 最後の行のURLをダウンロードします。もし1つのリンクだけなら、2回ダウンロードされます。

動画リンクを bblist に保存します:

vim /home/vfly2/bblist

一行に一つのリンクを記入します。

BV1Ee411u7hm
BV1p34y1G79Q

スクリプトを実行します(デフォルトでは現在のディレクトリにダウンロードされます)。

bash -ex  ./bbdl.sh

これで、ローカルコンピュータにすべてのリンクを保存し、サーバーや NAS 上でスクリプトを使って一括ダウンロードすることが非常に便利になります。

ネットノートとの組み合わせ#

コマンドラインツールの欠点は、使用に一定のハードルがあり、日常的な断片的な使用に不便なことです。つまり、毎回 1、2 本の動画をダウンロードするだけでも、SSH でファイルを編集してスクリプトを実行する必要があり、少し面倒です。

このブログには、ネットノートについての紹介記事があります:私が 2 年間使用しているミニマリストウェブノート - 承飛之咎 (vfly2.com)。それはデータをファイルとして保存する方法です。

それなら、ネットノートを通じてリンクを随時保存し、スクリプト内の BBLIST 変数をそのファイルに変更することで、一定の時間ごとに自動的にスクリプトを実行して動画をダウンロードでき、操作を省くことができます。(実際には AhFei は curl を利用して内容をローカルに取得し、ネットノートを自分のマシンにデプロイするのではありません)

ただし、これではリアルタイム性があまり高くありません。AhFei はダウンロードディレクトリを Emby のメディアライブラリに変更し、Emby で視聴しています。こうすることで、高品質の動画が直接保存され、視聴後に不要なものを削除し、動画が削除される心配もなく、コレクションする動画を個別にダウンロードする必要もありません。


上記のスクリプトフローに似たもの:

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

BBLIST の他に、WEBLIST という変数を追加しました。その値はネットノートの URL で、ここでは AhFei が構築したデモを使用します:https://forward.vfly.app/bblist。リンクをここにコピーし、一行に一つずつ記入します。

読者の皆さんは、この公開インスタンスを直接使用するか、自分で構築できます:私が 2 年間使用しているミニマリストウェブノート - 承飛之咎 (vfly2.com)

#!/bin/bash
# URLを含むファイルに基づいてbilibili動画をダウンロードします。

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

# 動画URLを含むファイルのパス
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}   # 最後の行のURLをダウンロードします。もし1つのリンクだけなら、2回ダウンロードされます。
# ウェブノートに完了の印を送信します。
echo "\nabove have done, but may skip" >> $BBLIST
curl -k --data-urlencode "text@${BBLIST}" $WEBLIST

これで、毎回 SSH で以下のコマンドを実行するだけで済み、ファイルを編集してリンクをコピーする必要がなくなります。

bash -ex ./bbdl.sh

最後に、私が Bilibili をどのように見ているかを共有します。

刷りすぎを防ぐために、私のスマートフォンには Bilibili アプリがなく、コンピュータでウェブを通じて見ています。毎回、フォローしている UP の動的な内容だけを見ています。しかし、これでも刷りすぎのリスクがありますが、この時は主にホームページなどが注意を妨げます。

そこで、私は RSSHub を使って個人の動的な RSS を生成し、RSS リーダーで更新を発見し、直接動画ページにジャンプして、リンクをネットノートに保存します。4 時間ごとに自動的にダウンロードし、その後 Emby で視聴できます。特にスマートフォンで Emby クライアントを使って見ると、商業プラットフォームのさまざまな広告や手段によって注意が散漫になるのを避けつつ、情報の受け取りの独立性と能動性を保つことができます。(この習慣があれば、無意識のうちに意識を育て、「免疫力」を高めることができます)


過去に使用したユーザーインターフェースを持つ Bilibili ダウンロードクライアント: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に参加し、記事の手順で遭遇した問題について話し合いましょう。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。