見出し画像

テレビ録画メディアサーバー構築入門(第15回)

違法にアップロードされたものと知りながらダウンロードする行為は私的利用であっても著作権法で罰せられます。


第13回にて、新しいライブラリとして「映画」をメディアサーバーに追加しました。今回はテレビ録画とは関係ありませんが、メディアサーバーつながりということで、「ダウンロード」を新ライブラリとして追加します。文字通り、ネット上に公開されている動画をダウンロードして、メディアコレクションに加えます。ダウンロード視聴の最大のメリットとして、視聴中に挿入されるCM宣伝から解放されます。

ここでは、ダウンロードした動画を、他のメディアコンテンツと同じように視聴管理するのが目的です。多種多様なコンテンツを、一箇所で、統一的に、自分なりの流儀で管理する便利さは、個人サーバーならではのメリットです。

metubeインストール

コンテンツは HOME ~/ 直下の downloadsディレクトリに保存することにします。ダウンロード支援ツール metube をインストールする。

cd
mkdir -p downloads
sudo docker run -d -p 8081:8081 -v ./downloads:/downloads --restart=unless-stopped ghcr.io/alexta69/metube

管理画面はポート8081から:http://100.x.y.z:8081

使い方は 「Enter video or playlist URL」に動画またはプレイリストのURLをコピペ入力して「Download」クリック。

スマホからの場合、動画のURLは「共有」からコピペ取得できるので、むしろ簡単にダウンロード登録できます(ダウンロードはバックグラウンドで進行)。

Jellyfin再起動

cd
sudo docker stop jellyfin
sudo docker rm jellyfin
sudo docker rmi jellyfin/jellyfin
sudo docker run -d --name jellyfin --user 1000:1000 --net=host --volume ./jellyfin/config:/config --volume ./jellyfin/cache:/cache  --mount type=bind,source=./media,target=/media  --mount type=bind,source=./movies,target=/movies --mount type=bind,source=./downloads,target=/downloads --restart=unless-stopped --volume /usr/share/fonts:/usr/share/fonts --volume /usr/share/fontconfig:/usr/share/fontconfig jellyfin/jellyfin:10.10.7

(2025/11/7追記: 末尾にバージョン10.10.7を追加。Jellyfinは10/19に最新安定版10.11.0がリリースされた。大型アップデートのため、最新版に更新すると、バックアップなしでは、旧版には戻せない(新規インストールが必要となる)。基本機能が安定するまでは、10.10.7の使用を推奨します。)

「ダウンロード」ライブラリを設定

jellyfinサーバーが起動したら、クライエント(http://100.x.y.z:8096)から「ダウンロード」ライブラリを新規設定する。

「ダッシュボード」の「ライブラリ」から「ライブラリ」を選択し、「メディアライブラリーを追加」

コンテンツタイプ:TV番組と映画を混ぜる
表示名:ダウンロード
フォルダ:「+」より /downloads を選択

メタデータはすべてオフにします。第7回第13回で説明のとおり、外部データベースからのメタデーター取得は失敗する可能性が大きいためです。

イメージを取得は「Screen Grabber」「Embedded Image Extractor」のみチェック。



ブラウザ拡張機能

chromeやfirefox等のブラウザでは、拡張機能(プラグイン)が便利です。プラグインの設定にて上記url (http://100.x.y.z:8081)を登録すれば、動画サイトにアクセスした状態で、ツールバーの"Send to MeTube"アイコンをクリックするだけでダウンロード登録されます(ダウンロードはバックグラウンドで進行)。



注意点

metubeダウンローダの本体はyt-dlpで、metubeはインターフェースに過ぎません。バックエンドのyt-dlpはアプデ頻度が高い。アップデートは

cd
sudo docker stop metube
sudo docker rm -f metube
sudo docker rmi -f ghcr.io/alexta69/metube
sudo docker pull ghcr.io/alexta69/metube
sudo docker run --name metube -d -p 8081:8081 -v ./downloads:/downloads --restart=unless-stopped ghcr.io/alexta69/metube

場合によっては、コンテナに入って、最新版に手動アプデ:

sudo docker exec -ti metube sh
python3 -m pip install -U --pre "yt-dlp[default]"
yt-dlp --version

ここでcd /downloadで保存フォルダに移動して、手動 yt-dlpでエラーが出ていないかをみるのが、うまくいかないときに確認すべきポイントになります。配信サイト側の仕様変更が、ダウンローダの不具合の最大要因です。

配信元によってはダウンロードを規約で禁じています。わたしは経験ありませんが、サーバーに過度に負荷をかける行為(短時間に大量のダウンロード)は規制対象になるはずです。yt-dlpについては、note.com内に限っても、多くの記事があります。



追記:「ダウンロード」ライブラリを使わない

録画の時代は終わった?

近年、コンテンツの視聴形態は、配信プラットフォームを通じて提供されるものが主流となってきています。

もともとは、録画に失敗したような、緊急避難的な場合に、無料動画配信TVerを利用してきました。が、ちょくちょく使っていると、ライブラリの切り替えが面倒に感じてきました。

一括して「番組」ライブラリで視聴するには、手動でファイルを(downloadsからmediaに) 移動すればよいのですが、これも面倒なので、フォルダを監視して、mp4だけ自動で移動することにします。以下、 $HOME/work/mvjf.sh は第7回参照。

takya@fearow22:~$ crontab -l |grep move_mp4
*/5 * * * * $HOME/move_mp4.sh >>  $HOME/work/encode.log 2>&1
takya@fearow22:~$ cat move_mp4.sh
#!/usr/bin/bash

# ソースディレクトリとターゲットディレクトリ
source_dir="$HOME/downloads"
target_dir="$HOME/media/"

# MP4ファイルを検索して移動
find "$source_dir" -maxdepth 1 -type f -name "*.mp4" | while read -r file; do
    # ファイルが使用中かどうかをチェック
    if lsof "$file" > /dev/null 2>&1; then
        echo "スキップ: '$file' は使用中です"
    else
        $HOME/work/mvjf.sh  "$file" "$target_dir"
	    echo "moved from $source_dir"
    fi
done

「番組」にまとめることで、データベース連携(第12回)が使えるようになります。ただし、欠点として、ダウンロードしたものがすべて「番組」に放り込まれます。視聴対象が投稿動画メインならば「番組」にまとめるメリットは薄い。



いいなと思ったら応援しよう!

ピックアップされています

全自動TV録画 視聴環境構築

  • 26本

コメント

コメントするには、 ログイン または 会員登録 をお願いします。
テレビ録画メディアサーバー構築入門(第15回)|takya
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1