Recherche avancée

Médias (1)

Mot : - Tags -/wave

Autres articles (77)

  • Organiser par catégorie

    17 mai 2013, par

    Dans MédiaSPIP, une rubrique a 2 noms : catégorie et rubrique.
    Les différents documents stockés dans MédiaSPIP peuvent être rangés dans différentes catégories. On peut créer une catégorie en cliquant sur "publier une catégorie" dans le menu publier en haut à droite ( après authentification ). Une catégorie peut être rangée dans une autre catégorie aussi ce qui fait qu’on peut construire une arborescence de catégories.
    Lors de la publication prochaine d’un document, la nouvelle catégorie créée sera proposée (...)

  • Récupération d’informations sur le site maître à l’installation d’une instance

    26 novembre 2010, par

    Utilité
    Sur le site principal, une instance de mutualisation est définie par plusieurs choses : Les données dans la table spip_mutus ; Son logo ; Son auteur principal (id_admin dans la table spip_mutus correspondant à un id_auteur de la table spip_auteurs)qui sera le seul à pouvoir créer définitivement l’instance de mutualisation ;
    Il peut donc être tout à fait judicieux de vouloir récupérer certaines de ces informations afin de compléter l’installation d’une instance pour, par exemple : récupérer le (...)

  • Support de tous types de médias

    10 avril 2011

    Contrairement à beaucoup de logiciels et autres plate-formes modernes de partage de documents, MediaSPIP a l’ambition de gérer un maximum de formats de documents différents qu’ils soient de type : images (png, gif, jpg, bmp et autres...) ; audio (MP3, Ogg, Wav et autres...) ; vidéo (Avi, MP4, Ogv, mpg, mov, wmv et autres...) ; contenu textuel, code ou autres (open office, microsoft office (tableur, présentation), web (html, css), LaTeX, Google Earth) (...)

Sur d’autres sites (5141)

  • FFMPEG - How to pipe RMS_level and pts_time metadata without generating unwanted metadata

    6 février 2020, par Tovi Newman

    I am trying to find the loudest (highest rms_level) moment in an audio file, but I need to pipe the metadata rather than write to a file.

    I converted the answer found here : [https://superuser.com/questions/1183663/determining-audio-level-peaks-with-ffmpeg][1]

    By removing the write to file command and adding a pipe.
    Here’s what I’ve got.

    ffmpeg -i loudSoft.mp3 -af astats=metadata=1:reset=1,ametadata=print:key=lavfi.astats.Overall.RMS_level -f null - 2> result.txt

    The only problem is, now I’ve got a lot of unwanted metadata before and after the RMS_level and pts_time data as well as [Parsed_ametadata_1 @ 0x7f9d42c37500] being printed on each line. None of that was being written when I was writing to a file instead of piping. (all I need is the time and the rms.)

    Here is an abridged version of what I get when I write to file :

    frame:0    pts:0       pts_time:0
    lavfi.astats.Overall.RMS_level=-inf
    frame:1    pts:47      pts_time:0.00106576
    lavfi.astats.Overall.RMS_level=-165.163347
    frame:2    pts:1199    pts_time:0.0271882
    lavfi.astats.Overall.RMS_level=-99.736394
    frame:3    pts:2351    pts_time:0.0533107
    lavfi.astats.Overall.RMS_level=-88.112282
    frame:4    pts:3503    pts_time:0.0794331
    lavfi.astats.Overall.RMS_level=-86.554314
    frame:5    pts:4655    pts_time:0.105556
    lavfi.astats.Overall.RMS_level=-82.977501
    frame:6    pts:5807    pts_time:0.131678
    lavfi.astats.Overall.RMS_level=-79.698739
    frame:7    pts:6959    pts_time:0.1578
    lavfi.astats.Overall.RMS_level=-76.629393
    frame:8    pts:8111    pts_time:0.183923
    lavfi.astats.Overall.RMS_level=-71.581211
    frame:9    pts:9263    pts_time:0.210045
    lavfi.astats.Overall.RMS_level=-75.038503
    frame:10   pts:10415   pts_time:0.236168

    And here is what I’m looking at :

    ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
     built with Apple clang version 11.0.0 (clang-1100.0.33.16)
     configuration: --prefix=/usr/local/Cellar/ffmpeg/4.2.2_1 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.0.1.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.0.1.jdk/Contents/Home/include/darwin -fno-stack-check' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
     libavutil      56. 31.100 / 56. 31.100
     libavcodec     58. 54.100 / 58. 54.100
     libavformat    58. 29.100 / 58. 29.100
     libavdevice    58.  8.100 / 58.  8.100
     libavfilter     7. 57.100 /  7. 57.100
     libavresample   4.  0.  0 /  4.  0.  0
     libswscale      5.  5.100 /  5.  5.100
     libswresample   3.  5.100 /  3.  5.100
     libpostproc    55.  5.100 / 55.  5.100
    Input #0, mp3, from 'loudSoft2.mp3':
     Metadata:
       encoder         : Lavf58.29.100
     Duration: 00:00:09.85, start: 0.025057, bitrate: 128 kb/s
       Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 128 kb/s
       Metadata:
         encoder         : Lavc58.54
    Stream mapping:
     Stream #0:0 -> #0:0 (mp3 (mp3float) -> pcm_s16le (native))
    Press [q] to stop, [?] for help
    [Parsed_ametadata_1 @ 0x7f9d42c37500] frame:0    pts:0       pts_time:0
    [Parsed_ametadata_1 @ 0x7f9d42c37500] lavfi.astats.Overall.RMS_level=-inf
    Output #0, null, to 'pipe:':
     Metadata:
       encoder         : Lavf58.29.100
       Stream #0:0: Audio: pcm_s16le, 44100 Hz, stereo, s16, 1411 kb/s
       Metadata:
         encoder         : Lavc58.54.100 pcm_s16le
    [Parsed_ametadata_1 @ 0x7f9d42c37500] frame:1    pts:47      pts_time:0.00106576
    [Parsed_ametadata_1 @ 0x7f9d42c37500] lavfi.astats.Overall.RMS_level=-165.163347
    [Parsed_ametadata_1 @ 0x7f9d42c37500] frame:2    pts:1199    pts_time:0.0271882
    [Parsed_ametadata_1 @ 0x7f9d42c37500] lavfi.astats.Overall.RMS_level=-99.736394
    [Parsed_ametadata_1 @ 0x7f9d42c37500] frame:3    pts:2351    pts_time:0.0533107


    *** MIDDLE OMITTED FOR BREVITY ***


    [Parsed_ametadata_1 @ 0x7f9d42c37500] lavfi.astats.Overall.RMS_level=-88.532185
    [Parsed_ametadata_1 @ 0x7f9d42c37500] frame:375  pts:430895  pts_time:9.77086
    [Parsed_ametadata_1 @ 0x7f9d42c37500] lavfi.astats.Overall.RMS_level=-88.594276
    [Parsed_ametadata_1 @ 0x7f9d42c37500] frame:376  pts:432047  pts_time:9.79698
    [Parsed_ametadata_1 @ 0x7f9d42c37500] lavfi.astats.Overall.RMS_level=-88.654138
    size=N/A time=00:00:09.82 bitrate=N/A speed=82.6x    
    video:0kB audio:1692kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
    [Parsed_astats_0 @ 0x7f9d42c37280] Channel: 1
    [Parsed_astats_0 @ 0x7f9d42c37280] DC offset: 0.000001
    [Parsed_astats_0 @ 0x7f9d42c37280] Min level: -0.000106
    [Parsed_astats_0 @ 0x7f9d42c37280] Max level: 0.000115
    [Parsed_astats_0 @ 0x7f9d42c37280] Min difference: 0.000000
    [Parsed_astats_0 @ 0x7f9d42c37280] Max difference: 0.000077
    [Parsed_astats_0 @ 0x7f9d42c37280] Mean difference: 0.000017
    [Parsed_astats_0 @ 0x7f9d42c37280] RMS difference: 0.000022
    [Parsed_astats_0 @ 0x7f9d42c37280] Peak level dB: -78.752617
    [Parsed_astats_0 @ 0x7f9d42c37280] RMS level dB: -88.654138
    [Parsed_astats_0 @ 0x7f9d42c37280] RMS peak dB: -88.654138
    [Parsed_astats_0 @ 0x7f9d42c37280] RMS trough dB: -88.654138
    [Parsed_astats_0 @ 0x7f9d42c37280] Crest factor: 3.126627
    [Parsed_astats_0 @ 0x7f9d42c37280] Flat factor: 0.000000
    [Parsed_astats_0 @ 0x7f9d42c37280] Peak count: 2
    [Parsed_astats_0 @ 0x7f9d42c37280] Bit depth: 32/32
    [Parsed_astats_0 @ 0x7f9d42c37280] Dynamic range: 76.274252
    [Parsed_astats_0 @ 0x7f9d42c37280] Zero crossings: 246
    [Parsed_astats_0 @ 0x7f9d42c37280] Zero crossings rate: 0.222624
    [Parsed_astats_0 @ 0x7f9d42c37280] Number of NaNs: 0
    [Parsed_astats_0 @ 0x7f9d42c37280] Number of Infs: 0
    [Parsed_astats_0 @ 0x7f9d42c37280] Number of denormals: 0
    [Parsed_astats_0 @ 0x7f9d42c37280] Channel: 2
    [Parsed_astats_0 @ 0x7f9d42c37280] DC offset: 0.000001
    [Parsed_astats_0 @ 0x7f9d42c37280] Min level: -0.000106
    [Parsed_astats_0 @ 0x7f9d42c37280] Max level: 0.000115
    [Parsed_astats_0 @ 0x7f9d42c37280] Min difference: 0.000000
    [Parsed_astats_0 @ 0x7f9d42c37280] Max difference: 0.000077
    [Parsed_astats_0 @ 0x7f9d42c37280] Mean difference: 0.000017
    [Parsed_astats_0 @ 0x7f9d42c37280] RMS difference: 0.000022
    [Parsed_astats_0 @ 0x7f9d42c37280] Peak level dB: -78.752617
    [Parsed_astats_0 @ 0x7f9d42c37280] RMS level dB: -88.654138
    [Parsed_astats_0 @ 0x7f9d42c37280] RMS peak dB: -88.654138
    [Parsed_astats_0 @ 0x7f9d42c37280] RMS trough dB: -88.654138
    [Parsed_astats_0 @ 0x7f9d42c37280] Crest factor: 3.126627
    [Parsed_astats_0 @ 0x7f9d42c37280] Flat factor: 0.000000
    [Parsed_astats_0 @ 0x7f9d42c37280] Peak count: 2
    [Parsed_astats_0 @ 0x7f9d42c37280] Bit depth: 32/32
    [Parsed_astats_0 @ 0x7f9d42c37280] Dynamic range: 76.274252
    [Parsed_astats_0 @ 0x7f9d42c37280] Zero crossings: 246
    [Parsed_astats_0 @ 0x7f9d42c37280] Zero crossings rate: 0.222624
    [Parsed_astats_0 @ 0x7f9d42c37280] Number of NaNs: 0
    [Parsed_astats_0 @ 0x7f9d42c37280] Number of Infs: 0
    [Parsed_astats_0 @ 0x7f9d42c37280] Number of denormals: 0
    [Parsed_astats_0 @ 0x7f9d42c37280] Overall
    [Parsed_astats_0 @ 0x7f9d42c37280] DC offset: 0.000001
    [Parsed_astats_0 @ 0x7f9d42c37280] Min level: -0.000106
    [Parsed_astats_0 @ 0x7f9d42c37280] Max level: 0.000115
    [Parsed_astats_0 @ 0x7f9d42c37280] Min difference: 0.000000
    [Parsed_astats_0 @ 0x7f9d42c37280] Max difference: 0.000077
    [Parsed_astats_0 @ 0x7f9d42c37280] Mean difference: 0.000017
    [Parsed_astats_0 @ 0x7f9d42c37280] RMS difference: 0.000022
    [Parsed_astats_0 @ 0x7f9d42c37280] Peak level dB: -78.752617
    [Parsed_astats_0 @ 0x7f9d42c37280] RMS level dB: -88.654138
    [Parsed_astats_0 @ 0x7f9d42c37280] RMS peak dB: -88.654138
    [Parsed_astats_0 @ 0x7f9d42c37280] RMS trough dB: -88.654138
    [Parsed_astats_0 @ 0x7f9d42c37280] Flat factor: 0.000000
    [Parsed_astats_0 @ 0x7f9d42c37280] Peak count: 2.000000
    [Parsed_astats_0 @ 0x7f9d42c37280] Bit depth: 32/32
    [Parsed_astats_0 @ 0x7f9d42c37280] Number of samples: 1105
    [Parsed_astats_0 @ 0x7f9d42c37280] Number of NaNs: 0.000000
    [Parsed_astats_0 @ 0x7f9d42c37280] Number of Infs: 0.000000
    [Parsed_astats_0 @ 0x7f9d42c37280] Number of denormals: 0.000000
  • FFMPEG - Why can't i record a video for more than 10 seconds ?

    12 février 2020, par gabriel

    I’m developing a screen recorder for windows with python but for some reason i can’t record the video for more than 10 seconds.However i can record the audio for more than 10 seconds.
    Also i’m using :

    FFMPEG - to record the video with mp4 extension

    PYAUDIO - to record the sound

    TKINTER - to design the GUI

    Since the problem is with the video recording i will leave the code that i used with ffmpeg :

    """
    cmdGen.py generates ffmpeg commands to record your screen

    """
    import os

    class cmdGen:
       def __init__(self):
           self.fps = 60
           self.source = "desktop"
           self.encoder = 'mpeg4'
           self.hwaccel = None
           self.drawMouse = 1
           self.enableWebcam = False
           self.audList = 0
       def config(self,
                   fps=None,source=None,encoder=None,
                   hwaccel='unchanged',drawMouse=None,
                   webcam=None,audList=None):
           if fps: self.fps = fps
           if source: self.source = source
           if encoder: self.encoder = encoder
           if hwaccel != 'unchanged': self.hwaccel = hwaccel
           if drawMouse: self.drawMouse = 0 if not self.drawMouse else 1
           if webcam: self.enableWebcam = bool(webcam)
           if audList: self.audList = audList
       def setSource(self,isWindow,windowName=""):
           if not isWindow:
               self.source = "desktop"
           else:
               self.source = "title="+windowName
       def setFps(self,fps):
           self.fps = fps
       def setEncode(self,encoder):
           self.encoder = encoder
       def getCmd(self,filename):
           print("ACK")
           finalCmd = ["ffmpeg.exe","-f","gdigrab"]
           finalCmd.extend(['-i',self.source])
           finalCmd.extend(['-framerate',str(self.fps)])
           finalCmd.extend(['-c:v',self.encoder])
           if self.encoder == 'mpeg4':
               finalCmd.extend(['-q:v','7'])
           if self.hwaccel:
               finalCmd.extend(['-hwaccel',self.hwaccel])
           finalCmd.extend(['-draw_mouse',str(self.drawMouse)])
           finalCmd.extend(["-y", filename])
           print(finalCmd)
           return finalCmd
       def getCvtCmd(self,filename):
               # if self.rcchecked.get():
               #     self.mergeProcess = subprocess.Popen(args= ["ffmpeg","-i",'tmp/tmp.mkv','-i','tmp/tmp.wav','-i','tmp/webcamtmp.mkv','-filter_complex','[2:v] scale=640:-1 [inner]; [0:0][inner] overlay=0:0 [out]',"-shortest",'-map','[out]','-y',"ScreenCaptures/"+self.filename])
               # else:
               #     self.mergeProcess = subprocess.Popen(args= ["ffmpeg","-i",'tmp/tmp.mkv','-i','tmp/tmp.wav',"-shortest",'-y',"ScreenCaptures/"+self.filename], startupinfo=startupinfo)
           print("ACK")
           finalCmd = ["ffmpeg.exe"]
           finalCmd.extend(['-i','tmp/tmp.mkv'])
           for i in range(len(self.audList)):
               finalCmd.extend(['-i','tmp/tmp_'+str(i)+'.wav'])
           if len(self.audList) > 0:
               finalCmd.extend(['-filter_complex','amerge=inputs='+str(len(self.audList)),'-ac',str(len(self.audList))])
           # finalCmd.extend(['-c:v',self.encoder])
           if self.enableWebcam:
               finalCmd.extend(['-i','tmp/webcamtmp.mkv','-filter_complex','[2:v] scale=640:-1 [inner]; [0:0][inner] '
                                                                           'overlay=0:0 [out]','-map','[out]'])

           #finalCmd.extend(['-shortest'])
           finalCmd.extend(["-y", filename])
           print(finalCmd)
           return finalCmd

    if __name__ == "__main__":
       cg = cmdGen()
       cg.setEncode("h264_nvenc")
       cg.setFps(60)
       cg.setSource(False)
       print(cg.getCmd("tmp"))

    Thanks guys

    Full log trying to record 1 minute :

    C:\Users\FabianoFreitas\AppData\Local\Programs\Python\Python37\python.exe C:/Users/FabianoFreitas/Desktop/PowerShare-v2.0/screenRecorder.py
    ACK
    ['ffmpeg.exe', '-f', 'gdigrab', '-i', 'desktop', '-framerate', '60', '-c:v', 'mpeg4', '-q:v', '7', '-draw_mouse', '1', '-y', 'tmp/tmp.mkv']
    * recording
    ACK
    ['ffmpeg.exe', '-i', 'tmp/tmp.mkv', '-i', 'tmp/tmp_0.wav', '-filter_complex', 'amerge=inputs=1', '-ac', '1', '-y', 'Videos/ScreenCapture24.mp4']
    * done recording
    ffmpeg version git-2020-02-05-e6891d1 Copyright (c) 2000-2020 the FFmpeg developers
     built with gcc 9.2.1 (GCC) 20200122
     configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
     libavutil      56. 39.100 / 56. 39.100
     libavcodec     58. 67.101 / 58. 67.101
     libavformat    58. 37.100 / 58. 37.100
     libavdevice    58.  9.103 / 58.  9.103
     libavfilter     7. 74.100 /  7. 74.100
     libswscale      5.  6.100 /  5.  6.100
     libswresample   3.  6.100 /  3.  6.100
     libpostproc    55.  6.100 / 55.  6.100
    Input #0, matroska,webm, from 'tmp/tmp.mkv':
     Metadata:
       ENCODER         : Lavf58.37.100
     Duration: N/A, start: 0.000000, bitrate: N/A
       Stream #0:0: Video: mpeg4 (Simple Profile), yuv420p, 2560x1080 [SAR 1:1 DAR 64:27], 29.97 fps, 29.97 tbr, 1k tbn, 30k tbc (default)
       Metadata:
         ENCODER         : Lavc58.67.101 mpeg4
    Guessed Channel Layout for Input Stream #1.0 : stereo
    Input #1, wav, from 'tmp/tmp_0.wav':
     Duration: 00:01:09.08, bitrate: 1411 kb/s
       Stream #1:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
    Stream mapping:
     Stream #1:0 (pcm_s16le) -> amerge (graph 0)
     amerge (graph 0) -> Stream #0:0 (aac)
     Stream #0:0 -> #0:1 (mpeg4 (native) -> h264 (libx264))
    Press [q] to stop, [?] for help
    [Parsed_amerge_0 @ 00000218cb4c1640] No channel layout for input 1
    [libx264 @ 00000218cb4acdc0] using SAR=1/1
    [libx264 @ 00000218cb4acdc0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
    [libx264 @ 00000218cb4acdc0] profile High, level 5.0, 4:2:0, 8-bit
    [libx264 @ 00000218cb4acdc0] 264 - core 159 - H.264/MPEG-4 AVC codec - Copyleft 2003-2019 - 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=12 lookahead_threads=2 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 'Videos/ScreenCapture24.mp4':
     Metadata:
       encoder         : Lavf58.37.100
       Stream #0:0: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 69 kb/s
       Metadata:
         encoder         : Lavc58.67.101 aac
       Stream #0:1: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 2560x1080 [SAR 1:1 DAR 64:27], q=-1--1, 29.97 fps, 30k tbn, 29.97 tbc (default)
       Metadata:
         encoder         : Lavc58.67.101 libx264
       Side data:
         cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
    [matroska,webm @ 00000218cb44af00] File ended prematurely
    frame=  297 fps=113 q=-1.0 Lsize=    2325kB time=00:01:09.07 bitrate= 275.8kbits/s dup=22 drop=0 speed=26.2x    
    video:1713kB audio:591kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.900237%
    [aac @ 00000218cb4ab780] Qavg: 24995.135
    [libx264 @ 00000218cb4acdc0] frame I:4     Avg QP:15.13  size:199596
    [libx264 @ 00000218cb4acdc0] frame P:85    Avg QP:21.15  size:  9466
    [libx264 @ 00000218cb4acdc0] frame B:208   Avg QP:24.93  size:   725
    [libx264 @ 00000218cb4acdc0] consecutive B-frames:  5.1%  2.7%  6.1% 86.2%
    [libx264 @ 00000218cb4acdc0] mb I  I16..4: 48.0% 45.3%  6.7%
    [libx264 @ 00000218cb4acdc0] mb P  I16..4:  1.6%  1.9%  0.8%  P16..4:  1.4%  0.4%  0.3%  0.0%  0.0%    skip:93.7%
    [libx264 @ 00000218cb4acdc0] mb B  I16..4:  0.1%  0.1%  0.0%  B16..8:  3.0%  0.1%  0.0%  direct: 0.0%  skip:96.6%  L0:51.2% L1:48.3% BI: 0.6%
    [libx264 @ 00000218cb4acdc0] 8x8 transform intra:44.4% inter:69.1%
    [libx264 @ 00000218cb4acdc0] coded y,uvDC,uvAC intra: 23.8% 27.4% 19.5% inter: 0.2% 0.3% 0.1%
    [libx264 @ 00000218cb4acdc0] i16 v,h,dc,p: 54% 45%  1%  0%
    [libx264 @ 00000218cb4acdc0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 26% 20% 41%  2%  2%  1%  2%  1%  5%
    [libx264 @ 00000218cb4acdc0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 29% 35% 17%  2%  3%  3%  4%  2%  4%
    [libx264 @ 00000218cb4acdc0] i8c dc,h,v,p: 61% 25% 11%  2%
    [libx264 @ 00000218cb4acdc0] Weighted P-Frames: Y:0.0% UV:0.0%
    [libx264 @ 00000218cb4acdc0] ref P L0: 68.0%  6.3% 16.6%  9.1%
    [libx264 @ 00000218cb4acdc0] ref B L0: 70.2% 23.7%  6.1%
    [libx264 @ 00000218cb4acdc0] ref B L1: 91.1%  8.9%
    [libx264 @ 00000218cb4acdc0] kb/s:1415.80
  • Your guide to cookies, web analytics, and GDPR compliance

    25 février 2020, par Joselyn Khor — Analytics Tips, Privacy, Security

    It’s been almost two years since the GDPR came into effect and turned the online world on its head. Confusion around cookies/cookie consent/cookie compliance remains till today. So we’d like to take this chance to talk more about the supposed “big bad” of the latest century. 

    Online cookies seem to have a bad reputation, but are they as bad as they seem ?

    To start, what are cookies on the internet ?

    An internet cookie a.k.a. an HTTP cookie, is a small piece of data sent from websites that is stored on your computer or mobile when you visit that site.

    Are all cookies bad ?

    No. Cookies themselves are usually harmless as they can’t infect computers with malware. 

    They can also be helpful for both websites who use them and individuals visiting those websites. For example, when online shopping, cookies on ecommerce sites keep track of what you’re shopping for. If you didn’t have that tracking, your cart would be empty every time you moved away from that site.

    For businesses/websites, cookies can be used for authentication (logins) and tracking website user experience. For example, tracking multiple visits to the same site in order to provide better experiences to customers visiting their website.

    internet cookies tracking

    The not-so-sweet types of cookies :

    Cookies that contain personal data

    Another example of a bad cookie is when cookies contain personal data directly in the cookie itself. For example, when websites store demographics or your name in a cookie ; or when a website stores survey results in a cookie. Use of cookies in these ways is considered bad practice nowadays.

    Third-party cookies

    They can be used by websites to learn about your visit and activity across multiple websites. Cookies can enter harmful territory when employed for “big brother” types of tracking i.e. when they’re used to build a virtual fingerprint of individuals after their activity is tracked from website to website. For example most advertising networks create third party cookies in your browser when you view an ad, which lets these advertisers track users across these websites and let companies buy more targeted ads.

    Why does Matomo use cookies ?

    web analytics cookies

    For accurate reporting of new and returning visitors. Matomo uses cookies to store some information about visitors between visits. We also use cookies to remember if someone gave consent to tracking, or opted out of tracking. 

    Types of cookies Matomo uses :

    • Matomo by default uses first-party cookies, set on the domain of your site.
    • Cookies created by Matomo start with : _pk_ref_pk_cvar_pk_id_pk_ses. See a list of all Matomo cookies : https://matomo.org/faq/general/faq_146/

    Cookie-less tracking - disable cookies and ensure cookie compliance :

    It’s possible to disable tracking cookies in Matomo by adding a line on the javascript code. When cookies are disabled, Matomo data will become slightly less accurateAlso, when cookies are disabled, there may still be a few cookies created in specific cases.

    If you disable cookies, Matomo tries to detect unique visitors by a fingerprint based on a few browser attributes : operating system, browser, browser plugins, IP address and browser language.

    By disabling tracking cookies, you may also use Matomo without needing to display a cookie consent screen. You can also keep tracking when they reject cookie consent by keeping cookies disabled.

    Cookies and the GDPR

    In some countries and according to the GDPR, websites need to provide a way for users to opt-out of all tracking, in particular tracking cookies.

    The GDPR regulates the use of cookies when they compromise an individual’s privacy. When cookies can identify an individual, it is considered personal data.

    cookies and GDPR

    Cookie compliance and the GDPR

    To be GDPR compliant you must :

    • Receive user consent before using any cookies (except strictly necessary cookies). Read more on cookies that are “clearly exempt from consent”.
    • Provide accurate and specific information about the data each cookie tracks and its purpose in plain language before consent is received.
    • Document and store consent received from users.
    • Allow users to access your service even if they refuse to allow the use of certain cookies
    • Make it as easy for users to withdraw their consent as it was for them to give their consent in the first place.

    Source : https://gdpr.eu/cookies/

    When does GDPR require cookie consent ?

    The purpose of the GDPR is to give individuals control over their personal data. As such this regulation has provisions and requirements which regulate the processing of personal data to protect the privacy of individuals. 

    This means in order to use cookies, you will sometimes need explicit consent from those individuals.

    When does GDPR not require cookie consent ?

    Then there are many cookies that generally do NOT require consent (Source : https://wikis.ec.europa.eu/display/WEBGUIDE/04.+Cookies). 

    These are :

    • user input cookies, for the duration of a session
    • authentication cookies, for the duration of a session
    • user-centric security cookies, used to detect authentication abuses and linked to the functionality explicitly requested by the user, for a limited persistent duration
    • multimedia content player session cookies, such as flash player cookies, for the duration of a session
    • load balancing session cookies and other technical cookies, for the duration of session
    • user interface customisation cookies, for a browser session or a few hours, when additional information in a prominent location is provided (e.g. “uses cookies” written next to the customisation feature)

    Tracking cookies and consent vs legitimate interest

    cookie consent and GDPR legitimate interests

    User consent is not always required :

    We understand that whenever you collect and process personal data, you need – almost always – to ask for their consent. However, there are instances where you have to process data under “legitimate interests”. The GDPR states that processing of personal data is lawful “if processing is necessary for the purposes of the legitimate interests”. This means if you have “legitimate interests” you can avoid asking for consent for collecting and processing personal information. Learn more : https://cookieinformation.com/resources/blog/what-is-legitimate-interest-under-the-gdpr 

    A lawful basis for processing personal data (proceeding with caution) :

    We’ve also written about having a lawful basis for processing personal data under GDPR with Matomo. The caveat here is you need to have a strong argument for legitimate interests. If you are processing personal data which may represent a risk to the final user, then getting consent is, for us, still the right lawful basis. If you are not sure, at the time of writing ICO is providing a tool in order to help you make this decision.

    How is Matomo Analytics GDPR compliant ?

    Matomo can be configured to automatically anonymise data so you don’t process any personal data. This allows you to completely avoid GDPR. If you decide to process personal data, Matomo provides you with 12 steps to easily comply with the GDPR guidelines.

    New developments on cookies and the GDPR

    In the early days of the GDPR, a spate of cookie management platforms (CMPs) popped up to help websites and people comply with GDPR rules around cookies.

    These have become problematic in recent years. Europe’s highest court ruled pre-checked box for cookie boxes does not give enough consent

    As well as that, new research suggests most cookie consent pop-ups in the EU fall short of GDPR. A new study called, ‘Dark Patterns after the GDPR’ from MIT, UCL and Aarhus University found that a vast majority of websites aren’t following GDPR rules around cookies. The study found most cookie consent pop-ups in the EU to be undermining the GDPR by finding sneaky ways to convince website visitors to click ‘accept’.

    Disclaimer

    We are not lawyers and don’t claim to be. The information provided here is to help give an introduction to issues you may encounter when dealing cookies. We encourage every business and website to take data privacy seriously and discuss these issues with your lawyer if you have any concerns. 

    Additional resources :