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点である。

  1. MP4のファイル名は、Plex Media Serverで見やすいように変換する。
    ー全角英数字を半角英数字に変換する。
    ー全角スペースを半角スペースに変換する。
    ー全角「#ー」を半角「#-」に変換する。
  2. MP4のファイルは、コンテンツのジャンルごとに別のフォルダに保存できる。
    ーコンテンツのジャンルには、以下の13種類がある。
    anime、information、news、sports、variety、documentary、drama、
    music、cinema、theater、hobby、welfare、etc
    ーデフォルトは、tempフォルダ。
  3. 一度に一つのファイルだけをトランスコードする。
    ー処理を効率的に行うため、同時に複数のトランスコードは行わない。
  4. トランスコード時のログを保存できる。
    ー圧縮速度、圧縮率を計測し、ログに残す。
  5. qsvを利用した高速トランスコードに対応することができる。

本シェルスクリプトの必要条件

本シェルスクリプトを利用するために必要な条件は、以下のとおりである。

  1. CentOS 7.4上でChinachu γが稼働していること。
  2. Chinachu γで録画ができていること。
  3. ジャンルごとにフォルダ分けを行う場合は、jqコマンドを予めインストールする。
    (jqは、JSON形式のデータを処理するコマンドである。)
  4. qsvトランスコードを行う場合は、Intel Media Server Studio 2018 R1をインストールし、ffmpeg-qsv(qsv対応ffmpeg)を予めインストールする。

本シェルスクリプトの設置方法

  1. 本シェルスクリプトをダウンロードする。
  2. chinachuディレクトリ直下に、本シェルスクリプトをコピーする。
    [cuser@centos]$ cp chinachu-transcode_180729.sh ~/chinachu
  3. 本シェルスクリプトに実行権限をつける。
    [cuser@centos]$ chmod +x ~/chinachu/chinachu-transcode_180729.sh
  4. 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
    
  5. ブラウザで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": ""
    }
    
  6. 本スクリプトでは、実行結果をログに残している。ログの保存用ディレクトリを作成する必要がある。
    [cuser@centos]$ mkdir ~/chinachu/log/mp4log
  7. 本スクリプトでは、jsonファイルを調べて値を抽出するjqコマンドを利用している。そのためjqコマンドをインストールする必要がある。
    [cuser@centos]$ sudo yum -y install epel-release
    [cuser@centos]$ sudo yum -y install jq
  8. これでインストールは完了。
    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で高速に実行される。

2018年10月04日 | Posted in 電脳:録画サーバー | タグ: , , , No Comments » 

関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください