はじめに
子供の動画を撮ってパソコンに取り込んだまま眠っている動画、ありませんか?
毎度毎度パソコンに取り込み編集して、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)に切り替えたら少し静かになった