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 関連の記事
  • [Vine][Linux] epgrec で「録画ファイルも削除する」をあらかじめチェックしてみた [id:munepi:20100213:1266049282]
  • [Vine][Linux][ffmpeg] ffmpeg で TS をできるだけ高画質な mp4 へ変換してみた [id:munepi:20091227:1261941397]
epgrec に関連する記事