From 2c5a67ec9f7176f022449415a48f48d89cf0afad Mon Sep 17 00:00:00 2001 From: Britney Fransen Date: Mon, 16 Sep 2013 17:08:01 -0500 Subject: LinHES-system: move get_airplay_key, importfile.sh, myth2mkv, myth2mp3, and ripD_eject.sh from linhes-scripts --- abs/core/LinHES-system/PKGBUILD | 14 +- abs/core/LinHES-system/get_airplay_key | 6 + abs/core/LinHES-system/importfiles.sh | 18 ++ abs/core/LinHES-system/myth2mkv | 433 ++++++++++++++++++++++++++++++++ abs/core/LinHES-system/myth2mp3 | 96 +++++++ abs/core/LinHES-system/ripD_eject.sh | 125 +++++++++ abs/core/linhes-scripts/PKGBUILD | 18 +- abs/core/linhes-scripts/get_airplay_key | 6 - abs/core/linhes-scripts/importfiles.sh | 18 -- abs/core/linhes-scripts/myth2mkv | 433 -------------------------------- abs/core/linhes-scripts/myth2mp3 | 96 ------- abs/core/linhes-scripts/ripD_eject.sh | 125 --------- 12 files changed, 692 insertions(+), 696 deletions(-) create mode 100755 abs/core/LinHES-system/get_airplay_key create mode 100755 abs/core/LinHES-system/importfiles.sh create mode 100644 abs/core/LinHES-system/myth2mkv create mode 100755 abs/core/LinHES-system/myth2mp3 create mode 100755 abs/core/LinHES-system/ripD_eject.sh delete mode 100755 abs/core/linhes-scripts/get_airplay_key delete mode 100755 abs/core/linhes-scripts/importfiles.sh delete mode 100644 abs/core/linhes-scripts/myth2mkv delete mode 100755 abs/core/linhes-scripts/myth2mp3 delete mode 100755 abs/core/linhes-scripts/ripD_eject.sh diff --git a/abs/core/LinHES-system/PKGBUILD b/abs/core/LinHES-system/PKGBUILD index 03e5eca..ee79c88 100755 --- a/abs/core/LinHES-system/PKGBUILD +++ b/abs/core/LinHES-system/PKGBUILD @@ -1,6 +1,6 @@ pkgname=LinHES-system pkgver=8.0 -pkgrel=13 +pkgrel=14 arch=('i686' 'x86_64') install=system.install pkgdesc="Everything that makes LinHES an automated system" @@ -8,12 +8,13 @@ license=('GPL2') depends=('linhes-sounds' 'xdotool' 'tilda' 'keylaunch' 'python_aosd' 'udisks' 'LinHES-config>=2.3-59' 'sudo' 'python2-dbus' 'unclutter' 'wmctrl' 'archlinux-xdg-menu' - 'ethtool' 'gnu-netcat') + 'ethtool' 'gnu-netcat' 'normalize' + 'handbrake-cli' 'mkvtoolnix' 'mplayer') backup=('etc/modprobe.d/alsa-base.conf') binfiles="LinHES-start optimize_mythdb.py myth_mtc.py myth_mtc.sh LinHES-run load-modules-mythvantage.sh unclutter-toggle.sh tvterm.sh mythfrontend-start set_windowmanager.sh myth_status.py myth_status.sh - install_supplemental_service.sh + install_supplemental_service.sh get_airplay_key importfiles.sh lh_system_backup lh_system_backup_job lh_system_restore_job lh_system_host_update lh_system_all_host_update add_storage.py diskspace.sh cacheclean lh_backend_control.sh @@ -23,7 +24,7 @@ binfiles="LinHES-start optimize_mythdb.py myth_mtc.py myth_mtc.sh misc_upcoming_recordings.pl misc_which_recorder.pl change_channel.sh change_channel_wrapper.sh stop_xss.sh be_check.py checkXFSfrag.sh find_orphans.py idle.sh xwin_find.sh - linhes_update.sh linhes_update2.sh + linhes_update.sh linhes_update2.sh myth2mkv myth2mp3 ripD_eject.sh mythwelcome-config.py mythwelcome-set-alarm.sh mythwelcome-test-wakeup.sh" source=(LinHES-session LinHES-profile.sh $binfiles @@ -86,6 +87,8 @@ md5sums=('8fc4b7c1ddf8f3c4d2266ce55086b4d4' '692563448cca1d49f45e7d1c8abcaa0c' '962a3e9eaba2d1466251b7ab0956705d' '1758aed160de64abfafb28a3a8f3390e' + '33fbebbd546672cedd3c5e7350ab414e' + '6b6e7d34a4bda6d608d150039adefd07' '3edef50a49a47694bf8add39cc160add' '5e17e0786afd891550a660f646076308' 'bc69a520add58ede9b060c73e67ace13' @@ -118,6 +121,9 @@ md5sums=('8fc4b7c1ddf8f3c4d2266ce55086b4d4' 'a94fe6d980f4b810f2e2ae5352084b39' 'e1011e0df090372cccc03ecf9d6805c7' 'd14335afe7dafa035a70399210e0df1a' + '503df99218373dfc75e7e7f5e449a44e' + '4a1fda884dcd7d65fb2690fbdbd92a83' + 'e2e24dd59d5d576cc33feafb329fa302' '92950f0ffb1faf1ed64c6be2b8fbc3f6' '95c092f67036a361ef7a57436f44332e' '410795ef9039e4c6c0484e706ecfd567' diff --git a/abs/core/LinHES-system/get_airplay_key b/abs/core/LinHES-system/get_airplay_key new file mode 100755 index 0000000..89a40dd --- /dev/null +++ b/abs/core/LinHES-system/get_airplay_key @@ -0,0 +1,6 @@ +#!/bin/bash + +. /usr/MythVantage/bin/install_functions.sh +curl https://raw.github.com/juhovh/shairplay/master/airport.key > $MYTHHOME/.mythtv/RAOPKey.rsa +chmod 755 $MYTHHOME/.mythtv/RAOPKey.rsa +chown mythtv:mythtv $MYTHHOME/.mythtv/RAOPKey.rsa \ No newline at end of file diff --git a/abs/core/LinHES-system/importfiles.sh b/abs/core/LinHES-system/importfiles.sh new file mode 100755 index 0000000..84f1ab5 --- /dev/null +++ b/abs/core/LinHES-system/importfiles.sh @@ -0,0 +1,18 @@ +#!/bin/bash +export FONT="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*" + +DVD_or_CD=`cat /proc/mounts |grep iso9660|awk '{print $2}'|tail -1` +if [ "$DVD_or_CD" != "" ]; then + echo "Copying files from $DVD_or_CD to /myth/video." > /tmp/screens + echo "This could take several minutes, depending on the" >> /tmp/screens + echo "speed and size of your optical media." >> /tmp/screens + cat /tmp/screens | osd_cat --font=$FONT --shadow=3 --pos=middle --align=centre --color=yellow --delay=0 & + /bin/cp -R $DVD_or_CD/* /myth/video/ + killall osd_cat + echo "Copied videos from $DVD_or_CD to /myth/video" > /tmp/screens + cat /tmp/screens | osd_cat --font=$FONT --shadow=3 --pos=middle --align=centre --color=yellow --delay=2 & +else + echo "No optical media found. If you just inserted" > /tmp/screens + echo "your media, please wait a moment and try again." >> /tmp/screens + cat /tmp/screens | osd_cat --font=$FONT --shadow=3 --pos=middle --align=centre --color=yellow --delay=5 & +fi diff --git a/abs/core/LinHES-system/myth2mkv b/abs/core/LinHES-system/myth2mkv new file mode 100644 index 0000000..aedccff --- /dev/null +++ b/abs/core/LinHES-system/myth2mkv @@ -0,0 +1,433 @@ +#!/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 +# +# 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 "" > "${TAG_FILE}" +echo "" >> "${TAG_FILE}" +echo "" >> "${TAG_FILE}" +echo "" >> "${TAG_FILE}" +echo "" >> "${TAG_FILE}" +echo " " >> "${TAG_FILE}" +echo " " >> "${TAG_FILE}" +echo " TITLE" >> "${TAG_FILE}" +echo " ${TITLE}" >> "${TAG_FILE}" +echo " " >> "${TAG_FILE}" +echo " SUBTITLE" >> "${TAG_FILE}" +echo " ${SUBTITLE}" >> "${TAG_FILE}" +echo " " >> "${TAG_FILE}" +echo " SUMMARY" >> "${TAG_FILE}" +echo " ${DESCR}" >> "${TAG_FILE}" +echo " " >> "${TAG_FILE}" +echo " " >> "${TAG_FILE}" +echo " DATE_RELEASED" >> "${TAG_FILE}" +echo " ${OAD}" >> "${TAG_FILE}" +echo " " >> "${TAG_FILE}" +echo " " >> "${TAG_FILE}" +echo " " >> "${TAG_FILE}" +echo " " >> "${TAG_FILE}" +echo " ENCODER" >> "${TAG_FILE}" +echo " HandBrakeCLI ${HBCLIVER}" >> "${TAG_FILE}" +echo " " >> "${TAG_FILE}" +echo " " >> "${TAG_FILE}" +echo " DATE_TAGGED" >> "${TAG_FILE}" +echo " ${DATE}" >> "${TAG_FILE}" +echo " " >> "${TAG_FILE}" +echo " " >> "${TAG_FILE}" +echo "" >> "${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 diff --git a/abs/core/LinHES-system/myth2mp3 b/abs/core/LinHES-system/myth2mp3 new file mode 100755 index 0000000..69d5d3f --- /dev/null +++ b/abs/core/LinHES-system/myth2mp3 @@ -0,0 +1,96 @@ +#!/bin/sh +# convert recordings to as mp3 audio only +# version 1.1.3 + +# usage: +# first parameter must be %DIR%/%FILE% of the recording +# second parameter must be the desired base name of the output +# third parameter must be %CHANID% if you set USECUTLIST=Y +# fourth parameter must be %STARTTIME% if you set USECUTLIST=Y +# In the mythtv setup screen invoke this script like this: +# MYTHTV User Job Command: +# /usr/LH/bin/myth2mp3 "%DIR%/%FILE%" "%TITLE% - %SUBTITLE%" "%CHANID%" "%STARTTIME%" + +# options: +BITRATE=256k #ie. 128k, 160k, 192k, 224k, 256k +USECUTLIST=Y #Y or N + +# where the converted audio is stored +OUT_DIR=/myth/music + +# create temp filename so multiple instances won't conflict +TMPNAME=toMP3-$$ +TMPFILE=/myth/tmp/$TMPNAME +TMPCUTFILE=/myth/tmp/$TMPNAME.mpg +FFINPUTFILE=$1 +TITLE=`echo $2 | sed 's/\//_/g'` + +# log file location +LOGFILE=/var/log/mythtv/myth2mp3.log +CDate="`date`" +echo "" >> $LOGFILE +echo $CDate >> $LOGFILE +echo "File to encode: $1 Name: $TITLE" >> $LOGFILE + +# start timer +beforetime="$(date +%s)" + +# check if using cutlist +if [ $USECUTLIST = Y ];then + MYTHCOMMFRAMES=`mythutil --getcutlist --chanid "$3" --starttime "$4" | grep 'Cutlist:' | cut -d \ -f 2` + if [ -n "$MYTHCOMMFRAMES" ]; then + echo "Extracting Cutlist..." >> $LOGFILE + /usr/bin/nice -n19 /usr/bin/mythtranscode --chanid "$3" --starttime "$4" --outfile "$TMPCUTFILE" --mpeg2 --honorcutlist + FFINPUTFILE=$TMPCUTFILE + fi +fi + +# run ffmpeg to do conversion to wav +echo "Encoding to intermediate wav..." >> $LOGFILE +/usr/bin/nice -n19 /usr/bin/ffmpeg -i "$FFINPUTFILE" -vn -acodec pcm_s16le -ar 44100 -ac 2 "$TMPFILE.wav" +ERROR=$? + +# Normalize the intermediate wav +echo "Normalizing intermediate wav..." >> $LOGFILE +/usr/bin/nice -n19 /usr/bin/normalize -q "$TMPFILE.wav" +ERROR=$? + +FFINPUTFILE=$TMPFILE.wav + +# Final encode of normalized wav to mp3 +echo "Encoding normalized wav to mp3..." >> $LOGFILE +/usr/bin/nice -n19 /usr/bin/ffmpeg -i "$FFINPUTFILE" -vn -acodec libmp3lame -ab $BITRATE -ar 44100 -ac 2 "$TMPFILE.mp3" +ERROR=$? + +# make output filename unique +OUTPUTFILE=$OUT_DIR/$TITLE.mp3 +i=1 +while [ -e "$OUTPUTFILE" ] +do + OUTPUTFILE=$OUT_DIR/$TITLE-$i.mp3 + i=`expr $i + 1` +done + +# move temp file to output location +chown mythtv "$TMPFILE.mp3" && mv "$TMPFILE.mp3" "$OUTPUTFILE" + +# stop timer +aftertime="$(date +%s)" +seconds="$(expr $aftertime - $beforetime)" + +if [ $ERROR -eq 0 ]; then + echo "File Encoded Sucessfully: $OUTPUTFILE" >> $LOGFILE + hours=$((seconds / 3600)) + seconds=$((seconds % 3600)) + minutes=$((seconds / 60)) + seconds=$((seconds % 60)) + echo "Encoding Time: $hours hour(s) $minutes minute(s) $seconds second(s)" >> $LOGFILE +else + echo "ERROR: $ERROR" >> $LOGFILE +fi + +# clean up left over files +unlink $TMPFILE.mp3 2> /dev/null +unlink $TMPFILE.wav 2> /dev/null +unlink $TMPCUTFILE 2> /dev/null +unlink $TMPCUTFILE.map 2> /dev/null diff --git a/abs/core/LinHES-system/ripD_eject.sh b/abs/core/LinHES-system/ripD_eject.sh new file mode 100755 index 0000000..99947a8 --- /dev/null +++ b/abs/core/LinHES-system/ripD_eject.sh @@ -0,0 +1,125 @@ +#!/bin/bash +# /usr/LH/bin/ripD_eject.sh +# A DVD rip and eject script. +######################################################################## +DEV='/dev/sr0' # DVD device +MPNT='media/cdrom' # Mount Point +Ddir='/myth/video' # DVD output dir List +Bsnd='/usr/share/sounds/init.wav' # Begin sound file +Esnd='/usr/share/sounds/complete.wav' # End sound file +DATE=$(date +%Y%m%d_%H%M) # current date/time +LOG='/var/log/mythtv/ripD.log' # name of Log file. +TRACK=$(lsdvd | grep -i longest | awk '{print $3}') #Finds longest track +FILE=$TITLE +#----------------------------------------------------------------------- +FONT="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*" +OPTS="-f $FONT -s 2 -p bottom -A left -i 50 -l 4" +#----------------------------------------------------------------------- +[ -r /etc/rip.cfg ] && . /etc/rip.cfg +#----------------------------------------------------------------------- +LOCK=/tmp/.ripLock.$$ +[ "$DISPLAY" == "" ] && export DISPLAY=:0 +######################################################################## +function osd { # $1=text, $2=color, $3=delay + cmd="osd_cat $OPTS" + [ -n "$2" ] && cmd="$cmd --color=$2" + [ -n "$3" ] && cmd="$cmd -d $3" + killall osd_cat + echo -e "$1" | $cmd +} >& /dev/null +function osd_loop() { + FN=$1 ; shift +# TXT="$MAX to $dir" + TXT="$MAX to $dir/$FILE" + N=0 + while [ -f "$LOCK" ]; do + #osd "\nbacking up DVD: '$@'\n$TXT" gray 60 + osd "\nbacking up DVD: '$TITLE'\n$TXT" gray 60 + N=$(($N+1)) + [ -d "$FN" ] && SIZE=$(du -sh $FN | awk '{print $1}') +# TXT="$SIZE of $MAX @ $N min. elapsed" + TXT="$N min. elapsed" + done +} +######################################################################## +LinHES-osd "\nDetecting DVD" gray20 5 & +echo "`date` detected DVD" >> $LOG +rm -f /tmp/.ripLock.* +#======================================================================= +for dir in $Ddir ; do + if [ -d $dir -a -w $dir ]; then + break + fi +done +#----------------------------------------------------------------------- +if [ ! -d "$dir" ]; then + echo "no $dir" >> $LOG + osd "\ndirectory: $dir\nnot found!" red 10 & + eject ; eject + exit 0 +fi +if [ ! -w "$dir" ]; then + echo "$dir not writable" >> $LOG + osd "\ndirectory: $Cdir\nnot writable!" red 10 & + eject ; eject + exit 0 +fi +#----------------------------------------------------------------------- +mount $DEV >& /dev/null +dev=$(readlink $DEV) +df=$(df -h /dev/$dev | grep /dev/$dev) +MAX=$(echo $df | while read d v r ; do echo $v ; done) +echo " backup $MAX to $dir" >> $LOG +#======================================================================= +# first make sure DMA is on: +sudo hdparm -d1 -u1 $DEV >& /dev/null +# attempt to get the DVD information: +TITLE=$(dvdbackup -i /dev/sr0 -I | grep information | awk '{ s = ""; for (i = 8; i <= NF; i++) s = s $i " "; print s }' | tr -d '"' | sed 's/ /_/g' | sed 's/_$//g') +if [ "$TITLE" == "DVD_VIDEO" -o "$TITLE" == "" \ + -o "$TITLE" == " " -o "$TITLE" == "[ ].*" ]; then + # if not a good title, + TITLE="dvdbackup_$DATE" +fi +echo " $TITLE" >> $LOG +if [ $1 = m ] +then + COMMAND="dvdbackup -M -i $DEV -o $dir -n $TITLE" + elif [ $1 = h ] + then +# COMMAND="mencoder dvd://$TRACK -alang en -oac mp3lame -lameopts br=320:cbr -ovc lavc -lavcopts vcodec=mpeg4:vhq -vf scale -zoom -xy 720 -o $dir/$TITLE.avi" + COMMAND="HandBrakeCLI -i $DEV -o $dir/$TITLE.mp4 --preset "High\ Profile" --main-feature" + FILE=$TITLE.mp4 + elif [ $1 = n ] + then +# COMMAND="mencoder dvd://$TRACK -alang en -oac mp3lame -lameopts br=160:cbr -ovc lavc -lavcopts vcodec=mpeg4:vhq -vf scale -zoom -xy 512 -o $dir/$TITLE.avi" + COMMAND="HandBrakeCLI -i $DEV -o $dir/$TITLE.mp4 --preset "Normal" --main-feature" + FILE=$TITLE.mp4 + elif [ $1 = l ] + then +# COMMAND="mencoder dvd://$TRACK -alang en -oac mp3lame -lameopts br=96:cbr -ovc lavc -lavcopts vcodec=mpeg4:vhq -vf scale -zoom -xy 320 -o $dir/$TITLE.avi" + COMMAND="HandBrakeCLI -i $DEV -o $dir/$TITLE.mp4 --preset "Classic" --main-feature" + FILE=$TITLE.mp4 + elif [ $1 = i ] + then + COMMAND="dd if=$DEV of=$dir/$TITLE.iso bs=2048" + FILE=$TITLE.iso +fi +{ # for the redir below: + # Begin: + touch $LOCK + osd_loop "$dir/$TITLE" "$TITLE" & + dvdbackup -i $DEV -I + sleep 1 ; aplay $Bsnd + $COMMAND + # Finish: + rm -f $LOCK + osd "\nfinish DVD: '$TITLE'\ninto $dir/$FILE" gray20 5 & + sleep 1 ; aplay $Esnd + # Eject the media: + sudo eject ; sudo eject +} > $dir/.$TITLE.log 2>&1 +echo " `du -sh $dir/$FILE`" >> $LOG +echo " `date` finished DVD" >> $LOG +exit 0 +######################################################################## +# End diff --git a/abs/core/linhes-scripts/PKGBUILD b/abs/core/linhes-scripts/PKGBUILD index 050c4e2..c5849c0 100644 --- a/abs/core/linhes-scripts/PKGBUILD +++ b/abs/core/linhes-scripts/PKGBUILD @@ -3,12 +3,12 @@ pkgname=linhes-scripts pkgver=7 -pkgrel=56 +pkgrel=57 pkgdesc="Various scripts that help to make LinHES, LinHES." arch=('i686' 'x86_64') license=('GPL2') depends=('xosd' 'cpulimit' 'screen' 'mencoder' 'tablet-encode' 'mplayer' - 'normalize' 'handbrake-cli' 'mkvtoolnix' 'perl' 'perl-shell') + 'handbrake-cli' 'mkvtoolnix' 'perl' 'perl-shell') url="http://linhes.org/" install="linhes-scripts.install" source=( @@ -17,8 +17,6 @@ shootscreens.sh mplayer-resumer-vdpau.pl run-pause-mythcommflag shootscreens-mythtv.sh -importfiles.sh -myth2mp3 mplayer-resumer.pl pause-mythcommflag.sh myth2x264 @@ -39,17 +37,14 @@ qip7100-cc.sh dtheme.sh upgrade_screen_rc upgrade_linhes_script.sh -myth2mkv LinHES-osd -ripD_eject.sh -get_airplay_key ) package() { cd ${srcdir} install -d ${pkgdir}/usr/LH/bin install -d ${pkgdir}/usr/LH/etc - install -D -m755 myth2* *.sh *.pl vdpau* run-* pause_* LinHES* get_airplay_key ${pkgdir}/usr/LH/bin/ + install -D -m755 myth2* *.sh *.pl vdpau* run-* pause_* LinHES* ${pkgdir}/usr/LH/bin/ install -D -m755 upgrade_screen_rc ${pkgdir}/usr/LH/etc/ mkdir -p ${pkgdir}/etc/sv/pause-mythcommflag/supervise cp run-pause-mythcommflag ${pkgdir}/etc/sv/pause-mythcommflag/run @@ -65,8 +60,6 @@ md5sums=('47a66238d95259d75c9c5cbcbb6da19f' '9ae2cd7a0c42d57ad8b5f515d7d60196' '1274bad3fb7296f00acd2d44804bad14' '47225fa9b6c953d56f6ede84d921a300' - '6b6e7d34a4bda6d608d150039adefd07' - '4a1fda884dcd7d65fb2690fbdbd92a83' '18263972b6326e140bbef0bb7dfa2da9' 'ad98d51e79f83df7c03f828dbeaea7f4' '3b1c44a0818b35b6939c3cb2b723ce9e' @@ -87,7 +80,4 @@ md5sums=('47a66238d95259d75c9c5cbcbb6da19f' '35693f50939d5827aeabfce8c5dce589' '974c137d3fcb85942ba8945a1bc815fe' 'f454faeabfa153b10389a9a3bfd51c4a' - '503df99218373dfc75e7e7f5e449a44e' - 'b608044c9e7530a400d8f5b88fdfe6e6' - 'e2e24dd59d5d576cc33feafb329fa302' - '33fbebbd546672cedd3c5e7350ab414e') + 'b608044c9e7530a400d8f5b88fdfe6e6') diff --git a/abs/core/linhes-scripts/get_airplay_key b/abs/core/linhes-scripts/get_airplay_key deleted file mode 100755 index 89a40dd..0000000 --- a/abs/core/linhes-scripts/get_airplay_key +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -. /usr/MythVantage/bin/install_functions.sh -curl https://raw.github.com/juhovh/shairplay/master/airport.key > $MYTHHOME/.mythtv/RAOPKey.rsa -chmod 755 $MYTHHOME/.mythtv/RAOPKey.rsa -chown mythtv:mythtv $MYTHHOME/.mythtv/RAOPKey.rsa \ No newline at end of file diff --git a/abs/core/linhes-scripts/importfiles.sh b/abs/core/linhes-scripts/importfiles.sh deleted file mode 100755 index 84f1ab5..0000000 --- a/abs/core/linhes-scripts/importfiles.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -export FONT="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*" - -DVD_or_CD=`cat /proc/mounts |grep iso9660|awk '{print $2}'|tail -1` -if [ "$DVD_or_CD" != "" ]; then - echo "Copying files from $DVD_or_CD to /myth/video." > /tmp/screens - echo "This could take several minutes, depending on the" >> /tmp/screens - echo "speed and size of your optical media." >> /tmp/screens - cat /tmp/screens | osd_cat --font=$FONT --shadow=3 --pos=middle --align=centre --color=yellow --delay=0 & - /bin/cp -R $DVD_or_CD/* /myth/video/ - killall osd_cat - echo "Copied videos from $DVD_or_CD to /myth/video" > /tmp/screens - cat /tmp/screens | osd_cat --font=$FONT --shadow=3 --pos=middle --align=centre --color=yellow --delay=2 & -else - echo "No optical media found. If you just inserted" > /tmp/screens - echo "your media, please wait a moment and try again." >> /tmp/screens - cat /tmp/screens | osd_cat --font=$FONT --shadow=3 --pos=middle --align=centre --color=yellow --delay=5 & -fi 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 -# -# 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 "" > "${TAG_FILE}" -echo "" >> "${TAG_FILE}" -echo "" >> "${TAG_FILE}" -echo "" >> "${TAG_FILE}" -echo "" >> "${TAG_FILE}" -echo " " >> "${TAG_FILE}" -echo " " >> "${TAG_FILE}" -echo " TITLE" >> "${TAG_FILE}" -echo " ${TITLE}" >> "${TAG_FILE}" -echo " " >> "${TAG_FILE}" -echo " SUBTITLE" >> "${TAG_FILE}" -echo " ${SUBTITLE}" >> "${TAG_FILE}" -echo " " >> "${TAG_FILE}" -echo " SUMMARY" >> "${TAG_FILE}" -echo " ${DESCR}" >> "${TAG_FILE}" -echo " " >> "${TAG_FILE}" -echo " " >> "${TAG_FILE}" -echo " DATE_RELEASED" >> "${TAG_FILE}" -echo " ${OAD}" >> "${TAG_FILE}" -echo " " >> "${TAG_FILE}" -echo " " >> "${TAG_FILE}" -echo " " >> "${TAG_FILE}" -echo " " >> "${TAG_FILE}" -echo " ENCODER" >> "${TAG_FILE}" -echo " HandBrakeCLI ${HBCLIVER}" >> "${TAG_FILE}" -echo " " >> "${TAG_FILE}" -echo " " >> "${TAG_FILE}" -echo " DATE_TAGGED" >> "${TAG_FILE}" -echo " ${DATE}" >> "${TAG_FILE}" -echo " " >> "${TAG_FILE}" -echo " " >> "${TAG_FILE}" -echo "" >> "${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 diff --git a/abs/core/linhes-scripts/myth2mp3 b/abs/core/linhes-scripts/myth2mp3 deleted file mode 100755 index 69d5d3f..0000000 --- a/abs/core/linhes-scripts/myth2mp3 +++ /dev/null @@ -1,96 +0,0 @@ -#!/bin/sh -# convert recordings to as mp3 audio only -# version 1.1.3 - -# usage: -# first parameter must be %DIR%/%FILE% of the recording -# second parameter must be the desired base name of the output -# third parameter must be %CHANID% if you set USECUTLIST=Y -# fourth parameter must be %STARTTIME% if you set USECUTLIST=Y -# In the mythtv setup screen invoke this script like this: -# MYTHTV User Job Command: -# /usr/LH/bin/myth2mp3 "%DIR%/%FILE%" "%TITLE% - %SUBTITLE%" "%CHANID%" "%STARTTIME%" - -# options: -BITRATE=256k #ie. 128k, 160k, 192k, 224k, 256k -USECUTLIST=Y #Y or N - -# where the converted audio is stored -OUT_DIR=/myth/music - -# create temp filename so multiple instances won't conflict -TMPNAME=toMP3-$$ -TMPFILE=/myth/tmp/$TMPNAME -TMPCUTFILE=/myth/tmp/$TMPNAME.mpg -FFINPUTFILE=$1 -TITLE=`echo $2 | sed 's/\//_/g'` - -# log file location -LOGFILE=/var/log/mythtv/myth2mp3.log -CDate="`date`" -echo "" >> $LOGFILE -echo $CDate >> $LOGFILE -echo "File to encode: $1 Name: $TITLE" >> $LOGFILE - -# start timer -beforetime="$(date +%s)" - -# check if using cutlist -if [ $USECUTLIST = Y ];then - MYTHCOMMFRAMES=`mythutil --getcutlist --chanid "$3" --starttime "$4" | grep 'Cutlist:' | cut -d \ -f 2` - if [ -n "$MYTHCOMMFRAMES" ]; then - echo "Extracting Cutlist..." >> $LOGFILE - /usr/bin/nice -n19 /usr/bin/mythtranscode --chanid "$3" --starttime "$4" --outfile "$TMPCUTFILE" --mpeg2 --honorcutlist - FFINPUTFILE=$TMPCUTFILE - fi -fi - -# run ffmpeg to do conversion to wav -echo "Encoding to intermediate wav..." >> $LOGFILE -/usr/bin/nice -n19 /usr/bin/ffmpeg -i "$FFINPUTFILE" -vn -acodec pcm_s16le -ar 44100 -ac 2 "$TMPFILE.wav" -ERROR=$? - -# Normalize the intermediate wav -echo "Normalizing intermediate wav..." >> $LOGFILE -/usr/bin/nice -n19 /usr/bin/normalize -q "$TMPFILE.wav" -ERROR=$? - -FFINPUTFILE=$TMPFILE.wav - -# Final encode of normalized wav to mp3 -echo "Encoding normalized wav to mp3..." >> $LOGFILE -/usr/bin/nice -n19 /usr/bin/ffmpeg -i "$FFINPUTFILE" -vn -acodec libmp3lame -ab $BITRATE -ar 44100 -ac 2 "$TMPFILE.mp3" -ERROR=$? - -# make output filename unique -OUTPUTFILE=$OUT_DIR/$TITLE.mp3 -i=1 -while [ -e "$OUTPUTFILE" ] -do - OUTPUTFILE=$OUT_DIR/$TITLE-$i.mp3 - i=`expr $i + 1` -done - -# move temp file to output location -chown mythtv "$TMPFILE.mp3" && mv "$TMPFILE.mp3" "$OUTPUTFILE" - -# stop timer -aftertime="$(date +%s)" -seconds="$(expr $aftertime - $beforetime)" - -if [ $ERROR -eq 0 ]; then - echo "File Encoded Sucessfully: $OUTPUTFILE" >> $LOGFILE - hours=$((seconds / 3600)) - seconds=$((seconds % 3600)) - minutes=$((seconds / 60)) - seconds=$((seconds % 60)) - echo "Encoding Time: $hours hour(s) $minutes minute(s) $seconds second(s)" >> $LOGFILE -else - echo "ERROR: $ERROR" >> $LOGFILE -fi - -# clean up left over files -unlink $TMPFILE.mp3 2> /dev/null -unlink $TMPFILE.wav 2> /dev/null -unlink $TMPCUTFILE 2> /dev/null -unlink $TMPCUTFILE.map 2> /dev/null diff --git a/abs/core/linhes-scripts/ripD_eject.sh b/abs/core/linhes-scripts/ripD_eject.sh deleted file mode 100755 index 99947a8..0000000 --- a/abs/core/linhes-scripts/ripD_eject.sh +++ /dev/null @@ -1,125 +0,0 @@ -#!/bin/bash -# /usr/LH/bin/ripD_eject.sh -# A DVD rip and eject script. -######################################################################## -DEV='/dev/sr0' # DVD device -MPNT='media/cdrom' # Mount Point -Ddir='/myth/video' # DVD output dir List -Bsnd='/usr/share/sounds/init.wav' # Begin sound file -Esnd='/usr/share/sounds/complete.wav' # End sound file -DATE=$(date +%Y%m%d_%H%M) # current date/time -LOG='/var/log/mythtv/ripD.log' # name of Log file. -TRACK=$(lsdvd | grep -i longest | awk '{print $3}') #Finds longest track -FILE=$TITLE -#----------------------------------------------------------------------- -FONT="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*" -OPTS="-f $FONT -s 2 -p bottom -A left -i 50 -l 4" -#----------------------------------------------------------------------- -[ -r /etc/rip.cfg ] && . /etc/rip.cfg -#----------------------------------------------------------------------- -LOCK=/tmp/.ripLock.$$ -[ "$DISPLAY" == "" ] && export DISPLAY=:0 -######################################################################## -function osd { # $1=text, $2=color, $3=delay - cmd="osd_cat $OPTS" - [ -n "$2" ] && cmd="$cmd --color=$2" - [ -n "$3" ] && cmd="$cmd -d $3" - killall osd_cat - echo -e "$1" | $cmd -} >& /dev/null -function osd_loop() { - FN=$1 ; shift -# TXT="$MAX to $dir" - TXT="$MAX to $dir/$FILE" - N=0 - while [ -f "$LOCK" ]; do - #osd "\nbacking up DVD: '$@'\n$TXT" gray 60 - osd "\nbacking up DVD: '$TITLE'\n$TXT" gray 60 - N=$(($N+1)) - [ -d "$FN" ] && SIZE=$(du -sh $FN | awk '{print $1}') -# TXT="$SIZE of $MAX @ $N min. elapsed" - TXT="$N min. elapsed" - done -} -######################################################################## -LinHES-osd "\nDetecting DVD" gray20 5 & -echo "`date` detected DVD" >> $LOG -rm -f /tmp/.ripLock.* -#======================================================================= -for dir in $Ddir ; do - if [ -d $dir -a -w $dir ]; then - break - fi -done -#----------------------------------------------------------------------- -if [ ! -d "$dir" ]; then - echo "no $dir" >> $LOG - osd "\ndirectory: $dir\nnot found!" red 10 & - eject ; eject - exit 0 -fi -if [ ! -w "$dir" ]; then - echo "$dir not writable" >> $LOG - osd "\ndirectory: $Cdir\nnot writable!" red 10 & - eject ; eject - exit 0 -fi -#----------------------------------------------------------------------- -mount $DEV >& /dev/null -dev=$(readlink $DEV) -df=$(df -h /dev/$dev | grep /dev/$dev) -MAX=$(echo $df | while read d v r ; do echo $v ; done) -echo " backup $MAX to $dir" >> $LOG -#======================================================================= -# first make sure DMA is on: -sudo hdparm -d1 -u1 $DEV >& /dev/null -# attempt to get the DVD information: -TITLE=$(dvdbackup -i /dev/sr0 -I | grep information | awk '{ s = ""; for (i = 8; i <= NF; i++) s = s $i " "; print s }' | tr -d '"' | sed 's/ /_/g' | sed 's/_$//g') -if [ "$TITLE" == "DVD_VIDEO" -o "$TITLE" == "" \ - -o "$TITLE" == " " -o "$TITLE" == "[ ].*" ]; then - # if not a good title, - TITLE="dvdbackup_$DATE" -fi -echo " $TITLE" >> $LOG -if [ $1 = m ] -then - COMMAND="dvdbackup -M -i $DEV -o $dir -n $TITLE" - elif [ $1 = h ] - then -# COMMAND="mencoder dvd://$TRACK -alang en -oac mp3lame -lameopts br=320:cbr -ovc lavc -lavcopts vcodec=mpeg4:vhq -vf scale -zoom -xy 720 -o $dir/$TITLE.avi" - COMMAND="HandBrakeCLI -i $DEV -o $dir/$TITLE.mp4 --preset "High\ Profile" --main-feature" - FILE=$TITLE.mp4 - elif [ $1 = n ] - then -# COMMAND="mencoder dvd://$TRACK -alang en -oac mp3lame -lameopts br=160:cbr -ovc lavc -lavcopts vcodec=mpeg4:vhq -vf scale -zoom -xy 512 -o $dir/$TITLE.avi" - COMMAND="HandBrakeCLI -i $DEV -o $dir/$TITLE.mp4 --preset "Normal" --main-feature" - FILE=$TITLE.mp4 - elif [ $1 = l ] - then -# COMMAND="mencoder dvd://$TRACK -alang en -oac mp3lame -lameopts br=96:cbr -ovc lavc -lavcopts vcodec=mpeg4:vhq -vf scale -zoom -xy 320 -o $dir/$TITLE.avi" - COMMAND="HandBrakeCLI -i $DEV -o $dir/$TITLE.mp4 --preset "Classic" --main-feature" - FILE=$TITLE.mp4 - elif [ $1 = i ] - then - COMMAND="dd if=$DEV of=$dir/$TITLE.iso bs=2048" - FILE=$TITLE.iso -fi -{ # for the redir below: - # Begin: - touch $LOCK - osd_loop "$dir/$TITLE" "$TITLE" & - dvdbackup -i $DEV -I - sleep 1 ; aplay $Bsnd - $COMMAND - # Finish: - rm -f $LOCK - osd "\nfinish DVD: '$TITLE'\ninto $dir/$FILE" gray20 5 & - sleep 1 ; aplay $Esnd - # Eject the media: - sudo eject ; sudo eject -} > $dir/.$TITLE.log 2>&1 -echo " `du -sh $dir/$FILE`" >> $LOG -echo " `date` finished DVD" >> $LOG -exit 0 -######################################################################## -# End -- cgit v0.12