Mejorar la experiencia con zoneminder

 

Después de configurar una cámara con zoneminder, y montar un servidor de vigilancia propio, surgen algunos inconvenientes en su uso, los cuales coloco aquí su resolución.

Zoneminder se acaba el espacio libre de mi disco duro.


Una vez que comienzas a grabar, te vas dando que el espacio libre se va a agotando, y es que zoneminder se instala en raiz ( / ), y no hay una configuración donde puedas indicar que se guarden los eventos en otra ruta.

La documentación oficial sugiere que se detenga zoneminder, se mueva la carpeta a la partición donde quieras que radique, y crees un enlace simbólico… pero muchas veces, zoneminder ya no puede grabar debido a un error.

can’t symlink ‘1’ to ‘monitor-1’ permission denied

Por más que se compongan los permisos, la grabación se detiene debido a ese error que puede apreciarse en el log.

¿Para que mover y crear un enlace simbólico, si puedes montar y desmontar cuando quieras?

Tan simple como eso. Puedes montar la carpeta de eventos a una carpeta en otra partición, y desmontarla cuando lo necesites.

Suponiendo que tu carpeta de eventos está en la ruta normal.
/usr/share/zoneminder/events

Y colocando como ejemplo la ruta a donde quieres que resida.
/home/angelos/zoneminder/events

Entonces ejecutarías el siguiente comando:
# mount –bind /home/angelos/zoneminder/events /usr/share/zoneminder/events/

Con ello indicas que la carpeta events que está en una partición con mucho mas espacio, se monte en la carpeta de zoneminder dentro de raiz, con lo cual dejarás de tener problemas con los permisos.

Y si quieres que en cada reinicio lo haga en automático, entonces agrega a tu archivo fstab
/home/angelos/zoneminder/events         /usr/share/zoneminder/events    none    bind    0       0



No puedo exportar todos los eventos a video


Éste si que es un gran problema, si quieres tener una videoteca de todo lo grabado por tus cámaras, es desesperante tener que revisar evento por evento y generar un video del mismo, además de descargarlo y tener hasta cientos de videos de un sólo día. El filtro de generación automático de video por búsqueda de determindo día, sólo nos muestra la lista de eventos y nosotros debemos generar los videos.

Para resolver dicho incoveniente, escribí un script que nos hace todo este trabajo y aún mas.

Dicho script se ejecuta indicando como parámetro el nombre de la cámara, y la fecha que quieres generar el video.

Entonces el script genera los videos de todos los eventos de tal día, y después los une en un solo video, por lo cual si tienes cientos de eventos en un sólo día, al final, obtienes un sólo video con el nombre de la cámara y la fecha, con el formato avi.

#!/bin/bash

CAMARA=$1
DIA=$2
DIAN=$( echo “$DIA” | sed -r ‘s/[/]+/_/g’)

DIRZM=”/usr/share/zoneminder/events” #RUTA DE LOS EVENTOS DE ZONEMINDER
DIRVD=”/home/angelos/Downloads” #RUTA A DONDE VAS A GUARDAR EL VIDEO

DI=”$DIRZM/$CAMARA/$DIA”

cd $DI

find . -maxdepth 3 -mindepth 1 -type d -exec sh -c ‘(
cd {} && 
SD=$(echo ‘{}’ | sed -r ‘s/[/.]+/_/g’) && 
mkdir -p ‘$DIRVD’/’$CAMARA’/’$DIAN’ &&
avconv -r 20 -f image2 -i %03d-capture.jpg ‘$DIRVD’/’$CAMARA’/’$DIAN’/’$CAMARA’-‘$DIAN’-$SD-TMP.avi)’ {} ; | sort

cd $DIRVD/$CAMARA/$DIAN
mencoder -oac copy -ovc copy -idx -o ../”$CAMARA”-“$DIAN”.avi *.avi
rm *-TMP.avi
cd ..
rm -r $DIAN

Se ejecuta, como ya mencioné, indicando la cámara y la fecha, por ejemplo:
sh video.sh AngelosGames 2014/01/19
Y después de un rato, tendrás en la carpeta donde quieras guardar los videos, en éste ejemplo /home/angelos/Donwloads; dentro, la carpeta de la cámara, en el ejemplo “AngelosGames”; un video con todo lo grabado en ese día.
Con esto ya puedes eliminar cuando gustes, los eventos de dicho día en zoneminder, recuperar espacio de disco, y grabar a CD o DVD tus videos y tener tu videoteca con todo lo que ocurre en tu cas o negocio.

Author: angelinux

Desarrollador de páginas web desde el año 2000 y con experiencia en programación de sistemas para empresas desde el 2008; cofundador de CONSoluciones; autor del blog de software libre “Angelinux-slack”; docente en maestría en UPAV y fundador de la distribución Linux Falco que está en desarrollo para la Universidad Veracruzana.
Además, ponente, organizador de congreso, laborista social, impartidor de cursos de programación y servidores Linux, webmaster, y ex invitado en programa de televisión.

59 comentarios sobre “Mejorar la experiencia con zoneminder

  1. Me ha resultado muy útil esta entrada en tu blog, te felicito por el buen trabajo que has hecho.

    Para ejecutar el script, tengo que instalar algún paquete para ejecutar mencoder, avconv u otro paquete adicional? el servidor esta bajo la plataforma de fedora.

    Muchas gracias..

     
  2. Hola angelinux soy nuevo en esto y quiero aplicar lo de tu script, pero no se donde se guarda el script y como lo corro, lo guarde en bin y lo nombre camara.sh y lo corro desde consola con ./camara.sh pero me da error

     
    1. Buen día.

      No deberías tener problema para ejecutar el script desde el lugar que quieras, siempre y cuando tengas las aplicaciones instaladas, los permisos para ejecutarlo y los parámetros correctos.
      Las aplicaciones son las que se marcan en el post. Los permisos, si es desde tu /home entonces no necesitas permisos especiales, mas que sea ejecutable ($ chmod +x ./camara.sh) y si está fuera de /home entonces ejecutarlo con sudo.

      ¿Que error te marca? De ahí podemos partir para ver por qué no funciona.

      Saludos.

       
      1. lo corro desde “/bin con este comando #sh camara.sh SOPORTE 15/06/08
        y da este error

        root@CAMARAS:/home# sh camara.sh SOPORTE 15/06/08
        sed: -e expresión #1, carácter 1: orden desconocida: `’
        camara.sh: 16: cd: can’t cd to /usr/share/zoneminder/events/SOPORTE/15/06/08
        camara.sh: 18: camara.sh: Syntax error: “(” unexpected
        root@CAMARAS:/home#

        si lo corros con #su camara.sh SOPORTE 15/06/08
        da este error

        root@CAMARAS:/home# su camara.sh SOPORTE 15/06/08
        No passwd entry for user ‘camara.sh’
        root@CAMARAS:/home#

         
        1. Por el error, al parecer tienes instalado zoneminder en otra ruta ¿puedes indicarme la ruta de instalación? Si ese fuera el caso, solo debes colocar la ruta correcta en el script.

          Con lo segundo, no puedes correrlo como su camara.sh, porque instas indicando que quieres cambiarte de usuario al usuario camara.sh, lo correcto sería
          $ sudo camara.sh SOPORTE 15/06/08

          Saludos.

           
          1. ¿Y tu carpeta de eventos está en /var/cache/zoneminder/events como lo acabas de poner?
            Ya que el error marca que no encuentra la carpeta
            /usr/share/zoneminder/events/

            Saludos

             
        2. Espera, acabo de ver que estás enviando la fecha con formato incorrecto.
          Zoneminde lo maneja como AAAA/MM/DD y lo estás mandando como AA/MM/DD

          En lugar de
          sh camara.sh SOPORTE 15/06/08

          ejecuta
          sh camara.sh SOPORTE 2015/06/08

          Saludos.

           
          1. el zoneminder esta en usr/share/zoneminder en esa ruta apare todo, los css, js y otros, con respecto a la fecha si le doy el formato de año AAAA no me encuentra nada porque en events donde estan las camaras agregadas lo pone como 15.
            Ej.
            /var/cache/zoneminder/events/2/15, donde el 2 es el enlace simbolico de SOPORTE y el 15 el año, dentro de 15 estan los meses y luego los dias, /15/06/08 que fue ayer.

            con respecto a lo de su camara.sh, solo fue una prueba que hice pero al darle sh camara.sh y lo demas me da el error que te puse arriba.

            tengo zoneminder 1.25.0, no se cual sera el error.

            tengo un servidor de respaldos con debian wheezy y corro los script con ./respaldo.sh por decir algo, pero si lo hago asi s}con las camaras me da el mismo error. pero seguire intentando gracias por tu ayuda, esperare talvez encuentras algo que me pueda ayudar.

            Una consulta mas tengo agregadas 15 camaras y al darle camara multiple solo me muestra 5 las demas me las muestra en blanco, no se que sera. algun skin para zoneminder1.25.0 en debian wheezy.

             
  3. hola: soy Diego, mira a mi me tira este error después del tipiar el comando

    # sh creacion.sh Monitor-1 2015/06/10
    ————————————————————————————————————

    built on Mar 16 2015 13:37:34 with gcc 4.8 (Ubuntu/Linaro 4.8.2-19ubuntu1)
    %03d-capture.jpg: No such file or directory

    MEncoder 1.1-4.8 (C) 2000-2012 MPlayer Team
    File not found: ‘*.avi’
    Failed to open *.avi.
    Cannot open file/device.

    Exiting…
    rm: cannot remove â*-TMP.aviâ: No such file or directory

    —————————————————————————————————————-

    ¿que podrá ser?

     
    1. Buen día Diego.

      ¿Puedes verificar que exista la carpeta /usr/share/zoneminder/events/

      Y que dentro exista la carpeta Monitor-1
      Y dentro la carpeta 15, dentro 06 y dentro 10?

      Los parámetros para el script son la ruta formada por el nombre de la cámara, y por la fecha que se desea generar el video.

      Saludos.

       
  4. buen día,

    Si entiendo, si existe!!, te mostrare le script, pero antes, quiero preguntarte sobre ¿Qué parte del script no edita aparte de las direcciones?

    se edita los parámetros de CAMARA =$1???

    ___________________________________
    #!/bin/bash

    CAMARA=$1 <— ese de allí y todos los demás?
    DIA=$2
    DIAN=$( echo “$DIA” | sed -r ‘s/[/]+/_/g’)
    ____________________________________

    ahora te dejo mi script… un poco cambiado…

    mi cámara de zoneminder se llama ahora "PORTON"

    ________________________________________
    ________________________________________

    #!/bin/bash

    PORTON=$1
    DIA=$2
    DIAN=$( echo "$DIA" | sed -r 's/[/]+/_/g')

    DIRZM="/usr/share/zoneminder/events/PORTON" #RUTA DE LOS EVENTOS DE ZONEMINDER
    DIRVD="/var/www/html/owncloud/data/videos-casarojas/files" #RUTA A DONDE VAS A GUARDAR EL VIDEO

    DI="$DIRZM/$PORTON/$DIA"

    cd $DI

    find . -maxdepth 3 -mindepth 1 -type d -exec sh -c '(
    cd {} &&
    SD=$(echo '{}' | sed -r 's/[/.]+/_/g') &&
    mkdir -p '$DIRVD'/'PORTON'/'$DIAN' &&
    avconv -r 20 -f image2 -i %03d-capture.jpg '$DIRVD'/'$PORTON'/'$DIAN'/'$PORTON'-'$DIAN'-$SD-TMP.avi)' {} \; | sort

    cd $DIRVD/$PORTON/$DIAN
    mencoder -oac copy -ovc copy -idx -o ../"$PORTON"-"$DIAN".avi *.avi
    rm *-TMP.avi
    cd ..
    rm -r $DIAN
    _____________________________________________________
    _____________________________________________________

    bueno en este caso el comando para ejec… seria "sh creacion.sh PORTON 2015/06/10"

    gracias desde ante mano =)

     
    1. espera mira ahora me funciono!!! pero especificando las carpetas que crea zm , “/usr/share/zoneminder/events/PORTON/15/06/10/”

      pero mm yo crep que esas carpetas varian según la fecha el mes y el año 😛

       
      1. ¿Qué versión de zoneminder tienes?

        Al parecer tu versión utiliza el año en dos dígitos, mientras que en la que tenía yo era de 4.
        Entonces con colocar los parámetros del año en dos dígitos, debería correr bien el script.

        Saludos.

         
    2. En esta parte
      mkdir -p ‘$DIRVD’/’PORTON’/’$DIAN’ &&

      No utilizas la variable de la cámara ($PORTON), sino la cadena “PORTON”, lo que genenaría problemas.

      Saludos.

       
      1. tienes toda la razón, lo arregle funciona ! thanx man, una pregunta mas, usted cree que pueda podrá programar ese script para que se ejecute siempre a ciertas horas automáticamente?

         
        1. En lugar de
          DIA = $2
          Coloca
          DIA = date +”%y-%m-%d”

          Con ello, en lugar de recibir un segundo parámetro en el script, obtendrá la fecha del sistema.

          Sólo bastaría agregar la entrada a CRON para que se ejecute todas las noches a las 11:59:59.

          Me comentas si tienes algún problema.

          Saludos.

           
          1. hola de nuevo:

            oye te habla diego otra vez, y muchas gracias compadre, tu ¿sabes que podrías dominar el mundo con esto? jejeje
            tengo otra question!

            se cambian los parámetros que le siguen en el script hablando de LA VARIABLE “DIA” ? por ejemplo:
            __________

            DIAN=$( echo “$DIA” | sed -r ‘s/[/]+/_/g’) =====> el carácter “$DIA” se deja tal cual o se cambia el “$”

            ____________

             
          2. bueno ya lo hice!! me funciona re bien, tira el video automáticamente a la hora que deseo, pero tengo una duda pequeñita en cuanto al nombre del video final, me aparece así: -.avi

            ¿De que forma puedo hacer para que salga automáticamente con el nombre de la fecha en que fue creado? o ya es mucho pedir? jejee

            así tengo el scripts
            ———————————

            #!/bin/bash

            PORTON=$1
            DIA=date +”%y-%m-%d”
            DIAN=$( echo “$DIA” | sed -r ‘s/[/]+/_/g’)

            DIRZM=”/usr/share/zoneminder/events” #RUTA DE LOS EVENTOS DE ZONEMINDER
            DIRVD=”/var/www/html/owncloud/data/videos-casarojas/files/PORTON/” #RUTA A DONDE VAS A GUARDAR EL VIDEO

            DI=”$DIRZM/$PORTON/$DIA”

            cd $DI

            find . -maxdepth 3 -mindepth 1 -type d -exec sh -c ‘(
            cd {} &&
            SD=$(echo ‘{}’ | sed -r ‘s/[/.]+/_/g’) &&
            mkdir -p ‘$DIRVD’/’$PORTON’/’$DIAN’ &&
            avconv -r 20 -f image2 -i %03d-capture.jpg ‘$DIRVD’/’$PORTON’/’$DIAN’/’$PORTON’-‘$DIAN’-$SD-TMP.avi)’ {} \; | sort

            cd $DIRVD/$PORTON/$DIAN
            mencoder -oac copy -ovc copy -idx -o ../”$PORTON”-“$DIAN”.avi *.avi
            rm *-TMP.avi
            cd ..
            rm -r $DIAN
            __________________________________________________

            saludos cordiales….

             
        2. Que tal. Claro, hay que buscar dominar el mundo XD.

          No entendí la parte que comentas de
          se cambian los parámetros que le siguen en el script hablando de LA VARIABLE “DIA” ?

          Ayer no te puse correctamente el comento para el día automático.
          Debe ser
          DIA=$(date +”%y/%m/%d”)

          Ya que el que te dí, ya lleva guiones, en lugar de diagonales

          Así, la siguiente línea quita las diagonlaes, y las sustituye por guiones bajo ( _ ), para generar la ruta del archivo
          DIAN=$( echo “$DIA” | sed -r ‘s/[/]+/_/g’)

          Con eso te debería ya aparecer el nombre del archivo con la fecha correcta.

          Me comentas si no queda bien.

          Saludos.

           
          1. mira, lo cambie como me dices , pero no general video, si tiro el comando si genero yo el comando salen errores que no encuentra los directorios… así lo tengo el script-…(.la config de antes lo generaba bien pero no salía el nombre )

            ________________________________-

            #!/bin/bash

            PORTON=$1
            DIA=$(date +”%y/%m/%d”)
            DIAN=$( echo “$DIA” | sed -r ‘s/[/]+/_/g’)

            DIRZM=”/usr/share/zoneminder/events” #RUTA DE LOS EVENTOS DE ZONEMINDER
            DIRVD=”/var/www/html/owncloud/data/videos-casarojas/files/PORTON” #RUTA A DONDE VAS A GUARDAR EL VIDEO

            DI=”$DIRZM/$PORTON/$DIA”

            cd $DI

            find . -maxdepth 3 -mindepth 1 -type d -exec sh -c ‘(
            cd {} &&
            SD=$(echo ‘{}’ | sed -r ‘s/[/.]+/_/g’) &&
            mkdir -p ‘$DIRVD’/’$PORTON’/’$DIAN’ &&
            avconv -r 20 -f image2 -i %03d-capture.jpg ‘$DIRVD’/’$PORTON’/’$DIAN’/’$PORTON’-‘$DIAN’-$SD-TMP.avi)’ {} \; | sort

            cd $DIRVD/$PORTON/$DIAN
            mencoder -oac copy -ovc copy -idx -o ../”$PORTON”-“$DIAN”.avi *.avi

            __________________________________________

             
  5. mira este error marca si ejecuto yo el scripts sin cron, con el comando “sh creación.sh”

    ______________________________________

    built on Mar 16 2015 13:37:34 with gcc 4.8 (Ubuntu/Linaro 4.8.2-19ubuntu1)
    %03d-capture.jpg: No such file or directory
    avconv version 9.18-6:9.18-0ubuntu0.14.04.1, Copyright (c) 2000-2014 the Libav developers
    built on Mar 16 2015 13:37:34 with gcc 4.8 (Ubuntu/Linaro 4.8.2-19ubuntu1)
    %03d-capture.jpg: No such file or directory
    MEncoder 1.1-4.8 (C) 2000-2012 MPlayer Team
    File not found: ‘*.avi’
    Failed to open *.avi.
    Cannot open file/device.

    Exiting…
    rm: cannot remove â*-TMP.aviâ: No such file or directory

    root@ubuntu:/usr/share/zoneminder#

    ________________________________________________

     
  6. no sale nada, :O

    %03d-capture.jpg: No such file or directory
    avconv version 9.18-6:9.18-0ubuntu0.14.04.1, Copyright (c) 2000-2014 the Libav developers
    built on Mar 16 2015 13:37:34 with gcc 4.8 (Ubuntu/Linaro 4.8.2-19ubuntu1)

    %03d-capture.jpg: No such file or directory
    avconv version 9.18-6:9.18-0ubuntu0.14.04.1, Copyright (c) 2000-2014 the Libav developers
    built on Mar 16 2015 13:37:34 with gcc 4.8 (Ubuntu/Linaro 4.8.2-19ubuntu1)

    %03d-capture.jpg: No such file or directory
    MEncoder 1.1-4.8 (C) 2000-2012 MPlayer Team

    File not found: ‘*.avi’
    Failed to open *.avi.
    Cannot open file/device.

    root@ubuntu:/usr/share/zoneminder# echo $DIA

    root@ubuntu:/usr/share/zoneminder# echo $DIAN

    root@ubuntu:/usr/share/zoneminder#

    _______________________________________________

     
  7. no mira yo estoy ejecutándolo en cron el script y ejecutaba bien el comando antes ,pero no salía con el nombre!!!, así lo tenia antes : DIA=date +”%y-%m-%d”

    ahora le cambie el parámetro así: DIA=$(date +”%y/%m/%d”)

    pero nu lo genera..

     
      1. Yo ya no tengo zoneminder, ahora uso una aplicación de paga para la gestión de los videos.
        No puedo hacer pruebas en este momento, pero puedo hacer el intento para que quede el script perfecto acorde a tus necesidades.

         
    1. Que tal, disculpa la tardanza para contestar.

      Si colocas en consola esto
      echo $(date +”%y/%m/%d”)
      ¿Que te muestra?

      Si sí muestra información, pero cuando imprimes echo $DIA, sale vacío, al parecer lo estás perdiendo en algún punto del script.

      ¿Puedes colcocar tu script tal y como está con tus cambios?

       
  8. así esta el scripts!

    ——————————————-
    #!/bin/bash

    PORTON=$1
    DIA=$(date +”%y/%m/%d”)
    DIAN=$( echo “$DIA” | sed -r ‘s/[/]+/_/g’)

    DIRZM=”/usr/share/zoneminder/events”
    DIRVD=”/var/www/html/owncloud/data/videos-casarojas/files/PORTON”

    DI=”$DIRZM/$PORTON/$DIA”

    cd $DI

    find . -maxdepth 3 -mindepth 1 -type d -exec sh -c ‘(
    cd {} &&
    SD=$(echo ‘{}’ | sed -r ‘s/[/.]+/_/g’) &&
    mkdir -p ‘$DIRVD’/’$PORTON’/’$DIAN’ &&
    avconv -r 20 -f image2 -i %03d-capture.jpg ‘$DIRVD’/’$PORTON’/’$DIAN’/’$PORTON’-‘$DIAN’-$SD-TMP.avi)’ {} \; | sort

    cd $DIRVD/$PORTON/$DIAN

     
    1. Qué tal.

      Hice unas pruebas y me generó correctamente el video final como
      $PORTON-FECHA.avi

      Por ejemplo, me acaba de generar el siguiente archivo
      prueba-15_06-19.avi

      Te dejo el código con el cual lo conseguí

      #!/bin/bash

      PORTON=$1
      DIA=$(date +%y/%m/%d)
      DIAN=$( echo $DIA | sed -r ‘s/[/]+/_/g’)

      DIRZM=’/home/angelos’
      DIRVD=’/home/angelos/tmp’

      DI=”$DIRZM/$PORTON/$DIA”

      cd “$DI”

      find . -maxdepth 3 -mindepth 1 -type d -exec sh -c ‘(
      echo “SI”
      cd {} &&
      SD=$(echo ‘{}’ | sed -r ‘s/[/.]+/_/g’) &&
      mkdir -p ‘$DIRVD’/’$PORTON’/’$DIAN’ &&
      avconv -r 20 -f image2 -i %03d-capture.jpg ‘$DIRVD’/’$PORTON’/’$DIAN’/’$PORTON’-‘$DIAN’-$SD-TMP.avi)’ {} \; | sort

      cd $DIRVD/$PORTON/$DIAN

      mencoder -oac copy -ovc copy -idx -o ../$PORTON-$DIAN.avi *.avi
      rm *-TMP.avi
      cd ..
      rm -r $DIAN

       
      1. Me funciona! merci!!! thanks u, te debo una ronda de cervezas para honrar a los dioses como se debe, ajjajaajajaja

         
          1. hola angelinux

            sabes, se me presento otro problema, es que cuando crea el video, los separa en muchos videos y no los recopila todos 😛

             
          2. genera normal los videos por día, solo que no los almacena en 1 video , sino en muchos videos

             
          3. me genero 119 videos distintos de 1 día :O… mira asi tengo ahora el scripts

            ——————

            #!/bin/bash

            PORTON=$1
            DIA=$(date +%y/%m/%d)
            DIAN=$( echo $DIA | sed -r ‘s/[/]+/_/g’)

            DIRZM=”/usr/share/zoneminder/events/PORTON”
            DIRVD=”/var/www/html/owncloud/data/videos-casarojas/files/PORTON”

            DI=”$DIRZM/$PORTON/$DIA”

            cd $DI

            find . -maxdepth 3 -mindepth 1 -type d -exec sh -c ‘(
            cd {} &&
            SD=$(echo ‘{}’ | sed -r ‘s/[/.]+/_/g’) &&
            mkdir -p ‘$DIRVD’/’$PORTON’/’$DIAN’ &&
            avconv -r 20 -f image2 -i %03d-capture.jpg ‘$DIRVD’/’$PORTON’/’$DIAN’/’$PORTON’-‘$DIAN’-$SD-TMP.avi)’ {} \; | sort

            cd $DIRVD/$PORTON/$DIAN

            mencoder -oac copy -ovc copy -idx -o ../”$PORTON”-“$DIAN”.avi *.avi
            rm *-TMP.avi
            cd ..
            rm -r $DIAN
            ————————————

             
          4. Primero toma cada carpeta que se genera en un día, y eso lo convierte en video y lo coloca en $DIRVD/$PORTON/$DIAN
            Una vez que termine de generar un video por cada carpeta de un día, entonces empieza a generar un único video para todo un día y lo guarda en $DIRVD/$PORTON y entonces borra todos los videos chicos y borra $DIAN.

            ¿Puedes verificar si no arroja algún error durante la ejecución? tal vez no puede ejecutar alguna acción por permisos.

            Saludos.

             
          5. este erro me tira al final!!!

            _________________________-

            built on Mar 16 2015 13:37:34 with gcc 4.8 (Ubuntu/Linaro 4.8.2-19ubuntu1)
            %03d-capture.jpg: No such file or directory
            avconv version 9.18-6:9.18-0ubuntu0.14.04.1, Copyright (c) 2000-2014 the Libav developers
            built on Mar 16 2015 13:37:34 with gcc 4.8 (Ubuntu/Linaro 4.8.2-19ubuntu1)
            Input #0, image2, from ‘%03d-capture.jpg’:
            Duration: 00:00:00.30, start: 0.000000, bitrate: N/A
            Stream #0.0: Video: mjpeg, yuvj420p, 880×640 [PAR 1:1 DAR 11:8], 20 fps, 20 tbr, 20 tbn
            Output #0, avi, to ‘/var/www/html/owncloud/data/videos-casarojas/files/PORTON//15_06_30/-15_06_30-_20_00_00-TMP.avi’:
            Metadata:
            ISFT : Lavf54.20.4
            Stream #0.0: Video: mpeg4, yuv420p, 880×640 [PAR 1:1 DAR 11:8], q=2-31, 200 kb/s, 20 tbn, 20 tbc
            Stream mapping:
            Stream #0:0 -> #0:0 (mjpeg -> mpeg4)
            Press ctrl-c to stop encoding
            frame= 6 fps= 0 q=6.9 Lsize= 241kB time=0.30 bitrate=6568.7kbits/s
            video:235kB audio:0kB global headers:0kB muxing overhead 2.455682%
            MEncoder 1.1-4.8 (C) 2000-2012 MPlayer Team
            -15_06_30-_16_54_52-TMP.avi is not an MEncoder option

            Exiting… (error parsing command line)
            rm: invalid option — ‘1’
            Try ‘rm ./-15_06_30-_16_54_52-TMP.avi’ to remove the file â-15_06_30-_16_54_52-TMP.aviâ.
            Try ‘rm –help’ for more information.

             
    1. Qué tal Diego.

      ¿puedes comentarme el comando exacto con el que ejecutaste el script por favor?

      Try ‘rm ./-15_06_30-_16_54_52-TMP.avi’ to remove the file â-15_06_30-_16_54_52-TMP.aviâ.
      Éste error indica que al parecer no se está enviando el parámetro del portón.

      Saludos.

       
      1. En el crontab lo tengo así el comando para generalo todos los a x hora

        59 23 * * * /home/zmgenerador PORTON

         
        1. Qué tal Diego.
          Por lo que veo en el error que te marca, es cuando intenta eliminar los videos generados por eventos, al parecer si te genera el video único por día.

          Además, de lo que me doy cuenta es que en los archivos que se están creando, no llevan el nombre de la camara. Aquí puedes verificar si estás enviando correctamente el parámetro de la cámara, o si tienes una sola, ponsela estática en el código.

          Otro cambio que te sugiero es:
          /’$CAMARA’-‘$DIAN’
          por
          /’$CAMARA’_‘$DIAN’

          Ya que como no estás enviando la cámara entonces el nombre del archivo queda como
          15-07-30, por ejemplo

          Y cuando se intenta eliminar el archivo, el guion lo toma como un parámetro, y por eso marca parámetro -1 desconocido.

          Cambiándolo a guion bajo, se resuelve, y solo queda pendiente que verifiques lo del nombre de la cámara.

          Saludos.

           
          1. hola, sabes cambie el parámetro
            /’$CAMARA’-‘$DIAN’
            por
            /’$CAMARA’_‘$DIAN’

            pero aun me general todos los eventos por separado, 😛

             
  9. Hola:
    Un artículo genial que me ha ayudado mucho.
    Me encantaría hacer funcionar el script pero no lo consigo. Mi distribución no vien con avconv así que lo he descargado, compilado e instaldo, el problema es que al ejecutar el script tal cual, cambiando las rutas, me pone:
    avconv version 11.4, Copyright (c) 2000-2014 the Libav developers
    built on Jul 3 2015 17:54:31 with gcc 4.9.2 (GCC)
    %03d-capture.jpg: No such file or directory
    estoy bastante flojo en script pero si cambio :
    avconv -r 20 -f image2 -i %03d-capture.jpg ‘$DIRVD’/’$CAMARA’/’$DIAN’/’$CAMARA’-‘$DIAN’-$SD-TMP.avi)’ {} \; | sort
    por
    avconv -r 20 -f image2 -i *-capture.jpg ‘$DIRVD’/’$CAMARA’/’$DIAN’/’$CAMARA’-‘$DIAN’-$SD-TMP.avi)’ {} \; | sort
    si sesaparece ese error y me crea un archivo de video vacio saliendo el siguiente error:
    [image2 @ 0x3264240] Could not open file : 00002-capture.jpg
    av_interleaved_write_frame(): Input/output error
    agradecería mucho si pudieras ayudarmen con eso, o explicarme que es el %03d-capture.
    Gracias y un saludo

     
    1. Qué tal.

      Zoneminder genera una carpeta para el año. En mi versión la genera con cuatro dígitos, aunque me han comentado que en versiones más recientes lo está generando con dos dígitos.
      Puedes verificar esto en la carpeta donde tengas tus eventos de zoneminder.

      Si lo genera con dos dígitos, entonces debes cambiar el llamado al script de
      sh video.sh AngelosGames 2014/01/19
      A
      sh video.sh AngelosGames 14/01/19

      Ahora bien, dentro de la carpeta del año, genera otra carpeta para el mes, y después otra para el día.
      En la carpeta del día genera una subcarpeta por cada evento que graba, significa que en un día normal, puede estar generando cientos de carpetas. Y los archivos (fotogramas) de lo que graba, lo hace con el formato de número de 3 dígitos, seguido del texto “-capture.jpg”. por ejemplo 001-capture.jpg, 002-capture.jpg.

      Por ello, en el script. el parámetro interno -i %03d-capture.jpg significa, que los archivos de imágenes que convertirá a video, será aquellos que tenga el formato de 3 digitos (%03d) seguido de la cadena “-capture.jpg”.

      En tu caso necesitaría primero la confirmación si tu zoneminder utiliza el año de dos dígitos o cuatro, y que me pases el comando con los parámetros exactos para que pueda determinar cual es el problema y ayudarte a que el script lo puedas ejecutar sin problemas.

      Saludos.

       
  10. Muchas gracias por contestar tan pronto.
    Utilizo la versión 1.28 y genera eventos con el formato 00001-capture.jpg. Ok, cambio -i %03d por -i%05d. Parece que ahora si encuentra los archivos y todo funciona perfectamente.
    Gracias otra vez.

     
  11. Hola, antes que nada felicidades por tu excelente blog y tu canal de Telegram, sabes tengo un problema con este scipt, al ejecutarlo me aparece el siguiente error:

    sed: -e expresión #1, carácter 1: orden desconocida: <>
    video.sh: 14: video.sh: Syntax error: “(” unexpected

    y de ahí no pasa, ya estuve modificando algunas cosas pero no eh conseguido echarlo a andar, mi equipo es un Pentium 4 con 1G en ram, con Xubuntu 14.04 y la versión del Zm es 1.28.1, tengo configuradas 4 cámaras en el zoneminder y este es el script, que es un vulgar copy/page del que pusiste mas arriba solo cambiando algunos detalles de mis cámaras:

    #!/bin/bash

    Anexo_A=$1
    DIA=$(date +%y/%m/%d)
    DIAN=$(echo $DIA | sed -r ‘s/[/]+/_/g’)

    DIRZM=”/var/cache/zoneminder/events”
    DIRVD=”/home/sistemas/tmp”

    DI=”$DIRZM/$Anexo_A/$DIA”

    cd “$DI”

    find . -maxdepth 3 -mindepth 1 -type d -exec sh -c ‘(
    echo “SI”
    cd {} &&
    SD=$(echo ‘{}’ | sed -r ‘s/[/.]+/_/g’) &&
    mkdir -p ‘$DIRVD’/’$Anexo_A’/’$DIAN’ &&
    avconv -r 20 -f image2 -i %05d-capture.jpg ‘$DIRVD’/’$Anexo_A’/’$DIAN’/’$Anexo_A’_‘$DIAN’-$SD-TMP.avi)’ {} \; | sort

    cd $DIRVD/$Anexo_A/$DIAN

    mencoder -oac copy -ovc copy -idx -o ../$Anexo_A-$DIAN.avi *.avi
    rm *-TMP.avi
    cd ..
    rm -r $DIAN

    Segun yo el error de sintaxis esta en esta linea:

    find . -maxdepth 3 -mindepth 1 -type d -exec sh -c ‘(

    Espero que puedas apoyarme.

    Saludos

     
    1. Qué tal José.

      A veces al poner un post en blogger o wordpress cambia la comilla simple por apóstrofe, y eso puede ocasionar que el script no se ejecute correctamente.
      ¿Has verificado que en tu script contenga la comilla simple?

      Intenta verificar que en todo el script contenga comilla simple y vuelve a ejecutarlo.

      Yo espero modificar mi post para colocarlo como fragmento de código en lugar de texto formateado.

      Cualquier detalle me comentas y vemos su posible solución.

      ¡Gracias por las felicitaciones y por la suscripción al canal!

      Saludos.

       
      1. Hola amigo, antes que nada una disculpa por la tardanza para responder, pero después de actualizar a la versión 1.29 de zoneminder ya no pude ingresar al mismo y no podía correr pruebas, asta ahora que reinstale todo de cero y ya esta en operación nuevamente.

        Tenias razón en cuanto a las comillas, corregí el script y ya opera correctamente, ahora solo tengo un par de dudas, como te comentaba tengo cuatro cámaras configuradas sobre zoneminder,

        1. ¿para realizar la conversión a vídeo y programarlo con Crontab tengo que generar un script por cada cámara?

        2. O ¿puedo simplemente en el mismo script añadir cada una de estas y así programar el Crontab?

        3. Por otra parte una de las cámaras me interesa grabar sonido, es posible al hacer la conversión ¿que esta se guarde con dicho sonido?

        De antemano mil gracias por tu apoyo.

        Saludos

         
        1. ¿Qué tal?
          Con respecto a CRON, puedes hacer un script que recorra un arreglo con el nombre de cada una de tus caámaras y las recorra para generar el video.
          Con respecto al audio, lamento no poder ayudarte, nunca hice pruebas de utilizar zoneminder con captación de audio y por consiguiente tomarlo en cuenta en la generación de dicho video.

          Saludos.

           

Deja un comentario