#!/bin/sh

# This script uses GStreamer (gst-launch) to convert a DV PAL input file to 4 theora streams in parallel.
# The four streams are named ${outfile}-sml.ogg -med.ogg -lrg.ogg and -archive.ogg
# small: 384x288@15fps low quality settings
# medium: 384x288@15fps medium quality settings
# lrg: 720x576@15fps, medium quality settings
# archive: 720x576@25fps, maximum quality settings

if [ $# -lt 2 ]; then
  echo "dv2ogg-all infile.dv outfile"
  exit 1
fi

INFILE=$1
shift
OUTFILE=$1
shift

QUEUE="queue max-size-time=5000000000 max-size-buffers=0 max-size-bytes=0"

gst-launch filesrc location=$INFILE ! dvdec name=dv .video ! \
{ $QUEUE ! progressreport name=video ! video/x-raw-yuv ! ffmpegcolorspace name=f1 ! \
deinterlace ! video/x-raw-yuv,framerate=25.0 ! videorate ! tee name=vr ! \
video/x-raw-yuv,framerate=15.0 ! ffmpegcolorspace name=f2 ! \
gdkpixbufscale method=3 ! video/x-raw-rgb,width=384,height=288 ! ffmpegcolorspace ! tee name=vidout } \
{ dv.audio ! queue ! progressreport name=audio ! audioconvert ! audioscale ! audio/x-raw-int,rate=32000 ! \
audioconvert ! tee name=audout } \
\
{ vidout. ! $QUEUE ! theoraenc quality=8 ! $QUEUE name=q1 }\
{ audout. ! $QUEUE ! rawvorbisenc managed=true quality=0.15 ! $QUEUE name=q2 } \
{ q1. ! oggmux name=mux-sml ! progressreport name=small ! filesink location=${OUTFILE}-sml.ogg q2. ! mux-sml. } \
\
{ vidout. ! $QUEUE ! theoraenc quality=32 ! $QUEUE name=q3 } \
{ audout. ! $QUEUE ! rawvorbisenc managed=true quality=0.20 ! $QUEUE name=q4 } \
{ q3. ! oggmux name=mux-med ! progressreport name=medium ! filesink location=${OUTFILE}-med.ogg q4. ! mux-med. } \
\
{ vr. ! $QUEUE ! theoraenc quality=24 ! $QUEUE name=q5 }\
{ audout. ! $QUEUE ! rawvorbisenc managed=true quality=0.20 ! $QUEUE name=q6 } \
{ q5. ! oggmux name=mux-large ! progressreport name=large ! filesink location=${OUTFILE}-lrg.ogg q6. ! mux-large. } \
\
{ vr. ! $QUEUE ! ffmpegcolorspace ! theoraenc quality=63 ! $QUEUE name=q7 }\
{ audout. ! $QUEUE ! rawvorbisenc managed=true quality=0.20 ! $QUEUE name=q8 } \
{ q7. ! oggmux name=mux-archive ! progressreport name=archive ! filesink location=${OUTFILE}-archive.ogg q8. ! mux-archive. }

