Facilitando recodificacion de videos

Bueno, hace un tiempo hice un pequeño script para recodificar varios videos a formato h264 con mencoder a la vez, lo llamé h264. Funciona bien, lo malo es que es un poco coñazo tener que abrir una consola, ir escribiendo los nombres de todos los videos que quieres recodificar....

Solución: ServiceMenus de KDE.


Un serviceMenu de kde es un item de cuando pulsas botón derecho en el gestor de ficheros, por ejemplo dolphin o el plasmoid de quickaccess. En el menú contextual que se abre al pulsar el boton derecho hay un apartado de "Acciones", pos allí aparecen varios ServiceMenus.

Crearemos un service menú para recodificar uno o varios archivos seleccionados directamente de dolphin tal que ejecutara el script h264.sh (modificado) para que deje el archivo recodificado en el mismo sitio que el archivo original, con la extension .h264. Pasos:
  1. Crear serviceMenu en kde
  2. Script h264-service.sh que llamará la opcion de menú
SERVICEMENU

El serviceMenu se traduce en un archivo .desktop que tenemos que crear en uno de los directorios que nos idique el comando
kde4-config --path services
en mi caso lo he guardado en $HOME/.kde/share/kde4/services/h264.desktop

[Desktop Entry]
Type=Service
ServiceTypes=KonqPopupMenu/Plugin
MimeType=video/*;
Actions=toh264

[Desktop Action toh264]
Name=Passar a h264
Icon=video-x-generic
Exec=/path/h264-service.sh %U

Básicamente decimos que esta opción solo aparezca en archivos con mimeType de video y que la accion ejecutara el script h264-service.sh pasandole como parametros %U, que se traduce en una lista de archivos (con path completo) de los archivos seleccionados en dolphin.

SCRIPT H264-service.sh


+---------------------------------------------------------------------------+

#!/bin/bash
AUDIOOPTS="cbr:br=128:mode=1"
VIDEOOPTS="subq=6:8x8dct:frameref=4:partitions=all:bframes=3:b_pyramid=normal:weight_b:threads=auto:me=umh:cabac"
BITRATE=$(kdialog --title "BITRATE" --inputbox "Posa el bitrate" "500")
SCALE=$(kdialog --title "REESCALAR" --inputbox "Vols escalar el video? (width:height - 0 per no escalar)" "0")
echo $BITRATE
SCRIPTFILE="$HOME/run.sh"

rm -rf $SCRIPTFILE

while (( $# ))
do
INFILE=$1
shift

if [ "$SCALE" == "0" ]
then
SCALEOPTS=""
else
SCALEOPTS="-vf scale=$SCALE"
fi

#pas 1
echo mencoder \""$INFILE"\" -forceidx -oac mp3lame -lameopts "$AUDIOOPTS" -ovc x264 -x264encopts "$VIDEOOPTS:pass=1" -o /dev/null "$SCALEOPTS" >> $SCRIPTFILE

#pas 2
echo mencoder \""$INFILE"\" -forceidx -oac mp3lame -lameopts "$AUDIOOPTS" -ovc x264 -x264encopts "$VIDEOOPTS:pass=2:bitrate=$BITRATE" -o \""$INFILE".h264\" "$SCALEOPTS" >> $SCRIPTFILE

#neteja
echo rm -rf divx2pass.log.mbtree divx2pass.log >> $SCRIPTFILE

done

chmod +x $SCRIPTFILE
konsole --noclose -e /bin/sh -c ${SCRIPTFILE}

+----------------------------------------------------------------------------+
Basicamente lo que hace es preguntar por el bitrate que se quiere usar, las dimensiones del video resultante si se quiere reescalar y lo que hace es crear otro script en $HOME/run.sh con todas las llamadas a mencoder necesarias para hacer las recodificaciones de los videos. Acto seguido, abre una konsole ejecutando el run.sh

Comentarios