#!/bin/bash #-*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; -*- # vim:expandtab:shiftwidth=4:tabstop=4: # vim: set sts=4 ts=4 sw=4: TV_RECORD_DIR=${TV_RECORD_DIR:-/freevo/record} TV_ARCHIVE_DIR=${TV_ARCHIVE_DIR:-/freevo/archive} OVERLAY_DIR=${OVERLAY_DIR:-/freevo/overlay} TMP_LIST_FILE=/tmp/${0##*/}.$$ LOCK_FILE=/var/cache/freevo/${0##*/} umask 002 trap "rm -vf ${TMP_LIST_FILE} ${LOCK_FILE} ${logfile} ${divxfile} ; echo 'terminated.' ; exit 2" INT TERM gray="\033[01;30m" red="\033[01;31m" green="\033[01;32m" yellow="\033[01;33m" blue="\033[01;34m" magenta="\033[01;35m" cyan="\033[01;36m" white="\033[01;37m" function message () { colour=${2:-${green}} normal="\033[00m" title_begin="\033]0;" title_end="\007" if [ "${TERM}" != "linux" -a "${TERM}" != "screen" ]; then echo -en "${title_begin}$1${title_end}" fi echo -e "${white}$(date +"%d.%m.%Y %H:%M") ${colour}$1${normal}" } for d in ${TV_RECORD_DIR}; do if [ ! -d ${d} ]; then message "ERROR: ${d} does not exist." exit fi done for d in ${TV_ARCHIVE_DIR}; do if [ -d ${d} ]; then TV_ARCHIVE_DIR=${d} break fi done nicemencoder=${NICEMENCODER:-1} vbitrate=${VBITRATE:-1000} vfscale=${VFSCALE:-640:480} vfcrop=${VFCROP:-704:560:8:6} keyint=${KEYINT:-250} vlelim=${VLELIM:--2} vcelim=${VCELIM:-3} message "TV_RECORD_DIR=${TV_RECORD_DIR}" ${cyan} message "TV_ARCHIVE_DIR=${TV_ARCHIVE_DIR}" ${cyan} message "OVERLAY_DIR=${OVERLAY_DIR}" ${cyan} message "nicemencoder=${nicemencoder}" ${cyan} message "vbitrate=${vbitrate}" ${cyan} message "vfscale=${vfscale}" ${cyan} message "vfcrop=${vfcrop}" ${cyan} message "keyint=${keyint}" ${cyan} message "vlelim=${vlelim}" ${cyan} message "vcelim=${vcelim}" ${cyan} echo "" count=${1:-0} if [ ${count} -gt 0 ]; then if [ -e ${LOCK_FILE} ]; then message "${LOCK_FILE} exists" ${red} exit 1 fi /bin/date > ${LOCK_FILE} fi #find ${TV_RECORD_DIR} -depth -type f -name "*.mpeg" | sed 's/[.-][^-]*$//' | sort | uniq > ${TMP_LIST_FILE} find ${TV_RECORD_DIR} -depth -type f -name "*.mpeg" | sed 's/[.][^.]*$//' | sort | uniq > ${TMP_LIST_FILE} processed=0 for f in $(cat ${TMP_LIST_FILE}); do mpegdir=${f%/*} ctrlname=.${0##*/} ctrlfile=${mpegdir}/${ctrlname} archivedir=${TV_ARCHIVE_DIR}${f#${TV_RECORD_DIR}} archivedir=${archivedir%/*} mpegfile=${f}.mpeg divxfile=${f}.divx srtfile=${f}.srt czefile=${f}-cze.srt engfile=${f}-eng.srt wavfile=${f}.wav oggfile=${f}.ogg mkvfile=${f}.mkv fxdfile=${f}.fxd logfile=divx2pass.log if [ -e ${ctrlfile} ]; then . ${ctrlfile} message "vfcrop=${vfcrop}" ${white} fi if [ "${f##*/}" == "folder" ]; then continue fi if [ -e ${mkvfile} ]; then continue fi if [ ! -e ${mpegfile} ]; then message "${mpegfile} missing." ${red} continue fi message "${f}" ${yellow} if [ ! -e ${wavfile} ]; then mplayer_args="-really-quiet -nolirc -ao pcm:file=${wavfile} -vo null -vc dummy ${mpegfile}" if [ ${count} -ne 0 ]; then message "mplayer ${mplayer_args}" ${green} if [ ${count} -gt 0 ]; then /usr/bin/nice /usr/bin/mplayer ${mplayer_args} if [ $? -ne 0 ]; then message "mplayer ${mplayer_args} failed!" ${red} exit 1 fi fi message "normalize ${wavfile}" if [ ${count} -gt 0 ]; then /usr/bin/nice /usr/bin/normalize ${wavfile} touch -r ${mpegfile} ${wavfile} fi fi fi if [ -e ${wavfile} -a ! -s ${wavfile} ]; then message "${wavfile} is empty" ${red} continue fi rm -f ${logfile} if [ ! -e ${divxfile} ]; then for vpass in 1 2; do #-vf pp=ffmpegdeint:crop=${vfcrop}:scale=${vfscale}\ mencoder_args="-really-quiet\ -vf pp=ffmpegdeint,crop=${vfcrop}\ -ffourcc divx\ -mc 0\ -oac copy\ -ovc xvid\ -xvidencopts bitrate=${vbitrate}:pass=${vpass}\ -o ${divxfile}\ ${mpegfile}" if [ ${count} -ne 0 ]; then message "nice -n ${nicemencoder} mencoder ${mencoder_args}" ${green} if [ ${count} -gt 0 ]; then message "=== File: ${mpegfile##*/} Date: $(date +"%d.%m.%Y %H:%M") Pass: ${vpass} ===" ${white} /usr/bin/nice -n ${nicemencoder} /usr/bin/mencoder ${mencoder_args} if [ $? != 0 ]; then rm -f ${divxfile} message "${f##*/} failed." exit 1 fi touch -r ${mpegfile} ${divxfile} fi fi done fi if [ ! -e ${oggfile} ]; then oggenc_args="-q3 -o${oggfile} ${wavfile}" if [ ${count} -ne 0 ]; then #dd if=${wavfile} bs=1764 skip=20 | /usr/bin/oggenc ${oggenc_args} message "oggenc ${oggenc_args}" ${green} if [ ${count} -gt 0 ]; then /usr/bin/nice /usr/bin/oggenc ${oggenc_args} if [ $? -ne 0 ]; then message "oggenc ${oggenc_args} failed!" ${red} exit 1 fi touch -r ${mpegfile} ${oggfile} fi fi fi if [ -e ${srtfile} ]; then # if [ ! -e ${czefile} ]; then # if [ ${count} -ne 0 ]; then # message "mv -vf ${srtfile} ${czefile}" ${green} # if [ ${count} -gt 0 ]; then # mv -vf ${srtfile} ${czefile} # fi # fi # fi rm -f ${srtfile} fi if [ ${count} -ne 0 ]; then message "streamparser ${mpegfile}" ${green} if [ ${count} -gt 0 ]; then /usr/bin/nice streamparser ${mpegfile} fi fi for s in "cze" "eng"; do if [ "${s}" = "cze" ]; then page=881 #if [ -e ${srtfile} ]; then # continue #fi elif [ "${s}" = "eng" ]; then page=888 fi srtfile=${f}-${s}.srt getvbi_args="${mpegfile} ${page}" if [ ! -e ${srtfile} ]; then if [ ${count} -ne 0 ]; then message "getvbi ${getvbi_args}" ${green} if [ ${count} -gt 0 ]; then /usr/bin/nice getvbi ${getvbi_args} mv -f vbi.txt ${srtfile} touch -r ${mpegfile} ${srtfile} fi fi fi done if [ ${count} -gt 0 ]; then rm -f index.bin index.txt fi if [ ! -e ${mkvfile} ]; then subtitles="--default-track 0" srtfiles="" languages="" for s in "cze" "eng"; do srtfile=${f}-${s}.srt if [ -s ${srtfile} ]; then subtitles="${subtitles} --language 0:${s} ${srtfile}" srtfiles="${srtfiles} ${srtfile}" languages="${languages} ${s}" fi done mkvmerge_args="-o ${mkvfile} -A ${divxfile} --language 0:eng ${oggfile} ${subtitles}" if [ ${count} -ne 0 ]; then message "mkvmerge ${mkvmerge_args}" ${green} if [ ${count} -gt 0 ]; then /usr/bin/nice /usr/bin/mkvmerge ${mkvmerge_args} if [ $? -ne 0 ]; then message "mkvmerge -o ${mkvfile} -A ${divxfile} --language 0:eng ${oggfile} ${subtitles} failed!" ${red} exit 1 fi touch -r ${mpegfile} ${mkvfile} fi fi fi processed=$((${processed}+1)) if [ ${count} -ne 0 ]; then echo "" fi if [ ${count} -le 0 ]; then continue fi if [ -e ${fxdfile} ]; then touch -r ${fxdfile} timestamp.log sed -i "s/\.mpeg