Last active
December 21, 2015 08:59
-
-
Save 0mark/6282286 to your computer and use it in GitHub Desktop.
Buuuuuuuuurn!
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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