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 で、記事の手順に関する問題を共有できます。

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