summaryrefslogtreecommitdiffstats
path: root/abs/core/linhes-scripts/myth2mkv
diff options
context:
space:
mode:
Diffstat (limited to 'abs/core/linhes-scripts/myth2mkv')
-rw-r--r--abs/core/linhes-scripts/myth2mkv433
1 files changed, 0 insertions, 433 deletions
diff --git a/abs/core/linhes-scripts/myth2mkv b/abs/core/linhes-scripts/myth2mkv
deleted file mode 100644
index aedccff..0000000
--- a/abs/core/linhes-scripts/myth2mkv
+++ /dev/null
@@ -1,433 +0,0 @@
-#!/bin/bash
-#
-# Convert video to AVC-1 / h264
-#
-# version 0.25-004
-#
-# Prerequisites:
-# - mythtv >= 0.25
-# - handbrake-cli
-# - mplayer
-# - mkvtoolnix
-#
-# Arguments
-# $1 must be the directory/file of the recording
-# $2 must be chanid
-# $3 must be starttime
-# $4 must be title
-# $5 must be subtitle
-# $6 must be jobid
-# $7 must be quality of encode
-#
-# As a MythTV user job:
-# myth2mkv "%DIR%/%FILE%" "%CHANID%" "%STARTTIME%" "%TITLE%" "%SUBTITLE%" "%JOBID%" HQ|MQ|LQ
-
-########################
-# #
-# Adjustable variables #
-# #
-########################
-
-OUTDIR=/myth/video
-LOGPATH=/var/log/mythtv
-LOGFILE=${LOGPATH}/myth2mkv-$$.log
-
-# TMPDIR is for large transient files
-TMPDIR=/myth/tmp
-
-# x264 tuning:
-# Tune x264 based on content. Valid options for TUNING are:
-# film, animation, grain, stillimage, psnr, ssim, fastdecode, zerolatency
-# Separate multiple options with a comma. DEFAULT: none
-TUNING=""
-
-# Custom cropping. Useful if you have a 4:3 image in a HD frame or if
-# HandBrake's autocrop smarts fail you.
-# Crop 240 pixels off the left and right for 4:3 image in 1920x1080 frame
-# Crop 160 pixels off the left and right for 4:3 image in 1280x720 frame
-# <T:B:L:R>
-# i.e. 0:0:240:240
-# Default: In HQ: CROP="0:0:0:0" (no cropping).
-# IN MQ and LQ: autocrop.
-CROP=""
-
-# Force custom output resolution.
-# Default: Keep same resolution as input file (less any cropping).
-WIDTH=""
-HEIGHT=""
-
-# Force use/non-use of deinterlacing filter. Y|N|G (Yes, No, Guess)
-# Default: G - Guess based on source resolution.
-# If the source video width is 1920, 1440, 852, 704, 640 or 528 pixels
-# "G" will deinterlace the video. Change to "Y" to force use of deinterlacing
-# filter or to "N" to NOT use deinterlace filter no matter the resolution.
-DEINT="G"
-
-############################
-# #
-# End adjustable variables #
-# #
-############################
-
-if [[ -e $HOME/.mythtv/mysql.txt ]] ; then
- . $HOME/.mythtv/mysql.txt
-else
- DBHostName=${DBHostName:-"localhost"}
- DBUserName=${DBUserName:-"mythtv"}
- DBPassword=${DBPassword:-"mythtv"}
- DBName=${DBName:-"mythconverg"}
-fi
-
-if [[ ! -d ${TMPDIR} ]] ; then
- mkdir -p ${TMPDIR}
-fi
-
-if [[ ! -d ${OUTDIR} ]] ; then
- mkdir -p ${OUTDIR}
-fi
-
-#------FUNCTIONS---------------
-update_comment()
-# Arg_1 = COMMENT
-{
-if [ ${NO_JOBID} -eq 0 ]; then
- SQL_CMD="update jobqueue set comment=\"${1}\" where id=\"${JOBID}\";"
- `${MYSQLCMD} "${SQL_CMD}"`
-fi
-}
-
-check_background_progress()
-# check handbrake progress in background
-{
-while [ `tail -2 ${STATUSFILE} | grep -c "^HandBrake has exited"` = 0 ]
-do
- sleep 10
- check_myth_jobcmds
- pass=`tail -1 ${STATUSFILE} | egrep -o -e 'task [0-9]' | tail -1 | sed 's/task\ //g'`
- prog_percent=`tail -1 ${STATUSFILE} | egrep -o -e '[0-9]*\.[0-9]. %' | tail -1 | sed 's/\ %//g'`
- current_FPS=`tail -1 ${STATUSFILE} | egrep -o -e 'avg [0-9.]*\.[0-9]* fps' | tail -1 | sed -e 's/avg\ //g' -e 's/\ fps//g'`
- current_ETA=`tail -1 ${STATUSFILE} | egrep -o -e 'ETA [0-9.][0-9.]h[0-9.][0-9.]m[0-9.][0-9.]s' | tail -1`
- if [ -n "$prog_percent" ]; then
- echo "Pass ${pass}, ${prog_percent}% @ ${current_FPS} fps. ${current_ETA}"
- update_comment "Pass ${pass} of 2, ${prog_percent}% @ ${current_FPS} fps. ${current_ETA}"
- fi
- sleep 10
-done
-}
-
-check_myth_jobcmds()
-# check the myth database for stop pause or resume commands
-{
-if [[ ${NO_JOBID} -eq 0 ]] ; then
- CURRENT_CMD=`${MYSQLCMD} "select cmds from jobqueue where id = \"${JOBID}\";"`
- case "${CURRENT_CMD}" in
- # JOB_RUN
- 0) ;;
- # JOB_PAUSE
- 1) `${MYSQLCMD} "update jobqueue set status=\"6\" where id=\"${JOBID}\";"`
- kill -s STOP ${handbrake_pid} ;;
- # JOB_RESUME
- 2) `${MYSQLCMD} "update jobqueue set status=\"4\" where id=\"${JOBID}\";"`
- `${MYSQLCMD} "update jobqueue set cmds=\"0\" where id=\"${JOBID}\";"`
- kill -s CONT ${handbrake_pid} ;;
- # JOB_STOP
- 4) `${MYSQLCMD} "update jobqueue set status=\"5\" where id=\"${JOBID}\";"`
- `${MYSQLCMD} "update jobqueue set cmds=\"0\" where id=\"${JOBID}\";"`
- kill -9 ${handbrake_pid} ${command_pid}
- clean_up_files
- echo "Encode Cancelled" >> ${LOGFILE}
- `${MYSQLCMD} "update jobqueue set status=\"320\" where id=\"${JOBID}\";"`
- exit ;;
- esac
-fi
-}
-
-get_info_for_hb() {
-# Collect some info about source file
-
-/usr/bin/mplayer -nolirc -identify -frames 0 "${HBINPUTFILE}" \
- 2>/dev/null 1>"${IDFILE}"
-
-VIDEOW=$( grep ID_VIDEO_WIDTH= "${IDFILE}" | awk -F= '{ print $NF }' )
-FPS=$( grep ID_VIDEO_FPS= "${IDFILE}" | awk -F= '{ print $NF }' )
-
-# HandBrake does not like a framerate of 29.970, so let's drop the 0
-if [[ ${FPS} = "29.970" ]] ; then
- FPS="29.97"
-fi
-
-# HandBrake does not like a framerate of 59.940, so let's drop the 0
-if [[ ${FPS} = "59.940" ]] ; then
- FPS="59.94"
-fi
-
-# A rough guestimation that if the video width is 1920, 1440, 852, 704, 640 or
-# 528 pixels it is probably interlaced.
-if [[ ${DEINT} = Y ]] ; then
- DEINT="-d slow"
-else
- if [[ ${DEINT} = N ]] ; then
- DEINT=""
- else
- if [[ ${VIDEOW} = 1920 || ${VIDEOW} = 1440 || ${VIDEOW} = 852 || \
- ${VIDEOW} = 704 || ${VIDEOW} = 640 || ${VIDEOW} = 528 ]] ; then
- DEINT="-d slow"
- else
- DEINT=""
- fi
- fi
-fi
-
-if [[ -n ${DEINT} ]] ; then
- if [[ ${QUALITY} = LQ ]] ; then
- DEINT="-d fast"
- fi
-fi
-
-if [[ -n ${TUNING} ]] ; then
- TUNING="--x264-tune ${TUNING}"
-fi
-
-if [[ -n ${CROP} ]] ; then
- CROP="--crop ${CROP}"
-fi
-
-if [[ -n ${WIDTH} ]] ; then
- WIDTH="-w ${WIDTH} -X ${WIDTH}"
-fi
-
-if [[ -n ${HEIGHT} ]] ; then
- HEIGHT="-l ${HEIGHT} -Y ${HEIGHT}"
-fi
-
-if [[ ${QUALITY} = HQ ]] ; then
- if [[ -n ${CROP} ]] ; then
- CROP="--crop ${CROP}"
- else
- CROP="--crop 0:0:0:0 --strict-anamorphic"
- fi
- HB_OPTS="-o ${TMPFILE} -f mkv -m -e x264 ${TUNING} -x b-adapt=2:rc-lookahead=50 -b 5000 -2 -T ${WIDTH} ${HEIGHT} -r ${FPS} --cfr ${CROP} ${DEINT} -a 1 -E copy -s 1"
-else
- if [[ ${CROP} = "--crop 0:0:0:0" ]] ; then
- CROP="${CROP} --strict-anamorphic"
- fi
- if [[ ${QUALITY} = LQ ]] ; then
- HB_OPTS="-o ${TMPFILE} -f mkv -m -e x264 ${TUNING} -b 1250 ${WIDTH} ${HEIGHT} -r ${FPS} --pfr ${CROP} ${DEINT} -a 1 -E lame -B 128 -Q 8 -6 stereo -s 1"
- else
- # Fallback to "MQ"
- HB_OPTS="-o ${TMPFILE} -f mkv -m -e x264 ${TUNING} -b 2500 -2 -T ${WIDTH} ${HEIGHT} -r ${FPS} --pfr ${CROP} ${DEINT} -a 1 -E lame -B 256 -Q 3 -6 stereo -s 1"
- fi
-fi
-}
-
-get_handbrake_pid()
-{
-process_name=""
-i1=1
-while [ "${process_name}" != "found" ]; do
- handbrake_pid=`expr ${handbrake_pid} + 1`
- i1=`expr ${i1} + 1`
- if [ "`ps ${handbrake_pid} | grep HandBrakeCLI | sed 's_.*\(HandBrakeCLI\).*_\1_'`" = "HandBrakeCLI" ]; then
- process_name="found"
- fi
- if [ ${i1} -gt 20 ]; then
- break
- fi
-done
-}
-
-tag_file() {
-DATE=`date`
-
-# Create a tag file here
-echo "<?xml version='1.0' encoding='ISO-8859-1'?>" > "${TAG_FILE}"
-echo "" >> "${TAG_FILE}"
-echo "<!DOCTYPE Tags SYSTEM 'matroskatags.dtd'>" >> "${TAG_FILE}"
-echo "" >> "${TAG_FILE}"
-echo "<Tags>" >> "${TAG_FILE}"
-echo " <Tag>" >> "${TAG_FILE}"
-echo " <Simple>" >> "${TAG_FILE}"
-echo " <Name>TITLE</Name>" >> "${TAG_FILE}"
-echo " <String>${TITLE}</String>" >> "${TAG_FILE}"
-echo " <Simple>" >> "${TAG_FILE}"
-echo " <Name>SUBTITLE</Name>" >> "${TAG_FILE}"
-echo " <String>${SUBTITLE}</String>" >> "${TAG_FILE}"
-echo " <Simple>" >> "${TAG_FILE}"
-echo " <Name>SUMMARY</Name>" >> "${TAG_FILE}"
-echo " <String>${DESCR}</String>" >> "${TAG_FILE}"
-echo " </Simple>" >> "${TAG_FILE}"
-echo " <Simple>" >> "${TAG_FILE}"
-echo " <Name>DATE_RELEASED</Name>" >> "${TAG_FILE}"
-echo " <String>${OAD}</String>" >> "${TAG_FILE}"
-echo " </Simple>" >> "${TAG_FILE}"
-echo " </Simple>" >> "${TAG_FILE}"
-echo " </Simple>" >> "${TAG_FILE}"
-echo " <Simple>" >> "${TAG_FILE}"
-echo " <Name>ENCODER</Name>" >> "${TAG_FILE}"
-echo " <String>HandBrakeCLI ${HBCLIVER}</String>" >> "${TAG_FILE}"
-echo " </Simple>" >> "${TAG_FILE}"
-echo " <Simple>" >> "${TAG_FILE}"
-echo " <Name>DATE_TAGGED</Name>" >> "${TAG_FILE}"
-echo " <String>${DATE}</String>" >> "${TAG_FILE}"
-echo " </Simple>" >> "${TAG_FILE}"
-echo " </Tag>" >> "${TAG_FILE}"
-echo "</Tags>" >> "${TAG_FILE}"
-
-# Add tag info into MKV file
-echo "Adding tag info to ${TITLE} - ${SUBTITLE} ..." >> ${LOGFILE}
-
-/usr/bin/mkvpropedit -r ${LOGFILE} -t all:"${TAG_FILE}" "${TMPFILE}"
-}
-
-clean_up_files()
-# clean up left over files
-{
-unlink ${TMPFILE} 2> /dev/null
-unlink ${TMPCUTFILE} 2> /dev/null
-unlink ${TMPCUTFILE}.map 2> /dev/null
-unlink ${STATUSFILE} 2> /dev/null
-unlink ${IDFILE} 2> /dev/null
-unlink ${HB_RETURN_CODE} 2> /dev/null
-unlink ${TAG_FILE} 2> /dev/null
-}
-
-#-------MAIN SCRIPT------------
-
-# create temp filename so multiple instances won't conflict
-TMPNAME=toX264-$$
-TMPFILE=${TMPDIR}/${TMPNAME}.mkv
-TMPCUTFILE=${TMPDIR}/${TMPNAME}.mpg
-HBINPUTFILE="${1}"
-TITLE="${4}"
-SUBTITLE="${5}"
-JOBID="${6}"
-QUALITY="${7}"
-BASE=`basename ${HBINPUTFILE}`
-HBCLIVER=`pacman -Q | grep handbrake-cli | awk '{ print $NF }' | awk -F"-" '{ print $1 }'`
-STATUSFILE=/tmp/${TMPNAME}-status.log
-HB_RETURN_CODE=/tmp/${TMPNAME}-hb_return_code
-IDFILE=/tmp/${TMPNAME}-id.txt
-TAG_FILE=/tmp/${TMPNAME}.xml
-MYSQLCMD="mysql -B --skip-column-names -u ${DBUserName} -p${DBPassword} -h ${DBHostName} -D ${DBName} -e"
-OAD=`${MYSQLCMD} "select originalairdate from recorded where basename LIKE '${BASE}';"`
-DESCR=`${MYSQLCMD} "select description from recorded where basename LIKE '${BASE}';" | sed 's/\&/and/g'`
-USER=`whoami`
-
-# check if %JOBID% is passed from command line
-if [ -z ${JOBID} ]; then
- NO_JOBID=1
-else
- NO_JOBID=0
-fi
-
-# log file location
-CDate="`date`"
-echo "" >> ${LOGFILE}
-echo $CDate >> ${LOGFILE}
-echo "File to encode: ${HBINPUTFILE}" >> ${LOGFILE}
-echo " --> Name: ${TITLE} - ${SUBTITLE}" >> ${LOGFILE}
-echo " --> Temporary Files: ${TMPNAME}.*" >> ${LOGFILE}
-echo "" >> ${LOGFILE}
-
-get_info_for_hb
-ERROR=$?
-
-if [[ ${ERROR} != 0 ]] ; then
- echo "Error parsing source file information!" >> ${LOGFILE}
- cat ${IDFILE} >> ${LOGFILE}
- clean_up_files
- exit 1
-fi
-
-# start timer
-beforetime="$(date +%s)"
-
-check_myth_jobcmds
-
-# If there is a cutlist, use it:
-if [[ -n `mythutil --getcutlist --chanid "${2}" --starttime "${3}" | grep \
- Cutlist: | awk -F": " '{ print $NF }'` ]] ; then
- echo "Applying cutlist for ${TITLE} - ${SUBTITLE} ..." >> ${LOGFILE}
- mythtranscode --chanid "${2}" --starttime "${3}" -m --honorcutlist \
- -q --loglevel info --logpath "${LOGPATH}" -o "${TMPCUTFILE}"
- mythtrans_pid=$!
- ERROR=$?
- HBINPUTFILE=${TMPCUTFILE}
-fi
-
-if [[ ${ERROR} != 0 ]] ; then
- echo "MythTranscode error!" >> ${LOGFILE}
- echo "Check ${LOGPATH}/mythtranscode.date.${mythtrans_pid}.log for mythtranscode error" >> ${LOGFILE}
- clean_up_files
- exit 1
-fi
-
-# run handbrake in background to do conversion
-echo "Encoding ${TITLE} - ${SUBTITLE} ..." >> ${LOGFILE}
-
-( /usr/bin/nice -n19 nohup /usr/bin/HandBrakeCLI -i ${HBINPUTFILE} ${HB_OPTS} \
- > ${STATUSFILE} 2>&1 ; echo $? > ${HB_RETURN_CODE} ) &
-handbrake_pid=$!
-command_pid=${handbrake_pid}
-get_handbrake_pid
-
-check_background_progress
-
-if [[ `cat ${HB_RETURN_CODE}` != 0 ]] ; then
- echo "HandBrakeCLI error!" >> ${LOGFILE}
- cat ${STATUSFILE} >> ${LOGFILE}
- clean_up_files
- exit 1
-fi
-
-tag_file
-ERROR=$?
-
-if [[ ${ERROR} != 0 ]] ; then
- echo "Error creating tag file!" >> ${LOGFILE}
- cat ${TAG_FILE} >> ${LOGFILE}
- clean_up_files
- exit 1
-fi
-
-# make output filename unique and do not clobber an existing file
-# Build a final file name
-FILE=$( echo "${TITLE,,} ${OAD} ${SUBTITLE,,}" | tr -d [:punct:] | tr [:blank:] "_" | tr -s "_" )
-OUTPUTFILE="${OUTDIR}/${FILE}.mkv"
-i=1
-while [ -e "${OUTPUTFILE}" ]
-do
- OUTPUTFILE="${OUTDIR}/${FILE}-${i}.mkv"
- i=`expr $i + 1`
-done
-
-# move temp file to output location
-chown -v "${USER}" "${TMPFILE}" >> ${LOGFILE}
-mv -v "${TMPFILE}" "$OUTPUTFILE" >> ${LOGFILE}
-ERROR=$?
-
-if [[ ${ERROR} != 0 ]] ; then
- echo "Error moving ${TMPFILE} to ${OUTPUTFILE} !" >> ${LOGFILE}
- clean_up_files
- exit 1
-fi
-
-# stop timer
-aftertime="$(date +%s)"
-seconds="$(expr ${aftertime} - ${beforetime})"
-
-if [ ${ERROR} -eq 0 ]; then
- echo "File Encoded Successfully: ${OUTPUTFILE}" >> ${LOGFILE}
- hours=$((seconds / 3600))
- seconds=$((seconds % 3600))
- minutes=$((seconds / 60))
- seconds=$((seconds % 60))
- echo "Encoding took ${hours} hour\(s\) ${minutes} minute\(s\) ${seconds} second\(s\) @ ${current_FPS} fps." >> ${LOGFILE}
- `${MYSQLCMD} "update jobqueue set status = \"272\" where id = \"${JOBID}\";"`
- update_comment "Encode Successful. Encoding Time: ${hours} hour\(s\) ${minutes} minute\(s\) ${seconds} second\(s\)"
-else
- echo "ERROR: ${ERROR}" >> ${LOGFILE}
-fi
-
-# Clean up
-clean_up_files