Você precisa usar a opção --auto-kill
. Eu refiz um pouco o script (gosto do uso do pensando-fora-do-quadrado de rev
, mas existem outras formas :) ... Aqui está uma.
Eu usei yad
em vez de zenity
. É um fork do zenity , e os comandos são basicamente os mesmos. Pelo que eu li, o yad está sendo desenvolvido mais ativamente e tem mais recursos (e essa foi uma boa chance para eu brincar com ele). A opção --auto-kill
funciona com zenity e yad .
Além de mostrar a porcentagem, o script mostra uma contagem de tantos (por exemplo, 3 de 8) mais o nome do arquivo atual. O cálculo da porcentagem usa awk
(apenas porque estou confortável com sua sintaxe).
Responda à sua pergunta específica, apenas --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"