2018年版 CentOS 7.4 「Chinachu γ + Plex」用シェルスクリプト(180729)
目次
以前に公開した記事に、「CentOS7.4」と「Intel Media Server Studio 2018 R1」に対応して、改訂した。
Chinachu γ + Plex用シェルスクリプトとは
Chinachu γで録画したTSファイルを自動的にMP4ファイルにトランスコードする。
トランスコード時、Plex Media Serverでの再生に最適な変換を行う。
利用するには、Chinachuのconfig.jsonファイルに、「recordedCommand」として本シェルスクリプトを設定すると、Chinachuでの録画が終了した時に実行される。
本シェルスクリプトの機能
本シェルスクリプトを用いれば、録画したtsファイルを自動的にmp4ファイルに変換し、Plex Media Serverで再生できる。
本シェルスクリプトの主な機能は、以下の5点である。
- MP4のファイル名は、Plex Media Serverで見やすいように変換する。
ー全角英数字を半角英数字に変換する。
ー全角スペースを半角スペースに変換する。
ー全角「#ー」を半角「#-」に変換する。 - MP4のファイルは、コンテンツのジャンルごとに別のフォルダに保存できる。
ーコンテンツのジャンルには、以下の13種類がある。
anime、information、news、sports、variety、documentary、drama、
music、cinema、theater、hobby、welfare、etc
ーデフォルトは、tempフォルダ。 - 一度に一つのファイルだけをトランスコードする。
ー処理を効率的に行うため、同時に複数のトランスコードは行わない。 - トランスコード時のログを保存できる。
ー圧縮速度、圧縮率を計測し、ログに残す。 - qsvを利用した高速トランスコードに対応することができる。
本シェルスクリプトの必要条件
本シェルスクリプトを利用するために必要な条件は、以下のとおりである。
- CentOS 7.4上でChinachu γが稼働していること。
- Chinachu γで録画ができていること。
- ジャンルごとにフォルダ分けを行う場合は、jqコマンドを予めインストールする。
(jqは、JSON形式のデータを処理するコマンドである。) - qsvトランスコードを行う場合は、Intel Media Server Studio 2018 R1をインストールし、ffmpeg-qsv(qsv対応ffmpeg)を予めインストールする。
本シェルスクリプトの設置方法
- 本シェルスクリプトをダウンロードする。
chinachu-transcode_180729.sh
1 ファイル 3.97 KB - chinachuディレクトリ直下に、本シェルスクリプトをコピーする。
[cuser@centos]$ cp chinachu-transcode_180729.sh ~/chinachu
- 本シェルスクリプトに実行権限をつける。
[cuser@centos]$ chmod +x ~/chinachu/chinachu-transcode_180729.sh
- chinachuディレクトリ直下に、以下の2つのリンクを作成する。tsファイル保存用リンク tv
mp4ファイル保存用リンク temp例えば、以下のディスクを利用する場合、
tsファイル保存用のディスクが/mnt/media
mp4ファイル保存用のディスクが/mnt/data保存用フォルダをまず作成する。
[cuser@centos]$sudo mkdir /mnt/media/tv [cuser@centos]$sudo mkdir /mnt/data/temp
次にアクセス権を設定する。
[cuser@centos]$sudo chmod -R 777 /mnt/media [cuser@centos]$sudo chown -R nobody:nobody /mnt/media [cuser@centos]$sudo chmod -R 777 /mnt/data [cuser@centos]$sudo chown -R nobody:nobody /mnt/data
次に以下のコマンドを実施して、リンクを作成する。
[cuser@centos]$ ln -s /mnt/media/tv ~/chinachu/tv [cuser@centos]$ ln -s /mnt/data/temp ~/chinachu/temp
- ブラウザでChinachuのホーム画面を表示し、右上の「設定」ボタンをクリックする。
設定ファイルconfig.jsonが表示される。
最初の部分は以下の通りである。{ "uid": null, "gid": "video", "mirakurunPath": "http+unix://%2Fvar%2Frun%2Fmirakurun.sock/", "recordedDir" : "./recorded/", "vaapiEnabled": false, "vaapiDevice": "/dev/dri/renderD128",
例えば、ユーザー名がcuser、TSファイルの保存フォルダがtvだとすると、
上記を以下のように書き換える。{ "uid": "cuser", "gid": "video", "mirakurunPath": "http+unix://%2Fvar%2Frun%2Fmirakurun.sock/", "recordedDir" : "./tv/", "vaapiEnabled": false, "vaapiDevice": "/dev/dri/renderD128",
最後の部分は以下のとおりである。
"wuiDLNAServerEnabled": false, "wuiMdnsAdvertisement": true, "recordedFormat": "[<date:yymmdd-HHMM>][<type><channel>][<channel-name>]<title>.m2ts", "storageLowSpaceThresholdMB": 3000, "storageLowSpaceAction": "remove", "storageLowSpaceNotifyTo": null, "storageLowSpaceCommand": "" }
上記を以下のように書き換える。
“recordedFormat”:の内容を書き換え、
“recordedCommand”:の行を追加する。"wuiDLNAServerEnabled": false, "wuiMdnsAdvertisement": true, "recordedFormat": "<fulltitle>[<date:yymmdd-HHMM>][<channel>].ts", "recordedCommand": "./chinachu-transcode_180729.sh", "storageLowSpaceThresholdMB": 3000, "storageLowSpaceAction": "remove", "storageLowSpaceNotifyTo": null, "storageLowSpaceCommand": "" }
- 本スクリプトでは、実行結果をログに残している。ログの保存用ディレクトリを作成する必要がある。
[cuser@centos]$ mkdir ~/chinachu/log/mp4log
- 本スクリプトでは、jsonファイルを調べて値を抽出するjqコマンドを利用している。そのためjqコマンドをインストールする必要がある。
[cuser@centos]$ sudo yum -y install epel-release [cuser@centos]$ sudo yum -y install jq
- これでインストールは完了。
chinachuを再起動して、変更した設定を反映させる。[cuser@centos]$ cd ~/chinachu [cuser@centos]$ sudo pm2 restart processes.json
本シェルスクリプトの利用方法
(1)本スクリプトを設置することにより、~/chinachu/tempのリンク先のディレクトリにトランスコードされたmp4ファイルが保存される。
(2)plex media serverでこのディレクトリを共有に設定することにより、自宅、出先で、ブラウザやplex専用アプリで、録画ファイルの再生が可能である。
(3)トランスコードの状況は、~/chinachu/log/mp4logの中にある録画ごとのログファイルで確認できる。
応用例:ジャンルごとにmp4の保存フォルダを分ける
本スクリプトの一部を変更することにより、ジャンルごとに別のフォルダに保存することが可能である。
ここでは、cinemaというジャンルのmp4ファイルをcinemaというフォルダに保存する例を説明する。
(1)cinemaというフォルダを作成する。
[cuser@centos]$ sudo mkdir /mnt/data/cinema
(2)上記作成したフォルダとchinachuフォルダ直下にリンクを作成する。
[cuser@centos]$ ln -s /mnt/data/cinema ~/chinachu/cinema
(3)本スクリプトの一部を変更する。
以下は、本スクリプトの一部である。
#カテゴリーでフォルダ分けする。 #<jq>をインストールする。sudo yum -y install jq outDir="./temp/" category=`echo "$2" | jq -r '.category'` case $category in anime) outDir="./temp/" ;; information) outDir="./temp/" ;; news) outDir="./temp/" ;; sports) outDir="./temp/" ;; variety) outDir="./temp/" ;; documentary) outDir="./temp/" ;; drama) outDir="./temp/" ;; music) outDir="./temp/" ;; cinema) outDir="./temp/" ;; theater) outDir="./temp/" ;; hobby) outDir="./temp/" ;; welfare) outDir="./temp/" ;; etc) outDir="./temp/" ;; *) outDir="./temp/" ;; esac
上記の部分を以下のように書き換える。
#カテゴリーでフォルダ分けする。
#<jq>をインストールする。sudo yum -y install jq
outDir="./temp/"
category=`echo "$2" | jq -r '.category'`
case $category in
anime) outDir="./temp/" ;;
information) outDir="./temp/" ;;
news) outDir="./temp/" ;;
sports) outDir="./temp/" ;;
variety) outDir="./temp/" ;;
documentary) outDir="./temp/" ;;
drama) outDir="./temp/" ;;
music) outDir="./temp/" ;;
cinema) outDir="./cinema/" ;;
theater) outDir="./temp/" ;;
hobby) outDir="./temp/" ;;
welfare) outDir="./temp/" ;;
etc) outDir="./temp/" ;;
*) outDir="./temp/" ;;
esac
(4)以上で、設定完了である。映画は、/mnt/data/cinemaというフォルダに保存される。
応用例:qsvエンコードを使う。
本スクリプトでは、chinachuにインストールされているffmpegを使って、libx264によるトランスコードを行っている。
このトランスコードを7倍速にするために、qsvを使うことを勧めている。
qsvに対応したffmpegが作成できた人は、以下の手順で利用できる。
(1)qsvに対応したffmpegの名前を変える。
[cuser@centos]$ mv ffmpeg ffmpeg-qsv
(2)名前を変更したffmpeg-qsvをコピーする。
[cuser@centos]$ cp ffmpeg-qsv ~/chinachu/usr/bin
(3)本スクリプトの一部を変更する。
以下は、本スクリプトの一部である。
#他にトランスコードしている場合は待つ transcode_command="ffmpeg" #qsvを利用する場合は、以下を有効にする #transcode_command="ffmpeg-qsv" until [ ! `pidof -s $transcode_command` ] do sleep 60 done # #エンコード設定 input=" -y -i " videoCodec=" -vcodec libx264" #qsvを利用する場合は以下を有効にする #videoCodec=" -vcodec h264_qsv" # videoOpt=" -b:v 4M -maxrate 8M" #qsvを利用する場合は以下を有効にする #videoOpt=" -b:v 4M -maxrate 8M -init_hw_device qsv:hw" audioCodec=" -acodec aac" audioOpt="" #audioOpt=" -strict -2 -ac 2 -ar 48000 -ab 128k" advancedOpt=" -loglevel error " #advancedOpt=" -loglevel info "
上記の一部を以下のように書き換える。
#他にトランスコードしている場合は待つ #transcode_command="ffmpeg" #qsvを利用する場合は、以下を有効にする transcode_command="ffmpeg-qsv" until [ ! `pidof -s $transcode_command` ] do sleep 60 done # #エンコード設定 input=" -y -i " #videoCodec=" -vcodec libx264" #qsvを利用する場合は以下を有効にする videoCodec=" -vcodec h264_qsv" # #videoOpt=" -b:v 4M -maxrate 8M" #qsvを利用する場合は以下を有効にする videoOpt=" -b:v 4M -maxrate 8M -init_hw_device qsv:hw" audioCodec=" -acodec aac" audioOpt="" #audioOpt=" -strict -2 -ac 2 -ar 48000 -ab 128k" advancedOpt=" -loglevel error " #advancedOpt=" -loglevel info "
(4)以上で設定完了である。トランスコードはqsvで高速に実行される。
コメントを残す