Skip to content

Instantly share code, notes, and snippets.

@0mark
Last active December 21, 2015 08:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 0mark/6282286 to your computer and use it in GitHub Desktop.
Save 0mark/6282286 to your computer and use it in GitHub Desktop.
Buuuuuuuuurn!
#!/bin/bash
# ***** CONFIG
DRV="/dev/sr0"
# ***** /CONFIG
# ***** FUNCTIONS
doordie() {
if [ "$1" == "" ]; then
eval $2
else
echo $1
eval $2 &> $ERRFILE
fi
if [ $? -gt 0 ]; then
echo -e "\n${E}**** $3${C}\n"
cat "$ERRFILE"
echo -e "$N"
exit
fi
echo -e "${G}OK${N}"
}
# TODO: This should be moved into a seperate file
audio_convert() {
EXT="${1/*./}"
case "$EXT" in
mp3|ogg|wmv|flac|mpg|mpeg|mp4|flv|avi|wmv|3gp)
mplayer -quiet -vo null -vc dummy -af volume=0,resample=44100:0:2,channels=2,format=s16le -ao pcm:waveheader:file="$2/$(basename "$1" ."$EXT").wav" "$1" &> $ERRFILE
# mplayer has no exit codes...
cat $ERRFILE | grep "Starting playback" > /dev/null
S=$?
;;
#mp3|mp2)
# echo mpg123 --rate 44100 --stereo --buffer 3072 --resync -w "$TMPDIR/$(basename "$i" .mp3).wav" "$i";
#;;
#sid)
#;;
#mod|xm)
#;;
#mid)
#;;
*)
echo "File type $EXT unhandled ($(basename "$1"))." > "$ERRFILE"
S=1
;;
esac
#if [ $S -gt 0 ]; then return 255; fi
return $S
}
pecho() {
echo -e " ${G}$1${N} ${M}$2${N}\n $3"
}
showhelp() {
echo "Usage: torchwood ACTION [...]"
echo
echo "ACTIONS"
pecho "burn" "filename" "Burn ISO, BIN or CUE Image"
pecho "mkiso" "path|file|- [target]" "Burn content of directory or files in list [or create ISO Image TARGET]"
pecho "audio" "FILES [target]" "Convert and burn FILES [or create ISO Image TARGET]"
pecho "2iso" "filename [target]" "Convert IMG or CCD Image to ISO Image"
pecho "wipe" "all|fast" "Erase all or fast"
echo
}
# ***** /FUNCTIONS
E="\e[1;31m" # Error
N="\e[m" # Normal
G="\e[0;32m" # Good
C="\e[0;37m" #
M="\e[0;36m" #
ERRFILE=$(mktemp)
case "$1" in
# ** Images
iso|bin|cue|burniso|burnbin|burncue|burn)
if [ -f "$2" ]; then
if [ "$(file -b "$2" | grep "# ISO")"!="" ]; then
doordie "Burn ISO to $DRV" "wodim -overburn -v dev=\"$DRV\" \"$2\"" "Failed!"
# growisofs -dvd-compat -Z /dev/cdrw=/path/to/iso
elif [ "$(file -b "$2" | grep "# BIN")"!="" -o "$(file -b "$2" | grep "# CUE")"!="" ]; then
doordie "Burn BIN/CUE to $DRV" "cdrdao write --device \"$DRV\" \"$2\"" "Failed!"
fi
else
echo "Image $1 not found."
fi
;;
# bin|cue|burnbin|burncue)
# if [ -f "$2" ]; then
# doordie "Burn BIN/CUE to $DRV" "cdrdao write --device \"$DRV\" \"$2\"" "Failed!"
# else
# echo "Image $1 not found."
# fi
# ;;
img2iso|ccd2iso|imgtoiso|ccdtoiso|2iso)
if [ -f "$2" ]; then
if [ "$3" == "" ]; then
doordie "Converting to ISO" "ccd2iso \"$2\" \"$(basename "$2" | sed 's/\.[^.]*$//').iso\"" "Failed!"
else
PATH="$(dirname "$3")"
if [ "$PATH" == "" -o -d $PATH ]; then
doordie "Converting to ISO" "ccd2iso \"$2\" \"$3\"" "Failed!"
else
echo "Path $PATH does not exist."
fi
fi
else
echo "Image $2 not found."
fi
;;
# ** Data
data|mkiso|makeiso|dvd|mkisodvd|makeisodvd|mkdvd|makedvd|cd|mkisocd|makeisocd|mkcd|makecd)
if [ "$2" == "-" ]; then
# On the fly burning is possible. But what if i want to burn from ftpfs or stuff? Copying is safer...
SRC=$(mktemp -d --suffix torchwood)
c=0
while read -r f; do
doordie "Copying $f to temp ..." "cp \"$f\" \"$SRC\"" "Failed!"
done < /dev/stdin
name=""
DELSRC="true"
elif [ -f "$2" ]; then
SRC=$(mktemp -d --suffix torchwood)
c=0
while read -r f; do
doordie "Copying $f to temp ..." "cp \"$f\" \"$SRC\"" "Failed!"
done < "$2"
name=$(basename $2)
DELSRC="true"
elif [ -d "$2" ]; then
# No copying when given a directory. The user shall know what he does...
SRC="$2"
name=$(basename $2)
else
echo "File or directory $2 does not exists"
exit
fi
# I guess there is no need to differenciate between cd and dvd
# case "$1" in {
# dvd|mkisodvd|makeisodvd|mkdvd|makedvd) TYPE="dvd" ;;
# cd|mkisocd|makeisocd|mkcd|makecd) TYPE="cd" ;;
# *) if [ $(du -sm "$SRC" | sed 's/M.*//') -gt 700 ]; TYPE="dvd"; else TYPE="cd" fi ;;
# esac
if [ "$3" == "" ]; then
# case "$type" in
# dvd)
# doordie "Burning DVD ..." "growisofs -Z \"$DRV\" -r -J \"$SRC\""
# ;;
# cd)
doordie "Burning ..." "mkisofs -iso-level 4 -V \"$name\" -J -r \"$SRC\" | wodim -v fs=6m speed=2 dev=\"$DRV\" –" "Failed!"
# ;;
# esac
else
FPATH="$(dirname "$3")"
if [ "$FPATH" == "" -o -d $FPATH ]; then
# case "$type" in
# dvd)
# ;;
# cd)
doordie "Creating DVD ISO ..." "mkisofs -V \"$name\" -J -r -o \"$3\" \"$SRC\"" "Failed!"
# ;;
# esac
else
echo "Path $FPATH does not exist."
fi
fi
if [ "$DELSRC" == "true" ]; then
rm "$SRC/"*
rmdir "$SRC"
fi
;;
# data|datadvd|dvd|mkiso|makeiso)
# echo "To be done..."
# ;;
# ** Multimedia
audio|music)
TMPDIR=$(mktemp -d --suffix torchwood)
if [ "$2" == "-" ]; then
c=0
while read -r f; do
doordie "Converting $(basename "$f") ..." "audio_convert \"$f\" \"$TMPDIR\"" "Failed!"
done < /dev/stdin
elif [ -f "$2" ]; then
c=0
while read -r f; do
doordie "Converting $(basename "$f") ..." "audio_convert \"$f\" \"$TMPDIR\"" "Failed!"
done < "$2"
elif [ -d "$2" ]; then
for i in "$1"*"."*; do
doordie "Converting $(basename "$f") ..." "audio_convert \"$f\" \"$TMPDIR\"" "Failed!"
done
else
echo "File or directory $2 does not exists"
exit
fi
if [ "$3" == "" ]; then
doordie "Burning CD..." "wodim -v -pad speed=1 dev=\"$DRV\" -dao -swab \"${TMPDIR}/\"*\".wav\"" "Failed!"
else
TPATH="$(dirname "$3")"
if [ "$TPATH" == "." -o -d $PATH ]; then
doordie "Creating ISO $3 ..." "mkisofs -r -o \"$3\" \"$TMPDIR\"" "Failed!"
else
echo "Invalid file."
fi
fi
rm "$TMPDIR/"*
rmdir "$TMPDIR"
;;
vcd|videocd)
echo "To be done..."
;;
videodvd)
echo "To be done..."
;;
# ** Rip
read|cd2iso|cdtoiso)
if [ "$2" == "" ]; then
echo "No target file specified."
else
if [ "$3" == "slow" ]; then slow=" speed=2"; fi
FPATH="$(dirname "$2")"
if [ "$FPATH" == "" -o -d $FPATH ]; then
doordie "Reading $DRV to $(basename $2)" "readcd -v dev=\"$DRV\" -clone${slow} -f \"$2\""
else
echo "Path $FPATH does not exist."
fi
fi
;;
rip)
echo "To be done..."
;;
ripdvd)
echo "To be done..."
;;
# ** Tools
wipe|clear|clean|empty|format|erase)
case "$2" in
all|disk|disk|everything)
doordie "Full blanking $DRV" "wodim -v dev=\"$DRV\" -blank=all" "Failed!"
;;
fast|minimal|toc)
doordie "Fast blanking $DRV" "wodim -v dev=\"$DRV\" -blank=fast" "Failed!"
;;
*)
echo "Invalid parameter $2 for action $1."
showhelp
;;
esac
;;
# ** Other
''|help)
showhelp
;;
*)
echo "Commando '$1' not known!"
echo
showhelp
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment