En un artículo anterior explicaba como aproveché un script en bash para recodificar videos (usando mplayer) para re-convertirlo en un service menú de kde y así ejecutarlo seleccionando los archivos desde el dolphin o un plasma de carpeta.
Hoy lo re-aprovechamos de nuevo para mejorarlo en 2 aspectos
#!/bin/bash
simple eh?, simplemente ejecuta en una xterm (konsole no me rula el wait :o) todo programilla que se le pase como parámetro, se espera, y hace un shutdown como si lo hicieses desde el botón de Apagar de kde.
Hoy lo re-aprovechamos de nuevo para mejorarlo en 2 aspectos
- Recodificar varios archivos a la vez
- Usar un segundo script que te chape el ordenador cuando haya finalizado
Pos si, resulta que ripear un episodio de 25 minutos a x264 en 2 pasadas veo que tarda unos 20 minutos aproximadamente (unos 3-4 minutos la 1era pasada y unos 15 minutos la segunda). Si queremos recodificar 20 episodios, son 400 minutos, unas 6 horas y media.
Así que hice la prueba de lanzar 3 recodificaciones simultáneas y oh! surprise, a los 25 minutos tenia las 3 recodificaciones hechas, o sea, que sale a cuenta en cuanto a tiempo se refiere.
Ergo, modifico el script para que te pregunte cuantos procesos de recodificación quieres lanzar y crea un archivo batch de comandos para cada uno de ellos, y finalmente, los lanza todos en terminales separados:
#!/bin/bash ################################################# ## ## Li pasa una llista d'arxius i genera un arxiu ## per passarlos a x264 ## usage: ## h264.sh <...> ## ## = 0 => no scale ## = xxx:xxx => valor de escala ## ################################################# 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") CONCURRENT=$(kdialog --title "CONCURRENCIA" --inputbox "Vols executar varis processos alhora? (introdueix nº de processos)" "2") SCRIPTFILE="$HOME/run" rm -rf "$SCRIPTFILE*.sh" while (( $# )) do INFILE=$1 PROCES=$(($#%CONCURRENT)) TEMP="$HOME/temp$PROCES.log" 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" -passlogfile $TEMP -o /dev/null "$SCALEOPTS" >> "$SCRIPTFILE$PROCES.sh" #pas 2 echo mencoder \""$INFILE"\" -forceidx -oac mp3lame -lameopts "$AUDIOOPTS" -ovc x264 -x264encopts "$VIDEOOPTS:pass=2:bitrate=$BITRATE" -passlogfile $TEMP -o \""$INFILE".h264\" "$SCALEOPTS" >> "$SCRIPTFILE$PROCES.sh" #neteja echo rm -rf $TEMP.mbtree $TEMP >> "$SCRIPTFILE$PROCES.sh" done for i in `seq 0 $((CONCURRENT-1))` do chmod +x "$SCRIPTFILE$i.sh" konsole -e /bin/sh -c ${SCRIPTFILE}$i.sh done
Es decir, te genera en $HOME el archivo run0.sh, run1.sh, run2.sh, etc cada uno de ellos tienen los comandos de mencoder para ir codificando los archivos de entrada y después lanza estos runs.sh en una consola
2. Chapar el pc cuando termine las recodificaciones
Normalmente lanzo las recodificaciones por la noche, o cuando voy al curro, pero si tardan 5 horas no hace falta que el ordenador se quede 5 horas mas encendido sin hacer nada. Así que monté otro pequeñin que lo que hace es lanzar los procesos que se le pasan como parámetros, esperar a que terminen y cerrar el ordenador via KDE para no liarnos si el usuario tiene permisos para hacer un halt, el sudo y su puta madre.
El script lo llame haltAfterExec.sh y dice así:
#!/bin/bash
while (( $# )) do script=$1 shift echo "executing $script" xterm -e /bin/bash -c $script & done #esperem a que acabin wait # shutdown via kde qdbus org.kde.ksmserver /KSMServer logout 0 2 0
simple eh?, simplemente ejecuta en una xterm (konsole no me rula el wait :o) todo programilla que se le pase como parámetro, se espera, y hace un shutdown como si lo hicieses desde el botón de Apagar de kde.
Entonces, en el script de recodificacion le comentas la linea que lanza las konsoles, para que lance este con los runs.sh como parametros et voilà
Comentarios