はじめに
子供の動画を撮ってパソコンに取り込んだまま眠っている動画、ありませんか?
毎度毎度パソコンに取り込み編集して、BD-R
やDVD-R
に焼くのも地味に手間が掛かるし・・・。
そこで、ハンディカムで撮影したホームビデオ(4K動画)を気軽にストリーミング再生する環境を作ってみました。
環境構築
Raspberry Pi 4B
とPlex Media Server
のセットアップ
基本的なセットアップは以下の記事を参考にしました。
Raspberry pi
で Plex 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
なので、垂直解像度だけ気にしていれば良い感じです。
$ ffmpeg -i <4K動画のファイル名> -vf scale=-1:1080 <FullHD動画のファイル名>
ちなみにHDの場合はscale=-1:720
を指定します。
$ 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 4B
のPlex Media Server
では性能的にもFullHDぐらいがちょうどいいのかもしれませんね。
※複数の機器から同時アクセスするとサーバ側の負荷が上がるので、利用シーンに応じて動画のサイズを調整するのが良いです
途中で気付いた課題とその解決方法
一定時間で動画ファイルが自動分割される
動作確認をしていた動画は撮影時間が短かったため気付かなかったのですが、最近撮影した息子のお遊戯会の動画は20分
ほどで、動画ファイルがいくつかに分割されていました。
/(^o^)\ナンテコッタイ
解決方法
ffmpeg
で動画の結合もできるとのことで、以下の通り結合します。
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
内にファイルパスが記載されていると以下のエラーとなります。
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
オプションを付けてて結合コマンドを実行する
-
結合対象ファイルのフルパスを記載した
おわりに
一旦ここまででホームビデオのストリーミング環境が構築できました。
また、分割されてしまった長時間の動画も結合により閲覧しやすくなりました。
現状以下の課題があるため、今後改善していこうと思います。
- 今回作った環境は
32GB
のMicroSDカードのみの環境であるため、今後は外付けHDD
なりNAS
経由での閲覧などストレージ周りを増強する必要がある- 取り急ぎ必要なのは
外付けHDD
で、今後のことを考えるとNAS
を買っても良さそう
- 取り急ぎ必要なのは
-
Samba
サーバへ動画ファイルをアップロードした後、FullHDへ変換・結合をする処理を自動化したい- できれば人が触らない夜間に自動で実行できると嬉しい
-
bash
スクリプト書くのが手軽ではあるものの、ffmpeg-python
の利用も考慮しておく
-
Raspberry Pi 4B
のケースに付いているファンが思ったよりうるさい- 以下のケースを使用したところ、デスクの上に置いていると思いの外ファンがうるさい
- 記事の清書中、
強い風モード(5V)
から静音モード(3.3V)
に切り替えたら少し静かになった