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.