# HG changeset patch # User Rohit Joshi # Date 1241463247 0 # Node ID 5173d70b4b1b6ac5475b64cca43c90eeef77c4fe # Parent 7a5c4df5744f8955ad58b252e3ff50fd83a135f0 Add mp3,backup,dvd-video,vcd,svcd modes to burnbox diff -r 7a5c4df5744f -r 5173d70b4b1b tinyutils/burnbox --- a/tinyutils/burnbox Tue May 05 00:14:25 2009 +0200 +++ b/tinyutils/burnbox Mon May 04 18:54:07 2009 +0000 @@ -4,74 +4,349 @@ # can burn ISO images, blank rewritable CD or create audio CD with WAV. # # (c) - SliTaz GNU/Linux 2009 - GNU GPL v3 + +# Authors : Christophe Lincoln +# Rohit Joshi # -VERSION=20090204 +VERSION=20090504 +TMPDIR="/tmp/burn-cd" + + +chk_install() +{ + for pkg in $@ + do + if [ ! -d /var/lib/tazpkg/installed/${pkg} ]; then + UNINSTALLED="$UNINSTALLED $pkg" + fi + done + if [ ! "$UNINSTALLED" = "" ] ; then + xterm -bg gray93 -fg black -geometry 80x16 -title "INSTALL PACKAGE" \ + -e "echo -n \"this option depends on $UNINSTALLED Please install and try again\"; sleep 4;" + fi +} # Display audio cd size. audio_cd_stats() { - AUDIO_CD_SIZE=`du -m /tmp/audio-cd | awk '{print $1}'` - TRACK_NB=`ls -1 /tmp/audio-cd | wc -l` + AUDIO_CD_SIZE=`du -m $TMPDIR | awk '{print $1}'` + TRACK_NB=`ls -1 $TMPDIR | wc -l` echo -n "Total tracks: $AUDIO_CD_SIZE Mb" } +# Display cd/dvd size. +disk_stats() +{ + DISK_SIZE=`du -m $TMPDIR | awk '{print $1}'` + TRACK_NB=`ls -1 $TMPDIR | wc -l` + echo -n "Total size: $DISK_SIZE Mb" +} + decode_ogg() { - if ls /tmp/audio-cd | grep -q .ogg; then - cd /tmp/audio-cd + if ls $TMPDIR | grep -q .ogg; then + cd $TMPDIR xterm -bg gray93 -fg black -geometry 80x16 -title "Oggdec" \ -e 'for i in *.ogg; do oggdec "$i" && rm "$i"; done; sleep 2' fi } +decode_mp3() +{ + + if ls $TMPDIR | grep -q .mp3; then + cd $TMPDIR + UNINSTALLED="" + chk_install "mpg123" + if [ "$UNINSTALLED" = "" ] ; then + xterm -bg gray93 -fg black -geometry 80x16 -title "mpg123" \ + -e 'for file in *.mp3; do + mpg123 --rate 44100 --stereo --buffer 3072 --resync -w `basename "$file" .mp3`.wav "$file" && rm "$file"; + done; sleep 2' + + fi + fi +} + +decode_video() +{ + # convert videos into a VCD/SVCD/DVD compatible mpg video format + if ls $TMPDIR | grep -q ".avi\|.mov\|.wmv\|.flv" ; then + cd $TMPDIR + UNINSTALLED="" + chk_install "ffmpeg" + + if [ "$UNINSTALLED" = "" ] ; then + xterm -bg gray93 -fg black -geometry 80x16 -title "ffmpeg" \ + -e ' echo -n "Select target type (pal-vcd ntsc-vcd pal-svcd ntsc-svcd pal-dvd ntsc-dvd) "; read TARGET_OPTIONS + for file in *.avi *.wmv *.mov *.flv; do + ext=`echo "${file##*.}"` + output_file=`basename "$file" .$ext`.mpg + ffmpeg -i "$file" -target "$TARGET_OPTIONS" "$output_file" && rm "$file"; + done; sleep 2; + ' + fi + fi + + +} + +# convert spaces in filename with _ and remove special characters "()'&" {}\! and translate uppercase to lowercase +fix_filename() +{ + ls /tmp/burn-cd/* | while read file + do + mv "$file" `echo $file | tr ' ' '_' | tr -d '[{}(),\!&]' | tr -d "\'" | tr '[A-Z]' '[a-z]' | sed 's/_-_/_/g' ` + done + +} + # We must think about " space " between directory/track and # filter directory copy to avoid copying other files than audio. # Only burning non-compressed wav format is supported directly. + copy_audio_file() { if ls "$NEW_TRACK" | grep -q .ogg; then - cp "${NEW_TRACK%.ogg}.ogg" /tmp/audio-cd - decode_ogg + cp "${NEW_TRACK%.ogg}.ogg" $TMPDIR + fix_filename + decode_ogg + elif ls "$NEW_TRACK" | grep -q ".[m\|M][p\|P]3"; then + # cp "${NEW_TRACK%.mp3}.mp3" $TMPDIR + cp "$NEW_TRACK" "$TMPDIR" + fix_filename + decode_mp3 else - cp "${NEW_TRACK%.wav}.wav" /tmp/audio-cd + cp "${NEW_TRACK%.wav}.wav" $TMPDIR fi } + + copy_audio_dir() { - for i in .wav .ogg + + for i in .wav .ogg .mp3 do - cp "$NEW_DIR"/*$i /tmp/audio-cd 2>/dev/null + cp "$NEW_DIR"/*$i $TMPDIR 2>/dev/null done - decode_ogg + fix_filename + decode_ogg + decode_mp3 } +# Only burning mpg video format is supported directly. MPEG-1 video for vcd and MPEG-2 for svcd and dvd +copy_video_file() +{ + if ls "$NEW_TRACK" | grep -q ".mpg\|.mpeg"; then + cp "${NEW_TRACK%.mp*}.mpg" $TMPDIR + elif ls "$NEW_TRACK" | grep -q ".avi\|.mov\|.wmv\|.flv"; then + ext=`echo "${NEW_TRACK##*.}"` + cp "${NEW_TRACK%.$ext}.$ext" $TMPDIR + fix_filename + if "$CHECKBOX_DECODE" ; then decode_video ; fi + else + echo "mpg format supported" + fi +} + +copy_video_dir() +{ + for i in .mpg .avi .mov .wmv .mpeg .flv + do + cp "$NEW_DIR"/*$i $TMPDIR 2>/dev/null + done + fix_filename + if "$CHECKBOX_DECODE" ; then decode_video ; fi +} + +copy_file() +{ + case "$BURN_MODE" in + audio-cd) + copy_audio_file ;; + vcd|svcd|video-dvd) + copy_video_file ;; + *) + cp "$NEW_TRACK" $TMPDIR ; fix_filename ;; + esac + +} + +copy_dir() +{ + case "$BURN_MODE" in + audio-cd) + copy_audio_dir ;; + vcd|svcd|video-dvd) + copy_video_dir ;; + *) + cp "$NEW_DIR" $TMPDIR 2>/dev/null + fix_filename ;; + esac +} +# =====ISO===== burn_iso() { xterm -bg gray93 -fg black -geometry 80x16 -title "Wodim" \ -e "wodim -v speed=$SPEED dev=$DEVICE $OPTIONS $ISO_IMAGE; sleep 4" } - +# =====AUDIO===== # Use -pad to avoid file size error. burn_audio() { - xterm -bg gray93 -fg black -geometry 80x16 -title "Wodim" \ - -e "wodim -v speed=$SPEED dev=$DEVICE $OPTIONS -pad -dao -audio /tmp/audio-cd/*.wav; sleep 4" + UNINSTALLED="" + chk_install "cdrkit" + if [ "$UNINSTALLED" = "" ] ; then + xterm -bg gray93 -fg black -geometry 80x16 -title "Wodim:AUDIO" \ + -e " echo \"BURN TYPE SELECTED = $BURN_MODE \"; sleep 1; + wodim -v speed=$SPEED dev=$DEVICE $OPTIONS -pad -dao -audio $TMPDIR/*.wav; sleep 4 + " + fi +} +# =====DATA===== +burn_cddata() +{ + UNINSTALLED="" + chk_install "cdrkit" + if [ "$UNINSTALLED" = "" ] ; then + xterm -bg gray93 -fg black -geometry 80x16 -title "Wodim:CD DATA" \ + -e " echo \"BURN TYPE SELECTED = $BURN_MODE \"; sleep 1; + wodim -v speed=$SPEED dev=$DEVICE $OPTIONS -pad -dao -data $TMPDIR/*; sleep 4 + " + fi } +burn_dvddata() +{ + UNINSTALLED="" + chk_install "dvd+rw-tools" + if [ "$UNINSTALLED" = "" ] ; then + xterm -bg gray93 -fg black -geometry 80x16 -title "growisofs:DVD DATA" \ + -e " echo \"BURN TYPE SELECTED = $BURN_MODE \"; sleep 1; + # no iso-file available + growisofs -dvd-compat -speed=$SPEED -pad -J -r -f -Z $DEVICE $TMPDIR/*; sleep 4 + " + fi +} + +# ====VIDEO===== +burn_dvdvideo() +{ + UNINSTALLED="" + chk_install "dvd+rw-tools" + + # current assumption: compatible dvd-video format + if [ "$UNINSTALLED" = "" ] ; then + xterm -bg gray93 -fg black -geometry 80x16 -title "growisofs:DVD VIDEO" \ + -e " echo \"BURN TYPE SELECTED = $BURN_MODE\"; sleep 1; + growisofs -dvd-video -udf -pad -J -r -f -Z $DEVICE -speed=$SPEED $TMPDIR/*; sleep 2 + " + fi +} +burn_vcd() +{ + UNINSTALLED="" + chk_install "vcdimager" + if [ "$UNINSTALLED" = "" ] ; then + mkdir -p $TMPDIR/vcd + xterm -bg gray93 -fg black -geometry 80x16 -title "vcdimager:VCD" \ + -e " echo \"BURN TYPE SELECTED = $BURN_MODE $UNINSTALLED \"; sleep 1; + vcdimager -t vcd2 -l VCD -c $TMPDIR/vcd/vcd.cue -b $TMPDIR/vcd/vcd.bin $TMPDIR/*.mpg; sleep 2; + # cdrdao write --device $DEVICE $TMPDIR/vcd/vcd.cue; sleep 2 + wodim -v speed=$SPEED dev=$DEVICE $OPTIONS -pad -dao cuefile=$TMPDIR/vcd/vcd.cue ; sleep 2 + " + fi + +} + +burn_svcd() +{ + UNINSTALLED="" + chk_install "vcdimager" + if [ "$UNINSTALLED" = "" ] ; then + mkdir -p $TMPDIR/svcd + xterm -bg gray93 -fg black -geometry 80x16 -title "vcdimager:SVCD" \ + -e " echo \"BURN TYPE SELECTED = $BURN_MODE\" + vcdimager -t svcd -l SVCD -c $TMPDIR/svcd/svcd.cue -b $TMPDIR/svcd/svcd.bin $TMPDIR/*.mpg; sleep 2; + # cdrdao write --device $DEVICE $TMPDIR/svcd/svcd.cue; sleep 2; + wodim -v speed=$SPEED dev=$DEVICE $OPTIONS -pad -dao cuefile=$TMPDIR/svcd/svcd.cue ; sleep 2 + " + fi +} + +# =====CLONE===== +rip_disc() +{ + SUGGESTED="cdrkit-isoinfo" + if ! "$CHECKBOX_FOLDER" ; then SAVE_DISC="/tmp/burn-cd" ; fi + if [ -d /var/lib/tazpkg/installed/${SUGGESTED} ]; then + xterm -bg gray93 -fg black -geometry 80x16 -title "dd" \ + -e ' echo "RIPPING DISK AT $SAVE_DISC..." + COUNT=`isoinfo -d -i $DEVICE | grep "^Volume size is:" | cut -d " " -f 4` + BLOCK=`isoinfo -d -i $DEVICE | grep "^Logical block size is:" | cut -d " " -f 5` + dd if=$DEVICE of=$SAVE_DISC/image.iso bs=$BLOCK count=$COUNT; sleep 4 + sleep 2;' + else + xterm -bg gray93 -fg black -geometry 80x16 -title "dd" \ + -e ' echo " Though you dont have the cdrkit-extras package installed, \ + you can still rip but it may be slower" + echo -n "would you like to continue (y/N)? : "; read ans + if [ "$ans" = "y" ]; then + echo "RIPPING DISK AT $SAVE_DISC...." + dd if=$DEVICE of=$SAVE_DISC/image.iso; + sleep 2; + fi + ' + fi + if ! "$CHECKBOX_FOLDER" ; then + ISO_IMAGE="/tmp/burn-cd/image.iso" + xterm -bg gray93 -fg black -geometry 80x16 -title "dd" \ + -e ' echo -e " ---Please insert EMPTY DISK at $DEVICE ---\n ---press ENTER to continue..." && read close;' + burn_iso + fi +} + +blank_dvd() +{ + xterm -bg gray93 -fg black -geometry 80x16 -title "growisofs:DVD ERASE" \ + -e "growisofs -Z $DEVICE=/dev/zero" +} + +burn_disc() +{ + case "$BURN_MODE" in + audio*) + burn_audio ;; + data-cd*) + burn_cddata ;; + data-dvd*) + burn_dvddata;; + video*) + burn_dvdvideo;; + vcd*) + burn_vcd;; + svcd*) + burn_svcd;; + esac + +} # Main GTK interface MAIN_DIALOG=' - + @@ -131,7 +406,7 @@ - + " + + " +# +# +# tmp3= export MAIN_DIALOG=${MAIN_DIALOG}' @@ -260,9 +608,9 @@ if [ -n "$1" ]; then $1 else - mkdir -p /tmp/audio-cd + mkdir -p $TMPDIR gtkdialog --center --program=MAIN_DIALOG >/dev/null - rm -rf /tmp/audio-cd + rm -rf $TMPDIR fi exit 0