(GNOME2, Ubuntu 10.04 LTS) He creado un script nautilus, de modo que si tengo un directorio lleno de varios códecs, solo necesito hacer clic derecho en esa carpeta -> Scripts -> THISSCRIPT.txt, y listo, Convierte recursivamente todos los archivos de vídeo (identificados por el tipo MIME de vídeo) al códec x.264 con mp3 de 128 Kbit a avi. Para que tengan tamaño pequeño+buena calidad. ¡Esto funciona, genial!
PREGUNTA: Si presiono "Cancelar" en la barra de progreso de Zenity, el mencoder no finaliza. ¿Cómo puedo hacer esto? Quiero decir, necesito que si presiono "Cancelar" en la barra de progreso de Zenity, finalizará mencoder. ¿Como hacer esto?
#!/bin/bash
which mencoder > /dev/null 2>&1; if [[ $? -ne 0 ]]; then echo -e '\nerror, no mencoder package detected'; exit 1; fi
which zenity > /dev/null 2>&1; if [[ $? -ne 0 ]]; then echo -e '\nerror, no zenity package detected'; exit 1; fi
HOWMANYLEFT=0
find . -type f | xargs -I {} file --mime-type {} | fgrep "video/" | rev | awk 'BEGIN {FS="/oediv :"} { print $NF}' | rev | while read ONELINE
do
if file "$ONELINE" | egrep -qvi "x.264|h.264"
then echo $ONELINE
fi
done | sed 's/^.\///' | tee /tmp/vid-conv-tmp.txt | while read ONELINE
do
HOWMANY=`wc -l /tmp/vid-conv-tmp.txt | cut -d " " -f1`
mencoder "$ONELINE" -o "OK-$ONELINE.avi" -ovc x264 -x264encopts bitrate=750 nr=2000 -oac mp3lame -lameopts cbr:br=128 > /dev/null 2>&1
HOWMANYLEFT=`expr $HOWMANYLEFT + 1`
echo "scale=10;($HOWMANYLEFT / $HOWMANY) * 100" | bc | cut -d "." -f1
done | zenity --progress --text="Processing files ..." --auto-close --percentage=0
Respuesta1
Necesitas usar la --auto-kill
opción... He renovado un poco el script (me gusta tupensar fuera del cuadradouso de rev
, pero hay otras formas :) ... Aquí hay una.
He usado yad
en lugar de zenity
. es un tenedor dezenidad, y los comandos son básicamente los mismos. Por lo que he leído,jajajase está desarrollando más activamente y tiene más funciones (y esta fue una buena oportunidad para mí de jugar con él). La --auto-kill
opción funciona con ambos.zenidadyjajaja.
Además de mostrar el porcentaje, el guión muestra unacuenta de tantos(por ejemplo, 3 de 8) más el nombre del archivo actual. El cálculo de porcentaje utiliza awk
(solo porque me siento cómodo con su sintaxis) ..
Con respecto a su pregunta específica, --auto-kill
debería ser suficiente.
for p in mencoder yad ;do
which $p >/dev/null 2>&1 || { echo -e '\nerror, no $p package detected'; exit 1; }
done
list="$(mktemp)"
find . -type f -print0 | # -print0 caters for any filename
xargs --null file --print0 --mime-type |
sed -n 's|\x00 *video/.*|\x00|p' | tr -d $'\n' |
xargs --null file --print0 |
sed -nr '/\x00.*(x.264|h.264)/!{s/^\.\///; s/\x00.*//; p}' >"$list"
# At this point, to count how many files there are to process, break out of the pipe.
# You can't know how many there are until they have all passed through the pipe.
fct=0; wcfct=($(wc "$list"));
while IFS= read -r file ;do
((fct+=1)); pcnt=$(awk -v"OFMT=%.2f" "BEGIN{ print (($fct-1)/$wcfct)*100 }")
echo "# $pcnt%: $fct of $wcfct: $file"; echo $pcnt
mencoder "$file" -o "OK-$file.avi" -ovc x264 -x264encopts bitrate=750 nr=2000 -oac mp3lame -lameopts cbr:br=128 >/dev/null 2>&1
done <"$list" | yad --title="Encoding Progress" --progress --geometry +100+100 --auto-close --auto-kill
rm "$list"