viernes, 17 de febrero de 2012

Cheese y fotos en ráfaga. Problemas al apagarse el monitor

Estoy experimentando la mejor forma de sacar tandadas de fotos con una cámara para luego hacer un vídeo. El modelo es una larva en desarrollo y la intención es seguir algunas de las fases de transformación. La primera prueba fue "casi" exitosa. Y digo casi por que mi cámara cutre Logitech C200 sacaba una resolución 640x480 decente con cheese, hasta que descubrimos varios defectos. Primero, no se puede pedir más de 10.000 fotos (lo intenté con 30.000 y 15.000, y siempre marca 10.000). Segundo, y mucho más importante, al llegar horas después para comprobar como ha salido todo, descubro que cheese para de fotografiar cuando el monitor se apaga. Además, en gnome 3 no hay una opción gráfica para negar el apagado de la pantalla. El máximo tiempo es de una hora (ha desaparecido el never).


El resultado ha sido que a lo largo de la noche se ha parado repetidas veces de fotografiar. Lo más sorprendente es que unas después, siempre aleatoriamente, volvía a empezar. Sospecho que se debe a vibraciones que activa el monitor por movimientos del ratón. Por supuesto, he intentado encontrar soluciones:

1. Uso de motion. Tiene varias ventajas. Es un programa de vigilancia, así que se puede activar para sacar solo fotos cuando hay movimiento. Es en consola, con lo que supongo que no se verá alterado por un monitor apagado.

2. Editar xorg.conf. Aquí podemos ver como editando la sección ServerFlags

Section "ServerFlags"
Option "blank time" "0"
Option "standby time" "0"
Option "suspend time" "0"
Option "off time" "0"
EndSection

se anula el apagado. El problema es que en las distribuciones modernas la mayor parte de los conf de toda la vida han dejado de existir o se localizan en otro sitio en directorios conf.d. En resumen, en Fedora 16 no existe xorg.conf. Mejor aun, al querer generarlo como administrador, simplemente al escribir estas líneas,

su -
palabrita
gedit /etc/X11/xorg.conf

sin escribir en el fichero y sin guardarlo cheese dejó de funcionar (y tardó un rato antes de poder llamarlo de nuevo). Por lo de ahora he dejado esta posibilidad aparte

3. Ordenes más sencillas a través de setterm. Por ejemplo aquí indica alguna posibilidad

$ setterm -powersave off -blank 0

Empezaré probando esta última. Si no funciona, seguiremos generando un xorg.conf y finalmente con motion (es un programa de terminal cuyas opciones dan para un kilómetro y medio de papel impreso). La versión gráfica kmotion creo que precisa apache, lo que para hacer unas fotos de 50 kb me parece mucho.

Finalmente, si todo sale bien, compraré una cámara con más resolución.

6 comentarios:

  1. Aquí tienes el script para añadir ceros (por la izquierda) a los nombres de ficheros; de vez en cuando no viene mal desempolvar el bash scripting...

    #!/bin/bash

    # Para cada archivo con extensión jpg...
    # (si tus extensiones son en mayúsculas,
    # sólo tienes que sustituir jpg por JPG
    # en el for siguiente):
    for archivo in *.jpg; do

    # Obtenemos la longitud completa del
    # nombre del archivo, incluidos el
    # punto y la extensión (.jpg):
    longitud_nombre=`expr length $archivo`

    # Si la longitud es 5 (archivos con
    # numeración de 1.jpg a 9.jpg) añadimos # cuatro ceros, quedando 00001.jpg hasta
    # 00009.jpg.
    # Si la longitud es 6, añadimos tres
    # ceros.
    # Si la longitud es 7, dos ceros.
    # Si la longitud es 8, un cero:
    if [ $longitud_nombre -eq 5 ] ; then
    mv $archivo 0000$archivo
    elif [ $longitud_nombre -eq 6 ] ; then
    mv $archivo 000$archivo
    elif [ $longitud_nombre -eq 7 ] ; then
    mv $archivo 00$archivo
    elif [ $longitud_nombre -eq 8 ] ; then
    mv $archivo 0$archivo
    fi

    done

    Espero que te sirva, y haz siempre copias de seguridad antes de ejecutar scripts ajenos (y propios)...

    Un saludo.

    ResponderEliminar
  2. El script está bien, pero el nombre es algo más complejo de lo que parece. Los nombres son
    2012-02-17-172236_1.jpg, con lo que el script lo convierte en
    02012-02-17-172236_1.jpg (he hecho la primera prueba en una tandada de solo 80 ficheros, con un cambio solo en los 1-9).
    Es decir, necesitaríamos que fuera capaz de añadir los valores en la posición 19, antes del número. si eso fuera posible, lo mejor sería generar un bucle de repeticiónhasta una longitud total de 10+8+4+4=26, si tomamos el último como 9999. Solo en dos casos ha llegado al límite de 10000 (en ese caso sería 27). Yo reconozco mi ignorancia total sobre el bash, algo que intentaré corregir cuando disponga de algo de tiempo.

    ResponderEliminar
  3. No sabía que llevaba la fecha de creación antes del número, imaginaba 1.jpg, 2.jpg, etc.
    De acuerdo, seguiré desempolvando.

    ResponderEliminar
  4. #!/bin/bash
    for archivo in *.jpg; do
    long_total=`expr length $archivo`
    long_util=`expr $long_total - 18`
    nombre_inutil=`expr substr $archivo 1 18`
    nombre_util=`expr substr $archivo 19 $long_util`
    if [ $long_util -eq 5 ]; then
    ceros="0000"
    nombre_final=$nombre_inutil$ceros$nombre_util
    mv $archivo $nombre_final
    elif [ $long_util -eq 6 ]; then
    ceros="000"
    nombre_final=$nombre_inutil$ceros$nombre_util
    mv $archivo $nombre_final
    elif [ $long_util -eq 7 ]; then
    ceros="00"
    nombre_final=$nombre_inutil$ceros$nombre_util
    mv $archivo $nombre_final
    elif [ $long_util -eq 8 ]; then
    ceros="0"
    nombre_final=$nombre_inutil$ceros$nombre_util
    mv $archivo $nombre_final
    fi
    done

    ResponderEliminar
  5. Voy a intentar esta tuya nueva. Yo había modificado hasta

    #!/bin/bash

    # Poner todos los ficheros solo con número
    # además elimina los saltos donde carecemos de algun número
    j=1; for i in *.jpg; do mv $i $j.jpg; j=$(($j+1)); done

    # Aquí seguimos con el script de hckorootx

    # Para cada archivo con extensión jpg...
    for i in *.jpg; do

    # sobre los numeros conseguidos añadir ceros
    longitud_nombre=`expr length $i`
    if [ $longitud_nombre -eq 5 ] ; then
    mv $i 000$i
    elif [ $longitud_nombre -eq 6 ] ; then
    mv $i 00$archivo
    elif [ $longitud_nombre -eq 7 ] ; then
    mv $i 0$archivo
    # Reservado para favorecer el cambio en los 10000
    # elif [ $longitud_nombre -eq 4 ] ; then
    # mv $i 0$archivo
    fi

    done

    El problema es que al reducir todos los ficheros a números lo ordena mal, tal como ya los ordena mencoder, con lo que no adelantamos nada. Intentaré esto tuyo.

    ResponderEliminar