Codificación de videos para Samsung Omnia
Nombre: to_omnia.sh
Autor: Daniel Franganillo Corrales
Origen: Propio
Lenguaje: Bash
Licencia: GPL
Propósito: Codificar cualquier video de entrada para poder ser visionado en un Samsung Omnia
Dependencias: mencoder, zenity
Código:
#!/bin/bash
FONT="/usr/share/fonts/truetype/ttf-liberation/LiberationSans-Regular.ttf"
# Lista de resoluciones disponibles
RESO_16_9="640:352"
#RESO_16_9="480:265"
RESO_4_3="640:480"
# Bitrate del video. Hay que tener en cueta que video con bitrate total > 750kbps no se reproducen en la psp
BRATE=650
A_BRATE=128
# Pedimos el fichero a codificar
IN=`zenity --file-selection --title="Seleccione fichero a codificar"`
# Si no se ha seleccionado un fichero terminamos.
if [ -z "$IN" ]
then
zenity --error --text "No se seleccionó fichero a convertir"
exit;
fi
# Nombre del fichero de salida
RES=${IN%\.*}-conv.avi
# Titulo que aparecerá en la PSP, que será la ruta del fichero sin extensión básicamente
TITLE=${IN%.[^.]*}
TITLE=${TITLE##*/}
# Fichero de subtitulos en caso de existir
SUB=${IN%\.*}.srt
# Obtenemos los FPS del fichero
FPS=`file "$IN" | cut -d ',' -f 4 | awk {'print $1'}`
# Establecemos los FPS que tendrá el fichero resultante
if [ -z "$FPS" ] || ([ "$FPS" != "25.00" ] && [ "$FPS" != "23.98" ] && [ "$FPS" != "29.00" ])
then
FPS="25";
fi
# Obtenemos la resolucion del fichero (¿Alguna manera mejor?)
RES_X=`file "$IN" | cut -d ',' -f 3 | awk {'print $1'}`
RES_Y=`file "$IN" | cut -d ',' -f 3 | awk {'print $3'}`
# Calculamos el ratio de la resolución para poder discriminar entre 4:3 y 16:9
RATIO=`echo "scale=1 ; $RES_X/$RES_Y" | bc`
# Ñapa para solucionar videos con ratios 'raros'
if [ `echo "$RATIO>=1.7"|bc` -eq 1 ]
then
RATIO="1.7";
fi
if [ `echo "$RATIO>=1.5"|bc` -eq 1 ]
then
RATIO="1.7";
else
RATIO="1.3";
fi
# Establecemos la resolución del video
case "$RATIO" in
"1.7")
RESO="$RESO_16_9"
;;
"1.3")
RESO="$RESO_4_3"
;;
*)
RESO="320x240"
esac
# Si existe el fichero de subtítulos los añadimos y hacemos que el fichero de entrada IN sea el TEMP creado
if [ -f "$SUB" ]
then
{
`mencoder -font "$FONT" -sub "$SUB" -subfont-text-scale 3 "$IN" -vf scale=$RESO,eq2=1.1:1.0:0.1:1.0 -oac mp3lame -lameopts abr:br=$A_BRATE -ovc xvid -xvidencopts bitrate=$BRATE:threads=2 -af volume=15 -o "$RES"`;
}
else
`mencoder "$IN" -vf scale=$RESO -oac mp3lame -lameopts abr:br=$A_BRATE -ovc xvid -xvidencopts bitrate=$BRATE:threads=2 -af volume=15 -o "$RES"`;
fi
zenity --info --text "Salida : $RES"
Ejemplos de uso:
Está orientado a ser usado desde Gnome haciendo simplemente doble click sobre él y seleccionando el fichero a convertir. Si se encuentran los subtítulos (mismo nombre de fichero+srt) se añaden.
Comentarios:
El script es bastante mejorable ya que no tiene tratamiento de errores ni ningún tipo de configuración que no sea por linea de comandos. Al estar obviamente orientado a mis gustos/usos no he contemplado ningún otro tipo de subtítulo ni codificación aparte de SRT y Xvid que son la combinación que a mi me ha dado resultado.