3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Raspberry Pi 4BとPlex Media Serverでホームビデオのストリーミング環境を作る

Last updated at Posted at 2020-12-14

はじめに

子供の動画を撮ってパソコンに取り込んだまま眠っている動画、ありませんか?
毎度毎度パソコンに取り込み編集して、BD-RDVD-Rに焼くのも地味に手間が掛かるし・・・。
そこで、ハンディカムで撮影したホームビデオ(4K動画)を気軽にストリーミング再生する環境を作ってみました。

環境構築

Raspberry Pi 4BPlex Media Serverのセットアップ

基本的なセットアップは以下の記事を参考にしました。

Raspberry piPlex Media Server を構築する方法
https://qiita.com/zono_0/items/208d4cdbd115f109e7f5

Sambaサーバのセットアップ

動画ファイルをバックアップしているPCがWindowsであるため、Sambaサーバをセットアップします。
以下を参考にしました。

リモートワークで使えるRaspberry Piで作るファイル共有サーバ
https://qiita.com/Brutus/items/d3b3caee982852587b77

ffmpegのインストール

扱うのが4K動画であるため、もしかしたら解像度を落とす必要があるかもしれません。
そのため、予めffmpegをインストールしておきます。

$ sudo apt-get install ffmpeg

スマホからメディアサーバへの接続

以下のアプリをダウンロードして、**サインイン・サブスクリプション契約(月額520円)**することでメディアサーバへの接続が可能になります。
外出先からメディアサーバへアクセスしたい方やタブレットでメディアサーバへアクセスしたい方は設定しておくと良いでしょう。

https://play.google.com/store/apps/details?id=com.plexapp.android

※サブスクリプション契約無しだとアプリからメディアサーバが表示されませんでした

Fire TV Stickからメディアサーバへの接続

以下の記事を参考に、Fire TV Stickからメディアサーバへの接続も可能となります。
これでリビングからストリーミング再生できる様になりました。

Fire TV Plexアプリのインストールと使用
https://dementium2.com/page-10/fire-tv-plex-2/

動作確認

Plexのアカウントを作成していれば、以下のURLで動作確認が行なえます。
※IPアドレス・ポート直打ちでもいいですが、Chrome保護されていない通信と表示されてしまいます
https://app.plex.tv/desktop#

HDの動画を再生する

HDの動画再生は特に問題なくスムーズに再生されました。

4Kの動画を再生する

普段撮影に使っているハンディカムでは4K画質で撮影を行っているため、これがそのまま見られるなら嬉しかったのですが・・・。
カクつくし、やはり表示・動作が遅いです。
また、**Raspberry Pi 4BのCPU使用率が100%**に張り付きました。

FullHDの動画を再生する

4K動画の画質を落としてFullHDにしてみたらどうかということで、FullHDに変換して再生してみました。

ffmpegで4K動画をFullHD動画に変換する

以下のコマンド1行で変換できるようです。
scale=-1:1080を指定することで垂直解像度をFullHDと同じ1080にしています。
アスペクト比16:9なので、垂直解像度だけ気にしていれば良い感じです。

サンプル(4K→FullHD)
$ ffmpeg -i <4K動画のファイル名> -vf scale=-1:1080 <FullHD動画のファイル名>

ちなみにHDの場合はscale=-1:720を指定します。

サンプル(4K→HD)
$ ffmpeg -i <4K動画のファイル名> -vf scale=-1:720 <HD動画のファイル名>

試しに、以下の4K動画を変換してみます。
※変換にかかる時間を計測するために前後にdateコマンドを追加しています

実際に変換したときのコマンド
$ ls -lh 2019-10-05/2019-10-05_095831.mp4
-rwxr-xr-x 1 plex plex 719M 10月  5  2019 2019-10-05/2019-10-05_095831.mp4

$ date && sudo ffmpeg -i 2019-10-05/2019-10-05_095831.mp4 -vf scale=-1:1080 2019-10-05/2019-10-05_095831_FHD.mp4 && date
2020年 12月 12日 土曜日 10:44:09 JST
<snip>
2020年 12月 12日 土曜日 10:58:07 JST

$ ls -lh 2019-10-05/2019-10-05_095831_FHD.mp4
-rw-r-xr-x 1 plex plex  91M 12月 12 10:58 2019-10-05/2019-10-05_095831_FHD.mp4

719MBの4K動画が14分91MBのFullHD動画になりました。
低消費電力・低コストがウリのRaspberry Pi 4BのCPU性能にそこまで期待してませんでしたが、意外と早いかもしれません。
Samba経由でアップロードした4K動画を夜間に変換したりするなら十分な処理速度だと思いました。

実際にFullHD動画を再生してみる

変換後のFullHD動画を再生してみましたが、特に問題なく再生することができました。
Raspberry Pi 4BPlex Media Serverでは性能的にもFullHDぐらいがちょうどいいのかもしれませんね。
※複数の機器から同時アクセスするとサーバ側の負荷が上がるので、利用シーンに応じて動画のサイズを調整するのが良いです

途中で気付いた課題とその解決方法

一定時間で動画ファイルが自動分割される

動作確認をしていた動画は撮影時間が短かったため気付かなかったのですが、最近撮影した息子のお遊戯会の動画は20分ほどで、動画ファイルがいくつかに分割されていました。

/(^o^)\ナンテコッタイ

解決方法

ffmpegで動画の結合もできるとのことで、以下の通り結合します。

concat.txt(※ファイル名は任意)
file '2020-12-12_095435.mp4'
file '2020-12-12_100353.mp4'
file '2020-12-12_101311.mp4'
結合コマンド
# 作業ディレクトリへ移動する
$ cd /var/lib/plexmediaserver/Library/HomeVideo/2020-12-12/

# 動画ファイルを結合する
$ ffmpeg -f concat -i concat.txt -c copy 2020-12-12_095435_concat.mp4

ffmpegで動画ファイルを結合する際の注意

concat.txt内にファイルパスが記載されていると以下のエラーとなります。

Unsafeと言われるconcat.txtの書き方
file '/var/lib/plexmediaserver/Library/HomeVideo/2020-12-12/2020-12-12_095435.mp4'
file '/var/lib/plexmediaserver/Library/HomeVideo/2020-12-12/2020-12-12_100353.mp4'
file '/var/lib/plexmediaserver/Library/HomeVideo/2020-12-12/2020-12-12_101311.mp4'
エラーメッセージ
$ ffmpeg -f concat -i concat.txt -c copy 2020-12-12_095435_FHD_concat.mp4
<snip>
[concat @ 0x20211c0] Unsafe file name '/var/lib/plexmediaserver/Library/HomeVideo/2019-10-05/2019-10-05_115434_FHD.mp4'
concat.txt: Operation not permitted

-safe 0オプションを付けるよう促している記事もありますが、用途に応じて以下2パターンで運用するのが良さそうです。
Unsafeなオプションで回避するよりは結合対象ファイルのあるディレクトリに移動するのが正攻法っぽいですね。

  • concat.txtでパス情報を渡さない場合
    • ファイル名のみ記載したconcat.txtを作る
    • 結合対象ファイルが置いてあるディレクトリに移動する
    • 結合コマンドを実行する
  • concat.txtでパス情報を渡す場合
    • 結合対象ファイルのフルパスを記載したconcat.txtを作る
    • -safe 0オプションを付けてて結合コマンドを実行する

おわりに

一旦ここまででホームビデオのストリーミング環境が構築できました。
また、分割されてしまった長時間の動画も結合により閲覧しやすくなりました。

現状以下の課題があるため、今後改善していこうと思います。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?