#!/bin/sh
# encode-ng.sh - version 0.0.1 26/08/2008
# based on encode.sh - version 0.0.5
# nice modification by smg/gentoo.de/freenode
#
# Converts all avis in directory to DVD or
# SVCD BIN file with cuesheet.
# VCD and burning will be implemented soon.
# Just loosy script optimized for private use
# nice modification by smg
#
# Needed packages (gentoo style)
# media-video/transcode
# media-video/mjpegtools
# media-video/vcdimager
# app-cdr/cdrdao
# media-video/mplayer
#
# feel free to distribute or change code
# mail: t4c[at]ghcif[dot]de
# ERROR Constants
E_EXIT_SUCCESS=0
E_MISSING_TOOLS=23
E_UNEXPECTED_ERROR=42
# Cleans up build environment
cleanup() {
echo -n "Cleanup ${1}? (y/n): "
read answer
case $answer in
y*|Y*)
rm -iv "${1}"
rm -iv "${1%.*}.bin"
exit $E_EXIT_SUCCESS
;;
*)
exit $E_EXIT_SUCCESS
;;
esac
}
# Burn the images
burn() {
echo -n "Ready to burn ${1}? (y/n): "
read answer
case $answer in
y*|Y*)
$CDRDAO write --device 0,1,0 --driver generic-mmc-raw --speed 8 "${1}" # to be set up
;;
*)
cleanup "${1}"
;;
esac
}
# Check clean build environment
check_environment() {
echo "(!!!) Warning: If you've not set your burning device now, hit CTRL-C to abort and set appropriate device + speed (!!!)"
for count in {5..1}; do echo -n "${count}.. "; sleep 1; done
TRANSCODE=$(whereis transcode | awk -F: '{print $2}' | cut -d ' ' -f 2)
MPLAYER=$(whereis mplayer | awk -F: '{print $2}' | cut -d ' ' -f 2)
MP2ENC=$(whereis mp2enc | awk -F: '{print $2}' | cut -d ' ' -f 2)
MPLEX=$(whereis mplex | awk -F: '{print $2}' | cut -d ' ' -f 2)
VCDIMAGER=$(whereis vcdimager | awk -F: '{print $2}' | cut -d ' ' -f 2)
CDRDAO=$(whereis cdrdao | awk -F: '{print $2}' | cut -d ' ' -f 2)
tools=(transcode, mplayer, mp2enc, mplex, vcdimager, cdrdao)
if [ -z "${TRANSCODE}" -o -z "${MPLAYER}" -o -z "${MP2ENC}" -o -z "${MPLEX}" -o -z "${VCDIMAGER}" -o -z "${cdrdao}" ]; then
echo - "Your are missing one of the follow tools: ${tools}. Please verify you have installed all!"
exit $E_MISSING_TOOLS
fi
encode
}
# Encode to fit VCD standard
encode vcd() {
# to be implemented
}
# Encode to fit SVCD standard
encode_svcd() {
for i in *\.avi; do
ORIGINAL=$(sed "s/.avi//" <<< "${i}")
nice -20 $TRANSCODE -i "${ORIGINAL}.avi" -x auto,auto -y ffmpeg,mp2 -F svcd -E 44100,16,2 -o "${ORIGINAL}"
nice -20 $MPLAYER -vo null -ao pcm "${ORIGINAL}.avi"
nice -20 mv audiodump.wav "${ORIGINAL}.wav"
nice -20 $MP2ENC -r 44100 -b 192 -o "${ORIGINAL}.mpa" < "${ORIGINAL}.wav"
nice -20 $MPLEX -f 4 -o "${ORIGINAL}.mpg" "${ORIGINAL}.m2v" "${ORIGINAL}.mpa"
nice -20 $VCDIMAGER -t svcd -v "${ORIGINAL}.mpg" -c "${ORIGINAL}.cue" -b "${ORIGINAL}.bin"
rm -iv ${ORIGINAL}|>.wav
rm -iv ${ORIGINAL}|>.mp2
rm -iv ${ORIGINAL}|>.mpa
rm -iv ${ORIGINAL}|>.mpg
burn "${ORIGINAL}.bin"
done
}
# Encode to fit DVD standard
encode_dvd() {
for i in *\.avi; do
ORIGINAL=$(sed "s/.avi//" <<< "${i}")
nice -20 $TRANSCODE -i $ORIGINAL.avi -y mpeg -F d -x auto,auto -E 44100 -b 128 -o $ORIGINAL
nice -20 $MPLEX -f 9 -o $ORIGINAL.mpg $ORIGINAL.m2v $ORIGINAL.mpa
# burn to be implemented
done
}
# vcd/svcd/dvd - make a choise
choise() {
echo -n "You want to create VCD/SVCD or DVD? Choise: "
read answer
case $answer in
vcd|VCD)
encode_vcd
;;
svcd|SVCD)
encode_svcd
;;
dvd|DVD)
encode_dvd
;;
*)
exit $E_UNEXPECTED_ERROR
;;
esac
}
# main method
perform() {
if [ "${1}" -e "--force"]; then
choise
else
check_environment && choise
fi
}
perform
# E-O-F