#!/bin/sh
def_signal=0
def_sound=0
def_tools=1

help(){
    cat <<END
Usage: $0 <filename.[ppm|pnm|png]>
Options:
    -s n      audio, n=0 mp2enc, n=1 toolame        ($def_sound)
    -t n      video, n=0 mjpegtools, n=1 ffmpeg     ($def_tools)
    -v n      Video Signal, n=1 ntsc n=2 pal        ($def_signal)
END
    exit 0
}

signal=$def_signal
sound=$def_sound
tools=$def_tools

while getopts s:t:v:h name "$@"
do
    case $name in
s)
    sound=$OPTARG ;;
t)
    tools=$OPTARG ;;
v)
    signal=$OPTARG ;;
*)
    help ;;
    esac
done
let shiftind=$OPTIND-1
shift $shiftind

case $signal in
2)
    Vflag="-F 25:1"
    Nflag="pal"
    Rflag_m="-A 59:54"
    fwidth="720"
    fheight="576" ;;
*)
    Vflag="-F 30000:1001"
    Nflag="ntsc"
    Rflag_m="-A 10:11"
    fwidth="720"
    fheight="480" ;;
esac

if test "$#" = "1"
then
    case $1 in
*.pnm)
        ifilter=cat
        input="$1"
        base=`echo $input | sed "s/\.pnm$//"` ;;
*.ppm)
        ifilter=cat
        input="$1"
        base=`echo $input | sed "s/\.ppm$//"` ;;
*.png)
        ifilter=pngtopnm
        input="$1"
        base=`echo $input | sed "s/\.png$//"` ;;
*)
        help ;;
    esac
    echo Transcoding $input to $base.mpg....
    sleep 1

    dd if=/dev/zero bs=4 count=16000 |
        sox -t raw -s -w -c2 -r48000 /dev/stdin "$base".wav

    case $tools in
1)
    $ifilter $input |
    ppmtoy4m $Rflag $Vflag -n 10 -r -I p -S 420mpeg2 |
        ffmpeg -f yuv4mpegpipe -i /dev/stdin \
        -aspect 4:3 -interlace 0 -r ntsc -target dvd -y "$base".m2v
    ffmpeg -i "$base".wav -i "$base".m2v \
        -target dvd -ab 128000 -y "$base"b.mpg ;;
*)
    $ifilter $input |
    ppmtoy4m $Rflag $Vflag -n 10 -r -I p -S 420mpeg2 |
        mpeg2enc -a2 -f 8 -n $Nflag -o "$base".m2v
case $sound in
1)
    toolame -b 128 -s 48 "$base".wav "$base".m2a ;;
*)
    mp2enc -r48000 -b128 -o "$base".m2a <"$base".wav ;;
esac
    mplex -f 8 "$base".m2v "$base".m2a -o "$base"b.mpg ;;
esac

    if test ! -f $base.xml
    then
        cat <<EOF >$base.xml
<subpictures>
  <stream>
    <spu 
       force="yes"
       start="00:00:00.00" end="00:00:00.0"
       select="${base}h.png"
       highlight="${base}h.png"
       autooutline="infer"
       outlinewidth="8"
       autoorder="rows">
    </spu>
  </stream>
</subpictures>
EOF
    fi
    spumux $base.xml <"$base"b.mpg >$base.mpg
    
else
    help
fi
