EPGStationで録画、plexmediaserverで視聴している人へ送るscript


<2023年9月15日>
新たに、エンコード終了時に起動するjavascriptを作成しました。
以下提供するjavascriptをお使いください。

この記事で提供するjavascriptは使わないでください。 TSファイルが自動的に削除できない、EPGStationに録画の履歴が残らないなどの副作用があります。

plexmediaserverは、録画した映画、ドラマ、アニメの視聴に便利な環境を提供してくれます。また、音楽も自己所有のライブラリを管理・再生するために便利な環境を提供してくれます。

今回公開するscriptはJavaScriptで書かれ、録画されたTSファイルをmp4に変換する際に使われます。

提供するscriptの目的は、EPGStationで録画されmp4に変換された、映画・ドラマ・アニメのファイル名を修正することで、plexmediaserverで最適化された表示ができるようになります。具体的に言えば、映画・ドラマ・アニメの情報(あらすじ、キャスト、製作年、話数など)とリンクして表示ができます。

ただし、一つ重大な欠点があります。
その欠点とは、名前を変更したmp4ファイルはEPGStationの管理下からはずれ、EPGStationから見えなくなることです。

plexmediaserverだけでなく、EPGStationも併用して視聴している人は、このscriptを利用できません。
このscriptは、plexmediaserverで映画・ドラマ・アニメを視聴している人のためにあります。

映画のファイル名

plexmediaserverは、ファイル名で映画データベースと自動マッチングして、映画の様々な情報をリンクして表示してくれます。
映画のポスター一覧で表示が可能で、各映画の詳細表示もあります。

自動的に映画をマッチングするためには、ファイル名が正確な映画タイトルで始まる必要があります。

今回作成したscriptでは、ファイル名から余計な文字を除き、映画タイトルだけをファイル名にすることが可能です。

ドラマ・アニメのファイル名

plexmediaserverは、ドラマ・アニメデータベースと自動マッチングして、ドラマ・アニメの様々な情報をリンクしてくれます。

ドラマ・アニメの一覧表示が可能で、各ドラマ・アニメの詳細表示もあります。

自動的にドラマやアニメをマッチングするためには、ファイル名にseason-based notationを埋め込む必要があります。「sXXeXX」の表示形式で、シーズンとエピソードを指定します。

例えば、シーズン1でエピソード5とすれば、「S01E05」あるいは「s1e5」などの表記になります。この表記をファイル名に埋め込めば、認識できます。ドラマやアニメのタイトルは、フォルダ名で認識します。ルールを作成した時に、トランスコードしたmp4の保存先のフォルダ名をドラマ・アニメのタイトルに設定してください。

今回作成したscriptでは、「第1話」「#3」「(5)」などの文字列を検出して、表記を追記します。

また、新たなシーズンやエピソードを表す表記が出てきた場合は、scriptに簡単に追加することが可能です。

提供するscript

今回提供するscriptは、Dockerコンテナ版docker-mirakurun-epgstationをインストールした状態で使います。
docker-mirakurun-epgstation配下のepgstation/configを開きます。
enc.jsをコピーしてenc-acd.jsと名前を付けてください。(acdは、AnimeCinemaDramaの略です。)
enc-acd.jsを開いて編集します。

const spawn = require('child_process').spawn;
const execFile = require('child_process').execFile;
const ffmpeg = process.env.FFMPEG;
const ffprobe = process.env.FFPROBE;

const input = process.env.INPUT;
//const output = process.env.OUTPUT;
const isDualMono = parseInt(process.env.AUDIOCOMPONENTTYPE, 10) == 2;
//const args = ['-y'];
const args = ['-ss','5','-y'];

「const output =」の行をコメントアウトします。
「const args = [‘-y’];」を「const args = [‘-ss’,’5′,’-y’];」に変更します。

次に、以下のコードを先程の修正の後に追加します。

const media = process.argv[2];
const specifiedseason = process.argv[3];
const tempoutput = process.env.OUTPUT;
var output = tempoutput;
if (media == 'animedrama') {
	output = addnotation(tempoutput, specifiedseason);
	} else if (media == 'cinema') {
	output = getcinematitle(tempoutput);
	};

//映画タイトル抽出関数
function getcinematitle(title)  {
let cdata = [
    [/シネマ「(.+)」/, /シネマ「(.+)\.mp4/],
    [/午後エンタ 午後ロード「(.+)」/, /午後エンタ 午後ロード「(.+)\.mp4/],
    [/金曜ロードショー「(.+)」/, /金曜ロードショー「(.+)\.mp4/],
    [/サタ☆シネ「(.+)」/, /サタ☆シネ「(.+)\.mp4/],
    [/シネマクラッシュ『(.+)」/, /シネマクラッシュ『(.+)\.mp4/],
    [/土曜洋画劇場 「(.+)」/, /土曜洋画劇場 「(.+)\.mp4/],
    [/日曜ロードショー 映画「(.+)」/, /日曜ロードショー 映画「(.+)\.mp4/],
    [/日曜アニメ劇場 「(.+)」/, /日曜アニメ劇場 「(.+)\.mp4/],
    [/よる8銀座シネマ (.+)\.mp4/, /よる8銀座シネマ (.+)\.mp4/],
    [/日曜ゴールデンシアター (.+)\.mp4/, /日曜ゴールデンシアター (.+)\.mp4/]
];
    for (let i of cdata) {
        if (i[0].test(title)) {
            let name = title.match(i[0]);
            title = title.replace(i[1], name[1]);
            title = title + '.mp4';
            break;
        };
    };
    return title;
};

//シーズンエピソード追加関数

function addnotation(title, season) {
    if (season == null) {
	season = '1';
	};
    // ノーテーションを調べる
    let nexp = /s(\d{1,2})e(\d{1,3})/;
    if (nexp.test(title)) {
    return title;
    };
    // シーズンを調べる
    let sdata = [
        /Season(\d{1,2})/,
        /season (\d{1,2})/,
        /シーズン(\d{1,2})/
    ];
    for (let i of sdata) {
        if (i.test(title)){
            let smatch = title.match(i);
            season = smatch[1];
            break;
        };
    };
    // エピソードを調べる
    let edata = [
        /第(\d{1,3})話/,
        /#(\d{1,3})/,
        /\((\d{1,3})\)/];
    //シーズン・エピソードを追記する
    for (let i of edata) {
        if (i.test(title)){
            title = title.replace(i, '$&s' + season + 'e$1');
            break;
        };
    };
    return title;
};

これでscriptは完成です。
次に、同じディレクトリ内にあるconfig.ymlを変更します。

encode:
    - name: H.264
      cmd: '%NODE% %ROOT%/config/enc.js'
      suffix: .mp4
      rate: 4.0
    - name: H.264-animedrama
      cmd: '%NODE% %ROOT%/config/enc-acd.js animedrama'
      suffix: .mp4
      rate: 4.0
    - name: H.264-cinema
      cmd: '%NODE% %ROOT%/config/enc-acd.js cinema'
      suffix: .mp4
      rate: 4.0
    - name: H.264-animedrama season2
      cmd: '%NODE% %ROOT%/config/enc-acd.js animedrama 2'
      suffix: .mp4
      rate: 4.0

「H.264-animedrama」は、アニメ・ドラマで使います。
「H.264-cinema」は、映画で使います。
「H.264-animedrama season2」は、シーズンの表記がない場合のシーズン2で使います。
その他、シーズン表記がなくシーズン2ではない場合、数字を変更することもできます。


<2023年9月15日>
新たに、エンコード終了時に起動するjavascriptを作成しました。
以下提供するjavascriptをお使いください。

関連記事

コメントを残す

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

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