Destaques

[Script] Adicionando Scripts f

Não existe nada melhor do que ferramentas que nos auxiliam naquelas horas que mais precisamos. Confesso que usar o terminal para fazer coisas simples pode ser um pouco cansativo (apesar de eu não achar que TODO trabalho feito no terminal é cansativo e mais difícil, tudo é relativo). Mas temos que evidenciar que trabalho com grupo de arquivos pode ser muito simples com a ajuda de scripts prontos. Aqui segue uma grande dica que depois que descobri reduziu horas desperdiçadas com a automação que os scripts dão. O Nautilus (não sei ao certo a partir de qual versão, mas funciona no GNOME 2.28.1) passou a incorporar uma funcionalidade extra. Dentro da pasta ~/.gnome2/nautilus-scripts você pode colocar scripts que podem ser acessados em qualquer lugar clicando com o botão direito do mouse. Os scripts devem ser feitos com os parametros de entrada sendo o nome dos arquivos. Então chega de papo e vamos ao que interessa. Eu criei um script que funciona em conjunto com o ffmpeg para converter qualquer vídeo para o formato FLV usado em players flash para internet e também em sites como blip.tv e youtube (é bem interessante se você quer personalizar sua conversão e reduzir tempo para seu vídeo ficar pronto nesses sites). Primeiro você deve instalar o ffmpeg (procure no seu gerenciador de pacotes) e o zenity (caixas de diálogo) Depois vc deve criar um arquivo na pasta de scripts do nautilus com o nome que preferir. Em seguida crie o código do seu script, no caso estou passando o código do meu script: #!/bin/bash# # Author : Walker Gusmão Leite <walker@praiseweb.com.br> # # Copyright (C) 2005,2010 Walker Gusmão Leite <walker@praiseweb.com.br> # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. MAXCPT=50000; if [ $# -eq 0 ]; then here=`pwd`”/.” files=`zenity –file-selection –multiple –separator=”|” –filename=”$here”`”|” #if $? != 0, user click on cancel button, so exit if [ "$?" != 0 ] ; then exit fi cpt=0 # I put all filename in $selection here because I didn’t managed to put filenames with whitespace in $* while [ ${#files} -gt 0 ]; do f=”`echo $files |cut -f1 -d’|'`” isvideo=`file -bi “$f” |grep -c image` if [ $isvideo -eq 1 ]; then selection[$nb_images]=$f let “nb_images++” fi files=`echo $files |cut -f2- -d”|”` let “cpt++” # only to avoid infinite loop (do not occured normaly, but nobody never know.. perhaps!) if [ $cpt -gt $MAXCPT ]; then shift fi done fi videosize=`zenity –title “Selecione o tamanho do vídeo” –text “Selecione o tamanho do vídeo” –list –radiolist –separator=” ” –column=”" –column=”Tamanho” FALSE “160×120″ FALSE “320×240″ TRUE “640×480″ FALSE “800×600″ FALSE “1024×768″ FALSE “1280×720″ –height=220` video_width=${videosize%x*} video_height=${videosize#*x} videobitrate=`zenity –title “Selecione a qualidade do vídeo (bitrate)” –text “Selecione a qualidade do vídeo (bitrate)” –scale –value=”800″ –min-value=”80″ –max-value=”4000″ –step=”10″ –height=220` videobitrate=$(($videobitrate*1024)) videorate=`zenity –title “Selecione o framerate do vídeo (FPS)” –text “Selecione o framerate do vídeo (FPS)” –scale –value=”20″ –min-value=”2″ –max-value=”60″ –step=”1″ –height=220` videofilters=`zenity –title “Selecione os filtros” –text “Selecione os filtros” –list –checklist –separator=” ” –column=”" –column=”Filtros:” FALSE “Desentrelaçar” –height=220` for i in $videofilters; do if [ $i = "Desentrelaçar" ]; then filter=” -deinterlace”; fi; done videocut=`zenity –title “Selecione áreas de corte” –text “Selecione áreas de corte” –list –checklist –separator=” ” –column=”" –column=”Corte:” FALSE “Superior” FALSE “Direita” FALSE “Esquerda” FALSE “Inferior” –height=220` max_cut_w=$(($video_width-1)) max_cut_h=$(($video_height-1)) for i in $videocut; do if [ $i = "Superior" ]; then corte[0]=`zenity –title “Selecione o corte superior em pixels” –text “Selecione o corte superior em pixels” –scale –value=”1″ –min-value=”1″ –max-value=”$max_cut_h” –step=”1″ –height=220`; fi; if [ $i = "Direita" ]; then corte[1]=`zenity –title “Selecione o corte da direita em pixels” –text “Selecione o corte da direita em pixels” –scale –value=”1″ –min-value=”1″ –max-value=”$max_cut_w” –step=”1″ –height=220`; fi; if [ $i = "Esquerda" ]; then corte[2]=`zenity –title “Selecione o corte da esquerda em pixels” –text “Selecione o corte da esquerda em pixels” –scale –value=”1″ –min-value=”1″ –max-value=”$max_cut_w” –step=”1″ –height=220`; fi; if [ $i = "Inferior" ]; then corte[3]=`zenity –title “Selecione o corte inferior em pixels” –text “Selecione o corte inferior em pixels” –scale –value=”1″ –min-value=”1″ –max-value=”$max_cut_h” –step=”1″ –height=220`; fi; done aux=1 video_init=`zenity –title “Selecione o início do vídeo” –text “Selecione o início do vídeo em segundos” –entry –entry-text=”0″ ` while [ $aux -eq 1 ]; do if [ $video_init -eq $video_init 2> /dev/null ]; then aux=0; else video_init=`zenity –title “Selecione o início do vídeo” –text “Entrada não reconhecida, por favor selecione o início do vídeo em segundos” –entry –entry-text=”0″ `; fi; done aux=1 video_end=`zenity  –title “Selecione o fim do vídeo” –text “Selecione o fim do vídeo em segundos, deixe 0 para converter o vídeo inteiro” –entry –entry-text=”0″ ` while [ $aux -eq 1 ]; do if [ $video_init -eq $video_init 2> /dev/null ]; then aux=0; else video_end=`zenity  –title “Selecione o fim do vídeo” –text “Entrada não reconhecida, por favor selecione o fim do vídeo em segundos, deixe 0 para converter o vídeo inteiro” –entry –entry-text=”0″ ` fi; done if [ $video_end -eq 0 ]; then video_end=”"; else video_end=`echo ” -t $video_end” `; fi #COMANDO while [ $# -gt 0 ]; do loc1=`file -bi “$1″ | grep -c video` loc2=`file -bi “$1″ | grep -c application` isvideo=$(($loc1+$loc2)) if [ $isvideo -gt 0 ]; then selection[$nb_videos]=$1 let “nb_videos++” else isdir=`file -b “$1″ |grep -c directory` if [ $isdir -eq 1 ]; then for f in `ls -1 “$1″`; do loc1=`file -bi “$1/$f” |grep -c video` loc2=`file -bi “$1/$f” |grep -c application` isvideo=$(($loc1+$loc2)) if [ $isvideo -gt 0 ]; then selection[$nb_videos]=”$1/$f” let “nb_videos++” fi done fi fi shift done n=$nb_videos let “n=n-1″ (for i in `seq 0 $n`;do video=${selection[$i]} vid_filename=`basename “$video”` vid_dirname=`dirname “$video”` #create directory if not exist and at least one image to process if [ ! -d "$vid_dirname/convertidos"  ]; then mkdir -p “$vid_dirname/convertidos” fi let “compteur += 1″ echo “Processando vídeo $compteur / $nb_videos $vid_filename …” ffmpeg -i “$video” -y -ar 44100 -ab 128 -croptop ${corte[0]:-”0″} -cropright ${corte[1]:-”0″} -cropbottom ${corte[3]:-”0″} -cropleft ${corte[2]:-”0″} -s $videosize -r $videorate -b $videobitrate $filter -f flv -ss ${video_init:-”0″} $video_end “$vid_dirname/convertidos/$vid_filename.flv” 2>&1 | zenity –width 500 –title “Processando vídeo $compteur / $nb_videos $vid_filename …” –text “Processando vídeo $compteur / $nb_videos $vid_filename … ” –progress –pulsate –auto-close let “progress = compteur*100/nb_videos” echo $progress done ) | zenity –progress –auto-close –title=”Convertendo vídeos” –text=”Convertendo vídeos …”  –percentage=0 (gnome-open “`dirname \”${selection[0]}\”`/convertidos”) & exit Depois dê permissão de execução ao arquivo do script. Pronto! Agora é só acessar o script selecionando seus arquivos e clicando com o botão direito do mouse no arquivo, acessando o menu scripts. Aproveitando a deixa passo o código de outro script para redimensionar imagens em massa: #!/bin/bash # # Author : Mathieu Vilaplana <mathieu@creationgif.com> # Author : Matthieu MARC <matthieu.marc@wanadoo.fr> # # Copyright (C) 2005,2006  Charles Bouveyron <charles.bouveyron@free.fr> # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. # pour l’internationalisation des messages # to generate the i18n file from .po file : # $ msgfmt -o .locale/fr/LC_MESSAGES/nis.mo .locale/fr/LC_MESSAGES/fr.po export TEXTDOMAIN=”nis” export TEXTDOMAINDIR=`dirname $0`”/.locale/” MAXCPT=50000; nb_images=0; selection=”"; txt_error=”`gettext ‘error’`” #test if a file has been selected if [ $# -eq 0 ]; then # zenity –error –title=$txt_error –text=”`gettext ‘You must select at least 1 file to process’`” here=`pwd`”/.” files=`zenity –file-selection –multiple –separator=”|” –filename=”$here”`”|” #if $? != 0, user click on cancel button, so exit if [ "$?" != 0 ] ; then exit fi cpt=0 # I put all filename in $selection here because I didn’t managed to put filenames with whitespace in $* while [ ${#files} -gt 0 ]; do f=”`echo $files |cut -f1 -d’|'`” isimage=`file -bi “$f” |grep -c image` if [ $isimage -eq 1 ]; then selection[$nb_images]=$f let “nb_images++” fi files=`echo $files |cut -f2- -d”|”` let “cpt++” # only to avoid infinite loop (do not occured normaly, but nobody never know.. perhaps!) if [ $cpt -gt $MAXCPT ]; then shift fi done fi #=================================== #       SELECT SIZE DIALOG txt_text=”`gettext ‘Choose which size to scale to’`” txt_title=$txt_text txt_size=”`gettext ’size’`” imgsize=`zenity –title “$txt_title” –text “$txt_text” –list –radiolist –separator=” ” –column=”" –column=”$txt_size” FALSE “160×120″ FALSE “320×240″ FALSE “640×480″ TRUE “800×600″ FALSE “1024×768″ FALSE “1280×720″ –height=220` #if $? != 0, user click on cancel button, so exit if [ "$?" != 0 ] ; then exit fi #user must select a target size imgsize=`echo $imgsize | sed ’s/ max//g’` if [ ! "$imgsize" ]; then zenity –error –title=$txt_error –text=”`gettext ’select a target size’`” # just restart myself (more user friendly I think) ($0 “$*”)& exit fi #transform 640×480 en 640×640 for convert to respect proportions himgsize=$imgsize val1=`echo “$imgsize” | awk -F’x’ ‘{ print $1  }’` imgsize=”${val1}x${val1}” #       END SELECT SIZE DIALOG #========================= #Select only images while [ $# -gt 0 ]; do isimage=`file -bi “$1″ | grep -c image` if [ $isimage -eq 1 ]; then selection[$nb_images]=$1 let “nb_images++” else isdir=`file -b “$1″ |grep -c directory` if [ $isdir -eq 1 ]; then for f in `ls -1 “$1″`; do isimage=`file -bi “$1/$f” |grep -c image` if [ $isimage -eq 1 ]; then selection[$nb_images]=”$1/$f” let “nb_images++” fi done fi fi shift done n=$nb_images let “n=n-1″ (for i in `seq 0 $n`;do picture=${selection[$i]} img_filename=`basename “$picture”` img_dirname=`dirname “$picture”` #create directory if not exist and at least one image to process if [ ! -d "$img_dirname/$himgsize"  ]; then mkdir -p “$img_dirname/$himgsize” fi let “compteur += 1″ echo “`gettext ‘# Processing image’` $compteur / $nb_images $img_filename …” convert -quality 80 -resize $imgsize “$picture” “$img_dirname/$himgsize/$img_filename” #convert -quality 80 -resize $imgsize “$picture” $himgsize/”$picture” let “progress = compteur*100/nb_images” echo $progress done ) | zenity –progress –auto-close –title=”`gettext ‘Scaling images’`” –text=”`gettext ‘Processing images …’`”  –percentage=0 (gnome-open “`dirname \”${selection[0]}\”`/$himgsize”) & exit

Ler mais

[Script] Adicionando Scripts funcionais ao nautilus, brinde 2 scripts

Posted by klarkc | Posted in Multimídia, Programação, Tutoriais, Utilidades | Posted on 18-01-2010

4

Não existe nada melhor do que ferramentas que nos auxiliam naquelas horas que mais precisamos. Confesso que usar o terminal para fazer coisas simples pode ser um pouco cansativo (apesar de eu não achar que TODO trabalho feito no terminal é cansativo e mais difícil, tudo é relativo).

Mas temos que evidenciar que trabalho com grupo de arquivos pode ser muito simples com a ajuda de scripts prontos. Aqui segue uma grande dica que depois que descobri reduziu horas desperdiçadas com a automação que os scripts dão.

O Nautilus (não sei ao certo a partir de qual versão, mas funciona no GNOME 2.28.1) passou a incorporar uma funcionalidade extra. Dentro da pasta ~/.gnome2/nautilus-scripts você pode colocar scripts que podem ser acessados em qualquer lugar clicando com o botão direito do mouse. Os scripts devem ser feitos com os parametros de entrada sendo o nome dos arquivos.

Então chega de papo e vamos ao que interessa. Eu criei um script que funciona em conjunto com o ffmpeg para converter qualquer vídeo para o formato FLV usado em players flash para internet e também em sites como blip.tv e youtube (é bem interessante se você quer personalizar sua conversão e reduzir tempo para seu vídeo ficar pronto nesses sites).

Primeiro você deve instalar o ffmpeg (procure no seu gerenciador de pacotes) e o zenity (caixas de diálogo)

Depois vc deve criar um arquivo na pasta de scripts do nautilus com o nome que preferir. Em seguida crie o código do seu script, no caso estou passando o código do meu script:

#!/bin/bash#
# Author : Walker Gusmão Leite <walker@praiseweb.com.br>
#
# Copyright (C) 2005,2010 Walker Gusmão Leite <walker@praiseweb.com.br>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

MAXCPT=50000;


if [ $# -eq 0 ]; then
here=`pwd`”/.”
files=`zenity –file-selection –multiple –separator=”|” –filename=”$here”`”|”
#if $? != 0, user click on cancel button, so exit
if [ "$?" != 0 ] ; then
exit
fi
cpt=0
# I put all filename in $selection here because I didn’t managed to put filenames with whitespace in $*
while [ ${#files} -gt 0 ]; do
f=”`echo $files |cut -f1 -d’|'`”
isvideo=`file -bi “$f” |grep -c image`
if [ $isvideo -eq 1 ]; then
selection[$nb_images]=$f
let “nb_images++”
fi
files=`echo $files |cut -f2- -d”|”`
let “cpt++”
# only to avoid infinite loop (do not occured normaly, but nobody never know.. perhaps!)
if [ $cpt -gt $MAXCPT ]; then
shift
fi
done
fi

videosize=`zenity –title “Selecione o tamanho do vídeo” –text “Selecione o tamanho do vídeo” –list –radiolist –separator=” ” –column=”" –column=”Tamanho” FALSE “160×120″ FALSE “320×240″ TRUE “640×480″ FALSE “800×600″ FALSE “1024×768″ FALSE “1280×720″ –height=220`
video_width=${videosize%x*}
video_height=${videosize#*x}
videobitrate=`zenity –title “Selecione a qualidade do vídeo (bitrate)” –text “Selecione a qualidade do vídeo (bitrate)” –scale –value=”800″ –min-value=”80″ –max-value=”4000″ –step=”10″ –height=220`
videobitrate=$(($videobitrate*1024))
videorate=`zenity –title “Selecione o framerate do vídeo (FPS)” –text “Selecione o framerate do vídeo (FPS)” –scale –value=”20″ –min-value=”2″ –max-value=”60″ –step=”1″ –height=220`
videofilters=`zenity –title “Selecione os filtros” –text “Selecione os filtros” –list –checklist –separator=” ” –column=”" –column=”Filtros:” FALSE “Desentrelaçar” –height=220`
for i in $videofilters; do
if [ $i = "Desentrelaçar" ]; then filter=” -deinterlace”; fi;
done
videocut=`zenity –title “Selecione áreas de corte” –text “Selecione áreas de corte” –list –checklist –separator=” ” –column=”" –column=”Corte:” FALSE “Superior” FALSE “Direita” FALSE “Esquerda” FALSE “Inferior” –height=220`
max_cut_w=$(($video_width-1))
max_cut_h=$(($video_height-1))
for i in $videocut; do
if [ $i = "Superior" ]; then corte[0]=`zenity –title “Selecione o corte superior em pixels” –text “Selecione o corte superior em pixels” –scale –value=”1″ –min-value=”1″ –max-value=”$max_cut_h” –step=”1″ –height=220`; fi;
if [ $i = "Direita" ]; then corte[1]=`zenity –title “Selecione o corte da direita em pixels” –text “Selecione o corte da direita em pixels” –scale –value=”1″ –min-value=”1″ –max-value=”$max_cut_w” –step=”1″ –height=220`; fi;
if [ $i = "Esquerda" ]; then corte[2]=`zenity –title “Selecione o corte da esquerda em pixels” –text “Selecione o corte da esquerda em pixels” –scale –value=”1″ –min-value=”1″ –max-value=”$max_cut_w” –step=”1″ –height=220`; fi;
if [ $i = "Inferior" ]; then corte[3]=`zenity –title “Selecione o corte inferior em pixels” –text “Selecione o corte inferior em pixels” –scale –value=”1″ –min-value=”1″ –max-value=”$max_cut_h” –step=”1″ –height=220`; fi;
done
aux=1
video_init=`zenity –title “Selecione o início do vídeo” –text “Selecione o início do vídeo em segundos” –entry –entry-text=”0″ `
while [ $aux -eq 1 ]; do
if [ $video_init -eq $video_init 2> /dev/null ]; then
aux=0;
else
video_init=`zenity –title “Selecione o início do vídeo” –text “Entrada não reconhecida, por favor selecione o início do vídeo em segundos” –entry –entry-text=”0″ `;
fi;
done
aux=1
video_end=`zenity  –title “Selecione o fim do vídeo” –text “Selecione o fim do vídeo em segundos, deixe 0 para converter o vídeo inteiro” –entry –entry-text=”0″ `
while [ $aux -eq 1 ]; do
if [ $video_init -eq $video_init 2> /dev/null ]; then
aux=0;
else
video_end=`zenity  –title “Selecione o fim do vídeo” –text “Entrada não reconhecida, por favor selecione o fim do vídeo em segundos, deixe 0 para converter o vídeo inteiro” –entry –entry-text=”0″ `
fi;
done
if [ $video_end -eq 0 ]; then video_end=”"; else video_end=`echo ” -t $video_end” `; fi

#COMANDO

while [ $# -gt 0 ]; do
loc1=`file -bi “$1″ | grep -c video`
loc2=`file -bi “$1″ | grep -c application`
isvideo=$(($loc1+$loc2))
if [ $isvideo -gt 0 ]; then
selection[$nb_videos]=$1
let “nb_videos++”
else
isdir=`file -b “$1″ |grep -c directory`
if [ $isdir -eq 1 ]; then
for f in `ls -1 “$1″`; do
loc1=`file -bi “$1/$f” |grep -c video`
loc2=`file -bi “$1/$f” |grep -c application`
isvideo=$(($loc1+$loc2))
if [ $isvideo -gt 0 ]; then
selection[$nb_videos]=”$1/$f”
let “nb_videos++”
fi
done
fi
fi
shift
done

n=$nb_videos
let “n=n-1″
(for i in `seq 0 $n`;do
video=${selection[$i]}
vid_filename=`basename “$video”`
vid_dirname=`dirname “$video”`

#create directory if not exist and at least one image to process
if [ ! -d "$vid_dirname/convertidos"  ]; then
mkdir -p “$vid_dirname/convertidos”
fi

let “compteur += 1″
echo “Processando vídeo $compteur / $nb_videos $vid_filename …”
ffmpeg -i “$video” -y -ar 44100 -ab 128 -croptop ${corte[0]:-”0″} -cropright ${corte[1]:-”0″} -cropbottom ${corte[3]:-”0″} -cropleft ${corte[2]:-”0″} -s $videosize -r $videorate -b $videobitrate $filter -f flv -ss ${video_init:-”0″} $video_end “$vid_dirname/convertidos/$vid_filename.flv” 2>&1 | zenity –width 500 –title “Processando vídeo $compteur / $nb_videos $vid_filename …” –text “Processando vídeo $compteur / $nb_videos $vid_filename … ” –progress –pulsate –auto-close
let “progress = compteur*100/nb_videos”
echo $progress
done
) | zenity –progress –auto-close –title=”Convertendo vídeos” –text=”Convertendo vídeos …”  –percentage=0

(gnome-open “`dirname \”${selection[0]}\”`/convertidos”) &
exit

Depois dê permissão de execução ao arquivo do script. Pronto! Agora é só acessar o script selecionando seus arquivos e clicando com o botão direito do mouse no arquivo, acessando o menu scripts.

Aproveitando a deixa passo o código de outro script para redimensionar imagens em massa:

#!/bin/bash
#
# Author : Mathieu Vilaplana <mathieu@creationgif.com>
# Author : Matthieu MARC <matthieu.marc@wanadoo.fr>
#
# Copyright (C) 2005,2006  Charles Bouveyron <charles.bouveyron@free.fr>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

# pour l’internationalisation des messages
# to generate the i18n file from .po file :
# $ msgfmt -o .locale/fr/LC_MESSAGES/nis.mo .locale/fr/LC_MESSAGES/fr.po
export TEXTDOMAIN=”nis”
export TEXTDOMAINDIR=`dirname $0`”/.locale/”

MAXCPT=50000;

nb_images=0;
selection=”";

txt_error=”`gettext ‘error’`”
#test if a file has been selected
if [ $# -eq 0 ]; then
# zenity –error –title=$txt_error –text=”`gettext ‘You must select at least 1 file to process’`”
here=`pwd`”/.”
files=`zenity –file-selection –multiple –separator=”|” –filename=”$here”`”|”
#if $? != 0, user click on cancel button, so exit
if [ "$?" != 0 ] ; then
exit
fi
cpt=0
# I put all filename in $selection here because I didn’t managed to put filenames with whitespace in $*
while [ ${#files} -gt 0 ]; do
f=”`echo $files |cut -f1 -d’|'`”
isimage=`file -bi “$f” |grep -c image`
if [ $isimage -eq 1 ]; then
selection[$nb_images]=$f
let “nb_images++”
fi
files=`echo $files |cut -f2- -d”|”`
let “cpt++”
# only to avoid infinite loop (do not occured normaly, but nobody never know.. perhaps!)
if [ $cpt -gt $MAXCPT ]; then
shift
fi
done
fi

#===================================
#       SELECT SIZE DIALOG
txt_text=”`gettext ‘Choose which size to scale to’`”
txt_title=$txt_text
txt_size=”`gettext ’size’`”

imgsize=`zenity –title “$txt_title” –text “$txt_text” –list –radiolist –separator=” ” –column=”" –column=”$txt_size” FALSE “160×120″ FALSE “320×240″ FALSE “640×480″ TRUE “800×600″ FALSE “1024×768″ FALSE “1280×720″ –height=220`

#if $? != 0, user click on cancel button, so exit
if [ "$?" != 0 ] ; then
exit
fi

#user must select a target size
imgsize=`echo $imgsize | sed ’s/ max//g’`
if [ ! "$imgsize" ]; then
zenity –error –title=$txt_error –text=”`gettext ’select a target size’`”
# just restart myself (more user friendly I think)
($0 “$*”)&
exit
fi

#transform 640×480 en 640×640 for convert to respect proportions
himgsize=$imgsize
val1=`echo “$imgsize” | awk -F’x’ ‘{ print $1  }’`
imgsize=”${val1}x${val1}”

#       END SELECT SIZE DIALOG
#=========================

#Select only images
while [ $# -gt 0 ]; do
isimage=`file -bi “$1″ | grep -c image`
if [ $isimage -eq 1 ]; then
selection[$nb_images]=$1
let “nb_images++”
else
isdir=`file -b “$1″ |grep -c directory`
if [ $isdir -eq 1 ]; then
for f in `ls -1 “$1″`; do
isimage=`file -bi “$1/$f” |grep -c image`
if [ $isimage -eq 1 ]; then
selection[$nb_images]=”$1/$f”
let “nb_images++”
fi
done
fi
fi
shift
done

n=$nb_images
let “n=n-1″
(for i in `seq 0 $n`;do
picture=${selection[$i]}
img_filename=`basename “$picture”`
img_dirname=`dirname “$picture”`

#create directory if not exist and at least one image to process
if [ ! -d "$img_dirname/$himgsize"  ]; then
mkdir -p “$img_dirname/$himgsize”
fi

let “compteur += 1″
echo “`gettext ‘# Processing image’` $compteur / $nb_images $img_filename …”
convert -quality 80 -resize $imgsize “$picture” “$img_dirname/$himgsize/$img_filename”
#convert -quality 80 -resize $imgsize “$picture” $himgsize/”$picture”
let “progress = compteur*100/nb_images”
echo $progress
done
) | zenity –progress –auto-close –title=”`gettext ‘Scaling images’`” –text=”`gettext ‘Processing images …’`”  –percentage=0

(gnome-open “`dirname \”${selection[0]}\”`/$himgsize”) &
exit

Comments (4)

para redimensionar imagens o nautilus já possui um plugin, que redimensiona e gira as imagens: nautilus-image-converter, e tem outros legais, como: nautilus-open-terminal.. para ver mais dê um aptitude search nautilus

[...] Enviado por Walker Gusmão Leite (walkerΘpraiseweb·com·br): “Não existe nada melhor do que ferramentas que nos auxiliam naquelas horas em que mais precisamos. Temos que evidenciar que o trabalho com grupo de arquivos pode ser muito simples com a ajuda de scripts prontos. Aqui segue uma grande dica que depois que descobri reduziu horas desperdiçadas com a automação que os scripts dão. O Nautilus incorpora uma funcionalidade extra: dentro da pasta ~/.gnome2/nautilus-scripts você pode colocar scripts que podem ser acessados em qualquer lugar somente clicando com o botão direito do mouse. Os scripts devem ser feitos com os parâmetros de entrada sendo o nome dos arquivos. (…)” [referência: klarkc.praiseweb.com.br] [...]

Parabens, show de bola!

Excelente! Eu precisava disso e nunca imaginei que existisse. Aproveito para indicar o recurso semelhante no Gedit, chamado “Ferramentas externas” (é um plug-in).

Parabéns pela ótima dica.

Write a comment