do-record.sh の編集

タイでの洪水以降、HDD価格の高騰が続いています。2TB, 3TBのHDDだと最も安かった時の3倍近い値段になっており、秋葉原のPCパーツショップだと表示が「時価」なんてお高級な寿司やのような状態になったりもしているそうです。
現地の人達の生活が元の日常に一日も早く戻る事をまずお祈りします。
しかし、それまでの間保存しているデータが増えたからといっておいそれとHDDを買い足すということが非常に難しい状況は当面続く訳です。録画サーバに保存している動画を整理したりして空き容量を稼ぐことにします。

検索してみると、相当数のサイトが出てきます。私なりに理解した事を列挙していきますと、
  • 録画したファイルの加工の手順としては
    • TSファイルの状態からワンセグデータなど余分なデータを削ぐ
    • CMなどをカットする。
    • 映像と音声に分離してそれぞれエンコード
    • 分離した音声と映像を合成する
という感じでやる事をたいていのサイトで勧めているのでこの手順で行ってみようと思う。
とりあえず、未加工のTSファイルが大小合わせて約250個、3TB弱あったのですが、ワンセグデータなどを削ぐと約600GB程度容量を節約する事ができました。
ここでふと思ったのが、録画の際にHD動画のデータだけ保存することは出来ないものだろうか?と思い調べていくと、PT2の録画用のソフト recpt1 にはSIDを指定するオプションがあり、--sidにてそれを設定すれば、録画の段階でワンセグデータ等を含まないHD動画だけを保存できるみたいです。

recpt1が結構前からsidオプションを搭載していた
http://d.hatena.ne.jp/shiwork/20110125/1295894310

上記の方はFoltiaをご使用されいているみたいなんですが、私が録画に使用しているのはEPGrecなので本家サイトを見ると
http://www.mda.or.jp/epgrec/index.php/epgrecの使い方#qba72a08

  • チャンネル設定ダイアログのサービスID欄に、そのチャンネルに設定したいサービスIDを設定し「変更」をクリックするとサービスIDの情報が更新されます。設定したサービスIDは、do-record.sh内で環境変数$SIDとして参照、利用できます。
  • モード0以外の録画モードでチャンネルのサービスIDのみ抜き出したいというような場合に使うわけですが、サービスIDって何? という方は以降の説明は無視してもらって構いません。むしろ、分からないまま設定すると正常な録画や番組表の取得に問題がでる恐れがあるので無視したほうがいいでしょう。
とのこと。小生はPerfumeのファンなのでNHKのMusic Japanを毎週録画してたりするんですが、今日はやけに画質が悪いなと思ったらSDで放送されていて、裏で野球してたりした事があり、サービスID で設定して決めうちして録画するようにすると、録画が残らない可能性もあります。
また、SIDで指定すると関西在住なので毎日放送(MBS) が録画されないらしい記述もあります。 
あと、CMカットなどの編集は手動でやっているので、TsSplitterをwineで動かしてHD映像のみ抜き出す事にしたいとおもいます。分離していないTSファイルをTsSplitterで分離する際、日本語のファイル名によってはTsSplitterが読み込まないという事もありました。なぜかアニメ たまゆらはどうしても読み込まれないという現象が発生しました。原因を調べるのにググっていたら2ちゃんねるの過去ログに
【視聴・録画】Linuxでテレビ総合4【デジタル/アナログ】
http://pc-news.ldblog.jp/archives/51721035.html
これの14番の方と同様の症状でした。
15,16,17,18番さんのご意見と、20番に書かれているスクリプトを参考にして以下の設定にdo-record.shを変更しました。


#!/bin/sh
echo "CHANNEL : $CHANNEL"
echo "DURATION: $DURATION"
echo "OUTPUT  : $OUTPUT"
echo "TUNER : $TUNER"
echo "TYPE : $TYPE"
echo "MODE : $MODE"

RECORDER=/usr/local/bin/recpt1

SPLITTER=/usr/local/bin/TsSplitter.exe
WINE=/usr/bin/wine
TMPPATH=/var/www/epgrec/video/tmp

if [ ${MODE} -eq 0 ]; then
  $RECORDER --b25 --strip $CHANNEL $DURATION ${OUTPUT} >/dev/null
elif [ ${MODE} -eq 1 ]; then
  TMPNAME=`mktemp ${TMPPATH}/tss_XXXXXXXXXX `
  $RECORDER --b25 --strip $CHANNEL $DURATION ${TMPNAME}.ts >/dev/null
  ## 録画後の処理
    ${WINE} $SPLITTER -SD2 -SD3 -1SEG -GOP ${TMPNAME}.ts 2>/dev/null
      if [ -s ${TMPNAME}_HD.ts ]; then
        mv ${TMPNAME}_HD.ts ${OUTPUT}
        mv ${TMPNAME}_HD.ts.txt ${OUTPUT}.txt
      elif [-s ${TMPNAME}_SD1.ts ]; then
        mv ${TMPNAME}_SD1.ts ${OUTPUT}
        mv ${TMPNAME}_SD1.ts.txt ${OUTPUT}.txt
      fi

      if [ -s ${OUTPUT} ]; then
        rm -f ${TMPNAME} ${TMPNAME}.ts
      else
       ## 分割に失敗し${OUTPUT}ファイルが存在しない場合は一時ファイルを保存
        mv ${TMPNAME}.ts ${OUTPUT}
      fi
fi

今の所これで上手くいっています。スクリプトの変更の他にしておかないといけないことは、
  • do-record.shはUbuntuの場合はwww-dataユーザが実行する事になるので、wineの設定ファイルフォルダ(~/.wine)をwww-dataのホームディレクトリ「/var/www/」以下に作成しておく。(作業用のユーザのものをコピーしてwww-dataユーザに所有者、書き込み権限を変更するだけで良いと思います)
  • TsSplitter.exeをwww-dataでも実行可能になるよう権限を変更しておく。
  • テストの際、www-dataの権限でdo-record.shを実行する際、「su -u www-data -H」でテストしてみる。-Hが無いと作業用ユーザのホームディレクトリの「.wine」をwineが読み込もうとして「.wine is not owned by you」とエラーが出てしまいます。su の-Hオプションはホームディレクトリも指定したユーザのものを使うというオプションです。これを知らなくてかなりハマりました(^o^;)

コメント

このブログの人気の投稿

オルテガの 「大衆の反逆」

Ultr@VNCの設定でハマる

DREMEL ルータービットのちょっとした改造