(GNOME2, Ubuntu 10.04 LTS) Eu fiz um script nautilus, então se eu tiver um diretório cheio de vários codecs, então eu só preciso clicar com o botão direito nessa pasta -> Scripts -> THISSCRIPT.txt, então pronto, ele converte recursivamente todos os arquivos de vídeo (identificados pelo tipo mime de vídeo) para codec x.264 com mp3 de 128 Kbit para avi. Para que tenham tamanho pequeno + boa qualidade. Isso funciona, ótimo!
PERGUNTA: Se eu pressionar "Cancelar" na barra de progresso do Zenity, o mencoder não termina.. Como posso fazer isso? Quer dizer, preciso disso. Se eu pressionar "Cancelar" na barra de progresso do Zenity, o mencoder será encerrado. Como fazer isso?
#!/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
Responder1
Você precisa usar a --auto-kill
opção. Renovei um pouco o script (gosto do seupensando fora do quadradouso de rev
, mas existem outras maneiras :) ...Aqui está uma.
Eu usei yad
em vez de zenity
. É um garfo dezenidade, e os comandos são basicamente os mesmos. Pelo que li,simestá sendo desenvolvido de forma mais ativa e tem mais recursos (e esta foi uma boa chance para eu brincar com ele). A --auto-kill
opção funciona com amboszenidadeesim.
Além de mostrar a porcentagem, o script mostra umacontagem de tantos(por exemplo, 3 de 8) mais o nome do arquivo atual. O cálculo percentual usa awk
(apenas porque estou confortável com sua sintaxe).
Quanto à sua pergunta específica, --auto-kill
deve 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"