Module Gladys-shell


#42

@Jean34 à quel moment j’execute le script ?
Dans un scénario ? je lui dis allume mon device ?


#43

le script tu l’exécute quand tu veux avec un scénario qui peut être déclenché par une alarme par exemple.
Maintenant essaye de mettre le device en bouton push pour voir , quand j’ai fais le module ça existait pas.
a chaque fois que tu va cliquer la commande sera exécutée et pour moi tout fonctionne bien

L’identifier sera éxécuté comme une commande donc si tu veux lire un fichier sh :

sh fichier.sh

Si tu as encore des problèmes envoi des logs Gladys


#44

Salut Joeypic, merci pour ton module.

Malheureusement je n’arrive pas à le faire fonctionner. Sur mon rasp j’ai un script dans le dossier /media/surveillance chargé d’enregistrer les images de ma caméra de vidéosurveillance.

Dans les logs le script est bien lancé:
gladys-shell: Executing command sh /media/surveillance/record.sh

Mais rien ne se passe, aucune vidéos n’apparaît dans le dossier concerné. Alors que si je lance le script directement depuis SSH, tout fonctionne, donc cela ne viens pas du script, je suis un peu désappointé :confused:


#45

Salut, en ssh tu lances ton script avec l’user pi. Ajoute des logs de ton script sh aussi pour voir ?


#46

Voici les logs de mon script.

ffmpeg started on 2019-02-19 at 12:29:54
Report written to “ffmpeg-20190219-122954.log”
Command line:
ffmpeg -rtsp_transport tcp -i rtsp://192.168.1.51:10554/tcp/av0_0 -r 30 -t 60 -vcodec h264 -report salon_20190219-12:29:54.mp4
ffmpeg version 3.2.12-1~deb9u1+rpt1 Copyright © 2000-2018 the FFmpeg developers
built with gcc 6.3.0 (Raspbian 6.3.0-18+rpi1+deb9u1) 20170516
configuration: --prefix=/usr --extra-version=‘1~deb9u1+rpt1’ --toolchain=hardened --libdir=/usr/lib/arm-linux-gnueabihf --incdir=/usr/include/arm-linux-gnueabihf --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libebur128 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-omx-rpi --enable-mmal --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --arch=armhf --enable libavutil 55. 34.101 / 55. 34.101
libavcodec 57. 64.101 / 57. 64.101
libavformat 57. 56.101 / 57. 56.101
libavdevice 57. 1.100 / 57. 1.100
libavfilter 6. 65.100 / 6. 65.100
libavresample 3. 1. 0 / 3. 1. 0
libswscale 4. 2.100 / 4. 2.100
libswresample 2. 3.100 / 2. 3.100
libpostproc 54. 1.100 / 54. 1.100
Splitting the commandline.
Reading option ‘-rtsp_transport’ … matched as AVOption ‘rtsp_transport’ with argument ‘tcp’.
Reading option ‘-i’ … matched as input url with argument ‘rtsp://192.168.1.51:10554/tcp/av0_0’.
Reading option ‘-r’ … matched as option ‘r’ (set frame rate (Hz value, fraction or abbreviation)) with argument ‘30’.
Reading option ‘-t’ … matched as option ‘t’ (record or transcode “duration” seconds of audio/video) with argument ‘60’.
Reading option ‘-vcodec’ … matched as option ‘vcodec’ (force video codec (‘copy’ to copy stream)) with argument ‘h264’.
Reading option ‘-report’ … matched as option ‘report’ (generate a report) with argument ‘1’.
Reading option ‘salon_20190219-12:29:54.mp4’ … matched as output url.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option report (generate a report) with argument 1.
Successfully parsed a group of options.
Parsing a group of options: input url rtsp://192.168.1.51:10554/tcp/av0_0.
Successfully parsed a group of options.
Opening an input file: rtsp://192.168.1.51:10554/tcp/av0_0.
[tcp @ 0x107a600] No default whitelist set
[rtsp @ 0x1078790] SDP:
v=0
o=- 1550579395 1550579396 IN IP4 192.168.1.51
s=streamed by the RTSP server
t=0 0
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=control:track0
a=fmtp:96 packetization-mode=1;profile-level-id=64001F;sprop-parameter-sets=Z0IAH5WoFAFuQA==,aM48gA==

[rtsp @ 0x1078790] video codec set to: h264
[rtsp @ 0x1078790] RTP Packetization Mode: 1
[rtsp @ 0x1078790] RTP Profile IDC: 64 Profile IOP: 0 Level: 1f
[rtsp @ 0x1078790] Extradata set to 0x107a750 (size: 22)
[rtsp @ 0x1078790] setting jitter buffer size to 0
[rtsp @ 0x1078790] hello state=0
[h264 @ 0x107b5b0] nal_unit_type: 7, nal_ref_idc: 3
[h264 @ 0x107b5b0] nal_unit_type: 8, nal_ref_idc: 3
[h264 @ 0x107b5b0] nal_unit_type: 7, nal_ref_idc: 3
[h264 @ 0x107b5b0] nal_unit_type: 8, nal_ref_idc: 3
[h264 @ 0x107b5b0] nal_unit_type: 7, nal_ref_idc: 3
[h264 @ 0x107b5b0] nal_unit_type: 8, nal_ref_idc: 3
[h264 @ 0x107b5b0] nal_unit_type: 5, nal_ref_idc: 3
[h264 @ 0x107b5b0] Reinit context to 1280x720, pix_fmt: yuv420p
[h264 @ 0x107b5b0] nal_unit_type: 7, nal_ref_idc: 3
[h264 @ 0x107b5b0] nal_unit_type: 8, nal_ref_idc: 3
[h264 @ 0x107b5b0] nal_unit_type: 5, nal_ref_idc: 3
[h264 @ 0x107b5b0] nal_unit_type: 1, nal_ref_idc: 2
[h264 @ 0x107b5b0] nal_unit_type: 1, nal_ref_idc: 2
[h264 @ 0x107b5b0] nal_unit_type: 1, nal_ref_idc: 2
[h264 @ 0x107b5b0] nal_unit_type: 1, nal_ref_idc: 2
[h264 @ 0x107b5b0] nal_unit_type: 1, nal_ref_idc: 2
[rtsp @ 0x1078790] All info found
Input #0, rtsp, from ‘rtsp://192.168.1.51:10554/tcp/av0_0’:
Metadata:
title : streamed by the RTSP server
Duration: N/A, start: 0.520000, bitrate: N/A
Stream #0:0, 28, 1/90000: Video: h264 (Constrained Baseline), yuv420p(progressive), 1280x720, 25 fps, 25 tbr, 90k tbn, 50 tbc
Successfully opened the file.
Parsing a group of options: output url salon_20190219-12:29:54.mp4.
Applying option r (set frame rate (Hz value, fraction or abbreviation)) with argument 30.
Applying option t (record or transcode “duration” seconds of audio/video) with argument 60.
Applying option vcodec (force video codec (‘copy’ to copy stream)) with argument h264.
Successfully parsed a group of options.
Opening an output file: salon_20190219-12:29:54.mp4.
Matched encoder ‘libx264’ for codec ‘h264’.
[file @ 0x10c05e0] Setting default whitelist ‘file,crypto’
Successfully opened the file.
detected 4 logical cores
[graph 0 input from stream 0:0 @ 0x11400f0] Setting ‘video_size’ to value ‘1280x720’
[graph 0 input from stream 0:0 @ 0x11400f0] Setting ‘pix_fmt’ to value ‘0’
[graph 0 input from stream 0:0 @ 0x11400f0] Setting ‘time_base’ to value ‘1/90000’
[graph 0 input from stream 0:0 @ 0x11400f0] Setting ‘pixel_aspect’ to value ‘0/1’
[graph 0 input from stream 0:0 @ 0x11400f0] Setting ‘sws_param’ to value ‘flags=2’
[graph 0 input from stream 0:0 @ 0x11400f0] Setting ‘frame_rate’ to value ‘25/1’
[graph 0 input from stream 0:0 @ 0x11400f0] w:1280 h:720 pixfmt:yuv420p tb:1/90000 fr:25/1 sar:0/1 sws_param:flags=2
[format @ 0x10ae080] compat: called with args=[yuv420p|yuvj420p|yuv422p|yuvj422p|yuv444p|yuvj444p|nv12|nv16|nv21]
[format @ 0x10ae080] Setting ‘pix_fmts’ to value ‘yuv420p|yuvj420p|yuv422p|yuvj422p|yuv444p|yuvj444p|nv12|nv16|nv21’
[AVFilterGraph @ 0x10c16f0] query_formats: 5 queried, 4 merged, 0 already done, 0 delayed
[h264 @ 0x10ac3f0] nal_unit_type: 7, nal_ref_idc: 3
[h264 @ 0x10ac3f0] nal_unit_type: 8, nal_ref_idc: 3
[libx264 @ 0x10bfa90] using mv_range_thread = 56
[libx264 @ 0x10bfa90] using cpu capabilities: ARMv6 NEON
[libx264 @ 0x10bfa90] profile High, level 3.1
[libx264 @ 0x10bfa90] 264 - core 148 r2748 97eaef2 - H.264/MPEG-4 AVC codec - Copyleft 2003-2016 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to ‘salon_20190219-12:29:54.mp4’:
Metadata:
title : streamed by the RTSP server
encoder : Lavf57.56.101
Stream #0:0, 0, 1/15360: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 1280x720, q=-1–1, 30 fps, 15360 tbn, 30 tbc
Metadata:
encoder : Lavc57.64.101 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Press [q] to stop, [?] for help


#47

On peut voir le contenu de ton script ?


#48

Mon script:

    #!/bin/bash

    flux='rtsp://192.168.1.51:10554/tcp/av0_0'
    date=`date +%Y%m%d-%H%M%S`
    nomFichier='salon_$date.mp4'

    ffmpeg -rtsp_transport tcp -i $flux -r 30 -t 60 -vcodec h264 -report $nomFichier

#49

Alors au lieu de lancer un script, lance directement la commande depuis Gladys, en mettant :

ffmpeg -rtsp_transport tcp -i rtsp://192.168.1.51:10554/tcp/av0_0 -r 30 -t 60 -vcodec h264 -report date +%s.mp4

Attention : il faut mettre “date +%s” entre des apostrophes obliques (celle obtenue avec Alt Gr + 7 sur clavier Windows).
Le fichier généré aura comme nom le nombre de secondes écoulées depuis 1970.


#50

Autre solution, plus proche de ce que tu voulais, au niveau de la commande :

ffmpeg -t 60 -rtsp_transport tcp -i rtsp://192.168.1.51:10554/tcp/av0_0 -f segment -segment_time 65 -strftime 1 %Y-%m-%d_%H-%M-%S.mp4

  • -t 60 : dit qu’il ne faut lire que 60 secondes en entrée.
  • -f segment : dit qu’on veut couper la vidéo en différent segment, de longueur segment_time.
  • -segment_time : durée de chaque segment, donc de chaque vidéo en sortie ; si tu mets 60, le calcul n’étant pas juste, tu peux te retrouver avec 2 vidéos en sortie.
    *-strftime 1 : autorise un nom de fichier variable, car on segmente la vidéo en entrée.

J’ai également viré le codec (inutile, FFmpeg devrait savoir lequel utiliser tout seul), ainsi que le framerate, vu qu’en général, les caméra de sécu adapte leur framerate à l’activité sur la vidéo ; ainsi FFmpeg s’adaptera et optimisera la taille de tes fichiers.


#51

Salut @piznel, merci ça marche nickel !
Pour ma culture : quelle est la raison qui fait que je ne puisse pas exécuter le script dans un fichier? (Même en chmod 777 ça ne fonctionne pas).


#52

Parceque tu donnes bien le chemin de ton fichier, mais ce n’est pas une commande Shell.
La commande Shell est, comme l’a mis @joeypic sh fichier.sh.
La solution que je t’ai proposé est directe, du coup, plus besoin de dire l’interpreteur de commande à utiliser.