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

RECORDER=/usr/local/bin/recpt1
SPLITTER=/usr/local/bin/tssplitter_lite
#出力するファイルの名前だけを切りだし（例:/path/to/save/hoge.ts → hoge.ts）
FILENAME=${OUTPUT##*/}

## 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
	# 実験してうまくSPLITできないチャンネルは除外する
#	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 -f $input_tsfile $output_tsfile
	)
}

## get-progid [tsfile]
get-progid(){
	local tsfile=$1
	local id=

	# grep v2.5 以上で「-o」オプションが使える
	id=$(ffmpeg -i "$tsfile" 2>&1 | grep -o -e "Program [0-9]\+ " | sed -e 's/[^0-9]//g' | sed -n '1p')
	## 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} >/dev/null
		;;
	1)
		$RECORDER --b25 --strip --sid $SID $CHANNEL $DURATION ${OUTPUT} >/dev/null
		;;
	2)
		$RECORDER --b25 --strip --sid $SID $CHANNEL $DURATION ${OUTPUT}
		cd /tmp/

		#HD部だけを分離したtsファイルからさらに音声と動画に分離
		ffmpeg -i ${OUTPUT} -vn -acodec libfaac -ac 2 -ar 48000 -ab 96k /tmp/$FILENAME.novideo.aac
		mplayer -dumpvideo ${OUTPUT} -dumpfile /tmp/$FILENAME.noaudio.ts

		#HandbrakeCLIで動画だけのtsファイルをMP4形式の動画にエンコ
		#-X 1280 -Y 720 とするとiPadで再生できる
		HandBrakeCLI -i $FILENAME.noaudio.ts -O -f mp4 -X 480 -Y 270 -e x264 -b 400 --loose-anamorphic -o $FILENAME.mp4

		#音声を付加
		MP4Box -add $FILENAME.novideo.aac $FILENAME.mp4

		#元のフォルダに戻しておく。Apacheの領域内に戻して外部参照してもOK
		mv $FILENAME.mp4 ${OUTPUT}.480x270.mp4

		#後始末
		rm -rf /tmp/$FILENAME*
		;;
	3)
		$RECORDER --b25 --strip --sid $SID $CHANNEL $DURATION ${OUTPUT} > /dev/null
		START=`date '+%s'`
		cd /tmp/
		mplayer -dumpaudio ${OUTPUT} -dumpfile /tmp/$FILENAME.novideo.aac
		mplayer -dumpvideo ${OUTPUT} -dumpfile /tmp/$FILENAME.noaudio.ts
		HandBrakeCLI -i $FILENAME.noaudio.ts -f mp4 -e x264 -b 5000 --loose-anamorphic -o $FILENAME.mp4
		MP4Box -add $FILENAME.novideo.aac $FILENAME.mp4
		mv $FILENAME.mp4 ${OUTPUT}.mp4
		rm -rf /tmp/$FILENAME*
		END=`date '+%s'`
		TIME=`expr $END - $START`
		echo 保存用の$FILENAMEの変換が終了しました > /var/www/epgrec/data.txt
		echo `date`に終了。 $TIME秒かかりました >> /var/www/epgrec/data.txt
		#mutt -s 保存用_$FILENAME hoge@example.com -F /home/hoge/.mutt/muttrc < /var/www/epgrec/data.txt 

		#自動変換が信頼できるなら元のtsファイルを消す
		rm -rf ${OUTPUT}
		;;
	4)
		$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
		rm -f ${OUTPUT}_tmp.ts
		;;
esac
