[mythtv-users] ProjectX DVD maker

Jonathan Markevich mythtv at jonandtina.net
Sat May 21 21:27:27 UTC 2005


Ok, here's a couple of scripts I have been using very successfully.  
Make sure you have run ProjectX once and have the X.ini file.

This first one was mostly another's work, I forget who!  (THANK YOU).  I 
added a command-line option which I use exclusively (-m) because I want 
just a mpg file that I can use in DVDStyler later.

-------------nuv2dvd.sh--------------
#!/bin/bash

# Just a sample script.  Use at your own risk!
#
# Usage: nuv2dvd [-m] [-d] [-r<N>] <file1> [<file2> <file3>...]
#
#   -d       Only make a dvd directory structure: do not burn.  Resulting
#            file structure can be found in ./dvd.tempdir/dvd
#   -r<N>    Requantize video only using tcrequant with requantization
#            factor N.  This will reduce the space taken for video by a
#            factor of N.  E.g. -r2.0 will result in video that takes
#            about half the original space.  Does not affect audio.
#
#   -m       mplex only - do not create the DVD structure

DEVICE="/dev/sr0"    # DVD burner device.  Make sure it's umounted!
STREAM_BASE="stream"
PROJECTX_BIN="/myth/burn/ProjectX.jar"   # Compiled ProjectX.jar
PROJECTX_INI="/myth/burn/X.ini"    # Use an unchanged default X.ini!
TEMP_DIR="/myth/burn/temp"
FINAL_DIR="/myth/video" # only for just mplexing

function Error ()
{
    echo "ERROR: $1"
    exit 1
}

mkdir $TEMP_DIR || Error "Could not make tempdir: $TEMP_DIR"

COUNT=0; RVAL=""; BURN="yes"; JUSTMPLEX="no"  
for ARG in $*
do
    echo "Argument: $ARG"
    case $ARG in
        -r*)    # Requantize
            RVAL=${ARG##*-r}
            echo "Requantization factor: $RVAL"
        ;;
        -d)     # Just write dvd file structure
            BURN="no"
            echo "Burn: $BURN"
        ;;
        -m)     # Just mplex
            BURN="no"
            JUSTMPLEX="yes"
            echo "Just mplex: $JUSTMPLEX"
        ;;   
        *)      # Process the file
            ./getcutlist.sh $ARG 
           
            if [ -s $ARG ]; then
                echo "Demultiplexing file: $ARG"
                let "COUNT=$COUNT+1"
                java -jar $PROJECTX_BIN -c $PROJECTX_INI -p cutlist2.txt 
-n "$STREAM_BASE$COUNT" -o $TEMP_DIR $ARG
                BNAME="$TEMP_DIR/$STREAM_BASE$COUNT"
                if [ ! -z $RVAL ]; then
                    mv "$BNAME.mpv" "$BNAME.tmp.mpv"
                    mkfifo "$BNAME.mpv"
                    echo "Starting requantization at factor $RVAL"
                    tcrequant -i "$BNAME.tmp.mpv" -o "$BNAME.mpv" -d2 -f 
$RVAL &
                fi

                echo "Remultiplexing file: $ARG"
                if [ $JUSTMPLEX = "no" ]; then 
                    mkfifo "$BNAME.mpg"
                    outname="$BNAME.mpg"
                    mplex -f 8 -V -o "$outname" "$BNAME.mpa" "$BNAME.m2v" &
                else
                    outname="$TEMP_DIR/$(basename $ARG).mpg"
                    mplex -f 8 -V -o "$outname" "$BNAME.mpa" "$BNAME.m2v"
                fi
            else 
                Error "Not a good file: $ARG"
            fi
        ;;
    esac 
done

if [ $JUSTMPLEX = "no" ]; then
   echo "Creating dvd file structure with dvdauthor..."
   dvdauthor -o "$TEMP_DIR/dvd" -f "$TEMP_DIR/$STREAM_BASE"*.mpg
   dvdauthor -o "$TEMP_DIR/dvd" -T

   if [ $BURN = "yes" ]; then
       echo "Burning file structure to dvd device: $DEVICE"
       growisofs -Z $DEVICE -dvd-video "$TEMP_DIR/dvd"
   fi

   echo "Cleaning up temporary files..."
   rm -v "./$TEMP_DIR/$STREAM_BASE"*

   if [ $BURN = "yes" ]; then
       rm -rv "$TEMP_DIR/dvd"
       rmdir -r "$TEMP_DIR" 
   fi
else
   echo "$outname"
   mv "$outname" "$FINAL_DIR"
   rm -r "$TEMP_DIR"
fi
--------------------------------

This next one is called by the above.  It gets the cutlist.  It could 
theoretically be inline...

---------getcutlist.sh---------

#!/bin/sh

infile=$1
mysqluser='mythtv'
mysqlpass='mythtv'

# I definitely want to use pretty links, so...
if [ -L $infile ]; then
        infile=$( basename $( readlink $1 ))
fi

# Strip stuff out of the filename
channel=$( echo $infile | cut --delimiter="_" -f 1 )
starttime=$( echo $infile | cut --delimiter="_" -f 2 )
endtime=$( echo $infile | cut --delimiter="_" -f 3 | cut --delimiter="_" 
-f 1 | cut --delimiter="." -f 1 )

echo "(2) use Frame number for cuts" > cutlist.txt
mysql -u$mysqluser -p$mysqlpass mythconverg -s -B --exec \
"select IFNULL(recorded.cutlist,'') from recorded where 
recorded.chanid=$channel and recorded.starttime=$starttime and 
recorded.endtime=$endtime;" >> cutlist.txt
sed -e "s/\\\n/\n/g; s/ - /\n/g; s/^0\n//g" cutlist.txt > cutlist2.txt

--------------------------------

I wonder if the MythBurn invertcutlist.pl file would be a better 
solution than using the ^0\n edit as above... I haven't investigated.

Comments? Improvements?







More information about the mythtv-users mailing list