dic 17

Etiquetas: , , , ,

Bueno, como lo prometido es deuda, estuve trasteando en un script para adaptar imágenes al ipod. El script en cuestión es muy sencillito. Lo único que hace es recorrer el directorio que le indiquemos de forma recursiva, y si encuentra una imagen más alta que ancha (es decir, una imagen vertical), la inclina 90 grados para que se vea mejor en la pantalla del ipod (estamos hablando de un ipod video, con pantalla 4:3).

No hice nada más de conversión de formatos ni tamaño, ni nada por el estilo, porque de eso ya se encarga el tripod, que es un programa muy listo, así que para demás tareas, a bajárselo tocan. En fin, aquí está la obra:

#!/bin/bash



#----------PARAMETROS DE EJECUCION----------
formatos='*.bmp *.BMP *.gif *.GIF *.jpeg *.JPEG *.jpg *.JPG *.png *.PNG'
#-------------------------------------------



#----------FORMATO DE CONVERSION------------
angulo_rotacion='90'
#-------------------------------------------



#-----------FUNCIONES------------------------
function recorrer_directorios {

    for i in $formatos ; do

	if [[ -a $i ]] ; then

	    tamanho=`identify "${i}"`
	
	    #Eliminamos el nombre del fichero de la salida del identify
	    tamanho=${tamanho/"${i}"/}
	    tamanho=`echo $tamanho | cut -d\  -f2`

	    tamanho_h=`echo $tamanho | cut -dx -f1`
	    tamanho_v=`echo $tamanho | cut -dx -f2`

	    if (( $tamanho_v > $tamanho_h )) ; then
		convert "${i}" -rotate $angulo_rotacion "${i}"
		echo "Convertido: $i"
	    else
		echo "No convertido: $i"
	    fi
	fi
	
    done
    
    for i in * ; do
	
	if [[ -d $i ]]  ; then #Si el elemento es un directorio
	    cd "${i}"
	    recorrer_directorios
	    cd ..
	fi  
    done 
}
#-------------------------------------------



echo 'Para poder ejecutar este script'
echo 'es imprescindible tener instalado'
echo 'el pograma de conversion imagemagick.'
echo
echo 'ATENCION: este script eliminara los ficheros'
echo 'originales tras la conversion.'
echo -n 'Desea continuar? (s/n): '

read orden

if [ "$orden" = "s"  ]; then
    echo -n 'Directorio: '
    read directorio

    if [[ -d "${directorio}" ]]  ; then #Si el elemento es un directorio
	cd "${directorio}"
	recorrer_directorios
    else
	echo "Directorio no valido"
    fi
fi

También le hice unos pequeños retoques al script para pasar videos a formato ipod, para evitar que sacara unos cuantos mensajes de error inútiles que no pintaban nada y demás. Aquí está la versión definitiva:

#!/bin/bash



#----------PARAMETROS DE EJECUCION----------
ejecutable='ffmpeg'

formatos='*.asf *.ASF *.asx *.ASX *.avi *.AVI *.flv *.FLV *.m1v *.M1V *.m4v *.M4V *.mov *.MOV *.mp2 *.MP2 *.mpg *.MPG *.mpeg *.MPEG *.mp4 *.MP4 *.ogm *.OGM *.qt *.QT *.ra *.RA *.ram *.RAM *.swf *.SWF *.wmv *.WMV'
#-------------------------------------------



#----------FORMATO DE COMPRESION------------
audio_codec='libfaac'
video_codec='mpeg4'
formato_forzado='mp4'
extension='mpg'

audio_sampling_rate='44100'
audio_bitrate='128kb'
video_bitrate='300kb'

tamanho_pantalla='320x240'
#-------------------------------------------



#-----------FUNCIONES------------------------
function recorrer_directorios {

    mkdir procesados
    mkdir salida
    echo ' '

    for i in $formatos ; do

	if [[ -a $i ]] ; then

	    #Comprimimos el fichero de video pasandolo a un fichero temporal sin extension de video para no alterar el funcionamiento del bucle
	    $ejecutable -i "${i}" -acodec $audio_codec -ar $audio_sampling_rate -ab $audio_bitrate -vcodec $video_codec -b $video_bitrate -s $tamanho_pantalla -f $formato_forzado "${i}".tmp
	
	    #Si el tamanho de la salida es 0 por culpa del audio, recomprimimos
	    tamanhotemp=`ls -l $directorio/"${i}".tmp`
	    tamanho=`echo $tamanhotemp | cut -d\  -f5`

	    if [ "$tamanho" = "0" ] ; then

		rm "${i}".tmp
		$ejecutable -i "${i}" -vcodec $video_codec -b $video_bitrate -s $tamanho_pantalla -f $formato_forzado "${i}".tmp
	    fi

	    #Pasamos el fichero a comprimir al directorio de procesados y el fichero comprimido al directorio de salida, con la extension definitiva
	    mv "${i}" procesados
	    mv "${i}".tmp salida/"${i}".$extension
	fi
    done
    
    #Eliminamos los directorios temporales para no alterar el bucle
    mv salida/* .
    rm -fr salida
    rm -fr procesados
    
    for i in * ; do
	
	if [[ -d $i ]]  ; then #Si el elemento es un directorio
	    cd "${i}"
	    recorrer_directorios
	    cd ..
	fi  
    done 
}
#-------------------------------------------



echo 'Para poder ejecutar este script'
echo 'es imprescindible tener instalado'
echo 'el pograma de conversion ffmpeg.'
echo 'Se recomienda comprobar su correcto'
echo 'funcionamiento con el comando:'
echo 'ffmpeg -i fichero -acodec libfaac -ar 44100 -ab 128kb -vcodec mpeg4 -b 300kb -s 320x240 -f mp4 fichero_salida'
echo 'En caso de error, es imprescindible'
echo 'ajustar los parametros adecuados del ffmpeg'
echo 'en el script.'
echo
echo 'ATENCION: este script eliminara los ficheros'
echo 'originales tras la conversion.'
echo -n 'Desea continuar? (s/n): '

read orden

if [ "$orden" = "s"  ]; then
    echo -n 'Directorio: '
    read directorio

    if [[ -d "${directorio}" ]]  ; then #Si el elemento es un directorio
	cd "${directorio}"
	recorrer_directorios
    else
	echo "Directorio no valido"
    fi
fi

Ahora lo que más molaría sería que alguien además de yo mismo los usase xD. Si encontráis algún error, o alguna cosilla que se pudiese mejorar, no dudéis en decírmelo, y se hará lo que se pueda.

2 idas de olla en “Script bash – Cambiar el formato de imagenes para el ipod”

  1. Gabo Says:

    Hola.

    Utilicé y modifiqué tu script de transformación de videos, para que sólo dejara como salida el audio de videos en formato mp3.
    Lo he puesto en: http://portrait.cl/script-obtener-audio-desde-vide/

    Me ha servido mucho!!!
    Gracias!!!

  2. Obtener audio desde un video (Script) Says:

    [...] buscando en google encontré un script que hacía algo parecido en esta dirección: http://www.inopia.net/parkito/2008/12/17/script-bash-cambiar-el-formato-de-imagenes-para-el-ipod/. Sólo tuve que modificarlo un poco para lograr lo que necesitaba. El script después del [...]

Deja una ida de olla