#!/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