epgrec の do-record.sh をすこしいじってみた
[2011-08-26 追記]split が失敗したときは、full ts file そのものへ置き換えるように変更
地デジ録画サーバ機で使っている Vine Linux を 5.1 から 5.2 へ更新するついでに、epgrec http://www.mda.or.jp/epgrec/ の設定を色々と見なおしていました。
いくつかの放送局のいくつかの番組の ts ファイルに対して、tssplitter_lite http://hp.vector.co.jp/authors/VA038175/ をかけると、うまくスプリットできていないファイルがたまにできたりすることがあった。深入りする気はさらさらないので、ts ファイルの Program ID の取得に失敗する場合などは、tssplitter_lite をかけないようにしました。
また、今までは Program ID をチャンネルに対して決め打ちしていましたが、今回から tstools http://code.google.com/p/tstools/ の tsinfo を使って、毎回取得するようにしてみました。何かログから分かるかもしれないし。
せっかくなので、今回の改変を加えた do-record.sh を晒しておきます。あまり参考にならないかもしれませんが (^^;;
#!/bin/bash echo "CHANNEL : $CHANNEL" echo "DURATION: $DURATION" echo "OUTPUT : $OUTPUT" echo "TUNER : $TUNER" echo "TYPE : $TYPE" echo "MODE : $MODE" RECORDER=/usr/local/bin/recpt1 B25=/usr/local/bin/b25_bcas SPLITTER=/usr/local/bin/tssplitter_lite VIDEODIR=/export/www/html/epgrec/video ## split-ts [channel] [input ts file] [output ts file] split-ts(){ local channel=$1 local input_tsfile=$2 local output_tsfile=$3 local progid= progid=$(get-progid $input_tsfile) [ -z "$progid" ] && \ move-tempts2origts $input_tsfile $output_tsfile && \ return 1 case ${channel} in 24|28) move-tempts2origts $input_tsfile $output_tsfile ;; *) $SPLITTER $input_tsfile $output_tsfile $progid || \ move-tempts2origts $input_tsfile $output_tsfile ;; esac return 0 } ## move-tempts2origts [temp tsfile] [tsfile] move-tempts2origts(){ local input_tsfile=$1 local output_tsfile=$2 (cd $VIDEODIR mv $input_tsfile $output_tsfile ) } ## get-progid [tsfile] get-progid(){ local tsfile=$1 local id= id=$(tsinfo $tsfile | grep "Program [0-9]\+," | sed s/"Program"// | sed s/,.*// | sed -e "s/ //g") ## when get id, return it [ ! -z "$id" ] && echo $id && return 0 ## when failed to get program id, return default id case ${channel} in ## テレ神 18) id=24632;; ## MX TV 20) id=23608;; ## フジ 21) id=1056;; ## 東京 22) id=1048;; ## テレ東 23) id=1072;; ## テレ朝 24) id=1064;; ## 日テレ 25) id=1040;; ## NHK教育 26) id=1032;; ## NHK総合 27) id=1024;; ## 大学 28) id=1088;; ## 千葉 30) id=27704;; ## テレ玉 32) id=27768;; esac echo $id return 1 } ## main case ${MODE} in 0) $RECORDER --b25 --strip $CHANNEL $DURATION ${OUTPUT} ;; 1) $RECORDER --b25 --strip $CHANNEL $DURATION ${OUTPUT}_tmp.ts case ${TYPE} in BS) $SPLITTER ${OUTPUT}_tmp.ts ${OUTPUT} $CHANNEL ;; GR) split-ts ${CHANNEL} ${OUTPUT}_tmp.ts ${OUTPUT} ;; esac if [ -s ${OUTPUT} ]; then rm -f ${OUTPUT}_tmp.ts else ## failed to split ts file mv ${OUTPUT}_tmp.ts ${OUTPUT} fi ;; esac
参考文献
過去に書いた epgrec 関連の記事
epgrec に関連する記事
- a tiny patch for recpt1/tssplitter_lite.c - 短期記憶容量少ナキ我ガ爲ノ備忘録也 http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html