Recherche avancée

Médias (1)

Mot : - Tags -/artwork

Autres articles (59)

  • Publier sur MédiaSpip

    13 juin 2013

    Puis-je poster des contenus à partir d’une tablette Ipad ?
    Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir

  • HTML5 audio and video support

    13 avril 2011, par

    MediaSPIP uses HTML5 video and audio tags to play multimedia files, taking advantage of the latest W3C innovations supported by modern browsers.
    The MediaSPIP player used has been created specifically for MediaSPIP and can be easily adapted to fit in with a specific theme.
    For older browsers the Flowplayer flash fallback is used.
    MediaSPIP allows for media playback on major mobile platforms with the above (...)

  • Support audio et vidéo HTML5

    10 avril 2011

    MediaSPIP utilise les balises HTML5 video et audio pour la lecture de documents multimedia en profitant des dernières innovations du W3C supportées par les navigateurs modernes.
    Pour les navigateurs plus anciens, le lecteur flash Flowplayer est utilisé.
    Le lecteur HTML5 utilisé a été spécifiquement créé pour MediaSPIP : il est complètement modifiable graphiquement pour correspondre à un thème choisi.
    Ces technologies permettent de distribuer vidéo et son à la fois sur des ordinateurs conventionnels (...)

Sur d’autres sites (8962)

  • Assembling frames into a video in Node.js using fluent-ffmpeg [closed]

    14 novembre 2024, par Andrei

    I have the original video and it's modified frames in a folder. Now I want to assemble the modified frames into a new video. I also want to take the audio from the original video and add it to the new video.

    


    My latest code is this using fluent-ffmpeg. But it's not working.

    


    await new Promise((resolve, reject) => {
  ffmpeg(path.join(processedFramesDir, "frame-%d.png"))
    .inputOptions(["-framerate 30", "-start_number 1"])
    .input(videoPath)
    .outputOptions([
      "-c:v",
      "libx264",
      "-c:a",
      "copy",
      "-shortest",
      "-r",
      "30",
      "-pix_fmt",
      "yuv420p",
    ])
    .outputOptions(["-map 0:v:0", "-map 1:a:0"])
    .save(outputVideoPath)
    .on("start", (commandLine) => {
      console.log("FFmpeg command: " + commandLine);
    })
    .on("stderr", (stderrLine) => {
      console.log("FFmpeg stderr: " + stderrLine);
    })
    .on("end", resolve)
    .on("error", (err, stdout, stderr) => {
      console.error("Error assembling video:", err);
      console.error("FFmpeg stderr:", stderr);
      reject(err);
    });
});


    


    I get this error even though the frames exist and they are valid pngs :&#xA;FFmpeg command: ffmpeg -framerate 30 -start_number 1 -i /tmp/video-processing-CyULOE/processedFrames/frame-%05d.png -i /tmp/video-processing-CyULOE/input.mp4 -y -c:v libx264 -c:a copy -shortest -r 30 -pix_fmt yuv420p -map 0:v:0 -map 1:a:0 /tmp/video-processing-CyULOE/output.mp4 2024-11-13 23:40:27 FFmpeg stderr: ffmpeg version 4.1.11-0&#x2B;deb10u1 Copyright (c) 2000-2023 the FFmpeg developers 2024-11-13 23:40:27 FFmpeg stderr:   built with gcc 8 (Debian 8.3.0-6) 2024-11-13 23:40:27 FFmpeg stderr:   configuration: --prefix=/usr --extra-version=0&#x2B;deb10u1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared 2024-11-13 23:40:27 FFmpeg stderr:   libavutil      56. 22.100 / 56. 22.100 2024-11-13 23:40:27 FFmpeg stderr:   libavcodec     58. 35.100 / 58. 35.100 2024-11-13 23:40:27 FFmpeg stderr:   libavformat    58. 20.100 / 58. 20.100 2024-11-13 23:40:27 FFmpeg stderr:   libavdevice    58.  5.100 / 58.  5.100 2024-11-13 23:40:27 FFmpeg stderr:   libavfilter     7. 40.101 /  7. 40.101 2024-11-13 23:40:27 FFmpeg stderr:   libavresample   4.  0.  0 /  4.  0.  0 2024-11-13 23:40:27 FFmpeg stderr:   libswscale      5.  3.100 /  5.  3.100 2024-11-13 23:40:27 FFmpeg stderr:   libswresample   3.  3.100 /  3.  3.100 2024-11-13 23:40:27 FFmpeg stderr:   libpostproc    55.  3.100 / 55.  3.100 2024-11-13 23:40:27 FFmpeg stderr: [png @ 0x5630fb89a880] Invalid PNG signature 0x52494646F8A20000. 2024-11-13 23:40:27 FFmpeg stderr: [png @ 0x5630fb89a880] Invalid PNG signature 0x52494646C89F0000. 2024-11-13 23:40:27 FFmpeg stderr: [png @ 0x5630fb89a880] Invalid PNG signature 0x524946464EA10000. 2024-11-13 23:40:27 FFmpeg stderr: [png @ 0x5630fb89a880] Invalid PNG signature 0x5249464628A40000. 2024-11-13 23:40:27 FFmpeg stderr: [png @ 0x5630fb89a880] Invalid PNG signature 0x52494646AAA30000. 2024-11-13 23:40:27 FFmpeg stderr: [png @ 0x5630fb89a880] Invalid PNG signature 0x524946467CA10000. 2024-11-13 23:40:27 FFmpeg stderr: [png @ 0x5630fb89a880] Invalid PNG signature 0x52494646AAA30000. 2024-11-13 23:40:27 FFmpeg stderr: [png @ 0x5630fb89a880] Invalid PNG signature 0x52494646BAA10000. 2024-11-13 23:40:27 FFmpeg stderr: [png @ 0x5630fb89a880] Invalid PNG signature 0x52494646ACA30000. 2024-11-13 23:40:27 FFmpeg stderr: [png @ 0x5630fb89a880] Invalid PNG signature 0x5249464670A80000. 2024-11-13 23:40:27 FFmpeg stderr: [png @ 0x5630fb89a880] Invalid PNG signature 0x52494646E8A60000. 2024-11-13 23:40:27 FFmpeg stderr: [png @ 0x5630fb89a880] Invalid PNG signature 0x524946469AA60000. 2024-11-13 23:40:27 FFmpeg stderr: [png @ 0x5630fb89a880] Invalid PNG signature 0x5249464672A90000. 2024-11-13 23:40:27 FFmpeg stderr: [png @ 0x5630fb89a880] Invalid PNG signature 0x52494646B8A50000. 2024-11-13 23:40:27 FFmpeg stderr: [png @ 0x5630fb89a880] Invalid PNG signature 0x52494646AAA80000. 2024-11-13 23:40:27 FFmpeg stderr: [png @ 0x5630fb89a880] Invalid PNG signature 0x52494646A0A70000. 2024-11-13 23:40:27 FFmpeg stderr:     Last message repeated 1 times 2024-11-13 23:40:27 FFmpeg stderr: [png @ 0x5630fb89a880] Invalid PNG signature 0x5249464646A80000. 2024-11-13 23:40:27 FFmpeg stderr: [image2 @ 0x5630fb898a40] decoding for stream 0 failed 2024-11-13 23:40:27 FFmpeg stderr: [image2 @ 0x5630fb898a40] Could not find codec parameters for stream 0 (Video: png, none(pc)): unspecified size 2024-11-13 23:40:27 FFmpeg stderr: Consider increasing the value for the &#x27;analyzeduration&#x27; and &#x27;probesize&#x27; options 2024-11-13 23:40:27 FFmpeg stderr: Input #0, image2, from &#x27;/tmp/video-processing-CyULOE/processedFrames/frame-%05d.png&#x27;: 2024-11-13 23:40:27 FFmpeg stderr:   Duration: 00:00:00.60, start: 0.000000, bitrate: N/A 2024-11-13 23:40:27 FFmpeg stderr:     Stream #0:0: Video: png, none(pc), 30 fps, 30 tbr, 30 tbn, 30 tbc 2024-11-13 23:40:28 FFmpeg stderr: Input #1, mov,mp4,m4a,3gp,3g2,mj2, from &#x27;/tmp/video-processing-CyULOE/input.mp4&#x27;: 2024-11-13 23:40:28 FFmpeg stderr:   Metadata: 2024-11-13 23:40:28 FFmpeg stderr:     major_brand     : isom 2024-11-13 23:40:28 FFmpeg stderr:     minor_version   : 512 2024-11-13 23:40:28 FFmpeg stderr:     compatible_brands: isomiso2avc1mp41 2024-11-13 23:40:28 FFmpeg stderr:     encoder         : Lavf60.16.100 2024-11-13 23:40:28 FFmpeg stderr:   Duration: 00:00:00.62, start: 0.000000, bitrate: 4289 kb/s 2024-11-13 23:40:28 FFmpeg stderr:     Stream #1:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 4395 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default) 2024-11-13 23:40:28 FFmpeg stderr:     Metadata: 2024-11-13 23:40:28 FFmpeg stderr:       handler_name    : VideoHandler 2024-11-13 23:40:28 FFmpeg stderr:     Stream #1:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 2 kb/s (default) 2024-11-13 23:40:28 FFmpeg stderr:     Metadata: 2024-11-13 23:40:28 FFmpeg stderr:       handler_name    : SoundHandler 2024-11-13 23:40:28 FFmpeg stderr: Stream mapping: 2024-11-13 23:40:28 FFmpeg stderr:   Stream #0:0 -> #0:0 (png (native) -> h264 (libx264)) 2024-11-13 23:40:28 FFmpeg stderr:   Stream #1:1 -> #0:1 (copy) 2024-11-13 23:40:28 FFmpeg stderr: Press [q] to stop, [?] for help 2024-11-13 23:40:28 FFmpeg stderr: [image2 @ 0x5630fb898a40] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8) 2024-11-13 23:40:28 FFmpeg stderr: [png @ 0x5630fb9b7700] Invalid PNG signature 0x52494646F8A20000. 2024-11-13 23:40:28 FFmpeg stderr: [png @ 0x5630fb988dc0] Invalid PNG signature 0x52494646C89F0000. 2024-11-13 23:40:28 FFmpeg stderr: [png @ 0x5630fba3edc0] Invalid PNG signature 0x524946464EA10000. 2024-11-13 23:40:28 FFmpeg stderr: [png @ 0x5630fba40600] Invalid PNG signature 0x5249464628A40000. 2024-11-13 23:40:28 FFmpeg stderr: Error while decoding stream #0:0: Invalid data found when processing input 2024-11-13 23:40:28 FFmpeg stderr: [png @ 0x5630fb8c7900] Invalid PNG signature 0x52494646AAA30000. 2024-11-13 23:40:28 FFmpeg stderr: Error while decoding stream #0:0: Invalid data found when processing input 2024-11-13 23:40:28 FFmpeg stderr: [png @ 0x5630fb9b7700] Invalid PNG signature 0x524946467CA10000. 2024-11-13 23:40:28 FFmpeg stderr: Error while decoding stream #0:0: Invalid data found when processing input 2024-11-13 23:40:28 FFmpeg stderr: [png @ 0x5630fb988dc0] Invalid PNG signature 0x52494646AAA30000. 2024-11-13 23:40:28 FFmpeg stderr: Error while decoding stream #0:0: Invalid data found when processing input 2024-11-13 23:40:28 FFmpeg stderr: [png @ 0x5630fba3edc0] Invalid PNG signature 0x52494646BAA10000. 2024-11-13 23:40:28 FFmpeg stderr: [png @ 0x5630fba40600] Invalid PNG signature 0x52494646ACA30000. 2024-11-13 23:40:28 FFmpeg stderr: Error while decoding stream #0:0: Invalid data found when processing input 2024-11-13 23:40:28 FFmpeg stderr:     Last message repeated 1 times 2024-11-13 23:40:28 FFmpeg stderr: [png @ 0x5630fb8c7900] Invalid PNG signature 0x5249464670A80000. 2024-11-13 23:40:28 FFmpeg stderr: Error while decoding stream #0:0: Invalid data found when processing input 2024-11-13 23:40:28 FFmpeg stderr: [png @ 0x5630fb9b7700] Invalid PNG signature 0x52494646E8A60000. 2024-11-13 23:40:28 FFmpeg stderr: Error while decoding stream #0:0: Invalid data found when processing input 2024-11-13 23:40:28 FFmpeg stderr: [png @ 0x5630fb988dc0] Invalid PNG signature 0x524946469AA60000. 2024-11-13 23:40:28 FFmpeg stderr: Error while decoding stream #0:0: Invalid data found when processing input 2024-11-13 23:40:28 FFmpeg stderr: [png @ 0x5630fba3edc0] Invalid PNG signature 0x5249464672A90000. 2024-11-13 23:40:28 FFmpeg stderr: Error while decoding stream #0:0: Invalid data found when processing input 2024-11-13 23:40:28 FFmpeg stderr: [png @ 0x5630fba40600] Invalid PNG signature 0x52494646B8A50000. 2024-11-13 23:40:28 FFmpeg stderr: Error while decoding stream #0:0: Invalid data found when processing input 2024-11-13 23:40:28 FFmpeg stderr: [png @ 0x5630fb8c7900] Invalid PNG signature 0x52494646AAA80000. 2024-11-13 23:40:28 FFmpeg stderr: Error while decoding stream #0:0: Invalid data found when processing input 2024-11-13 23:40:28 FFmpeg stderr: [png @ 0x5630fb9b7700] Invalid PNG signature 0x52494646A0A70000. 2024-11-13 23:40:28 FFmpeg stderr: [png @ 0x5630fb988dc0] Invalid PNG signature 0x52494646A0A70000. 2024-11-13 23:40:28 FFmpeg stderr: Error while decoding stream #0:0: Invalid data found when processing input 2024-11-13 23:40:28 FFmpeg stderr: [png @ 0x5630fba3edc0] Invalid PNG signature 0x5249464646A80000. 2024-11-13 23:40:28 FFmpeg stderr: Error while decoding stream #0:0: Invalid data found when processing input 2024-11-13 23:40:28 FFmpeg stderr:     Last message repeated 4 times 2024-11-13 23:40:28 FFmpeg stderr: Cannot determine format of input stream 0:0 after EOF 2024-11-13 23:40:28 FFmpeg stderr: Error marking filters as finished 2024-11-13 23:40:28 FFmpeg stderr: Conversion failed! 2024-11-13 23:40:28 FFmpeg stderr:  2024-11-13 23:40:28 Error assembling video: Error: ffmpeg exited with code 1: Cannot determine format of input stream 0:0 after EOF 2024-11-13 23:40:28 Error marking filters as finished 2024-11-13 23:40:28 Conversion failed! 2024-11-13 23:40:28  2024-11-13 23:40:28     at ChildProcess.<anonymous> (/usr/src/app/node_modules/fluent-ffmpeg/lib/processor.js:180:22) 2024-11-13 23:40:28     at ChildProcess.emit (node:events:519:28) 2024-11-13 23:40:28     at ChildProcess._handle.onexit (node:internal/child_process:294:12)</anonymous>

    &#xA;

    The code used to

    &#xA;

    ffmpeg(videoPath) .screenshots({ folder: framesDir, filename: "frame-%i.png", size: "?x1080", count: 10, }) .on("end", resolve) .on("error", reject);&#xA;

    &#xA;

    The pngs are valid and displaying in windows photos viewer enter image description here

    &#xA;

  • Lean Analytics in a Privacy-First Environment – Bootcamp with Timo Dechau

    In a recent bootcamp, Timo Dechau walked attendees through his approach to data and measurement in privacy-focused analytics environments. He demonstrates how to shift from a chaotic, ‘track-it-all’ mentality to a focused method that prioritizes quality over quantity. This post will summarize some of his key privacy-first analytics ideas, but be sure to check out the on-demand video for more detail.

    Watch the bootcamp on demand

    &lt;script type=&quot;text/javascript&quot;&gt;var gform;gform||(document.addEventListener(&quot;gform_main_scripts_loaded&quot;,function(){gform.scriptsLoaded=!0}),window.addEventListener(&quot;DOMContentLoaded&quot;,function(){gform.domLoaded=!0}),gform={domLoaded:!1,scriptsLoaded:!1,initializeOnLoaded:function(o){gform.domLoaded&amp;&amp;gform.scriptsLoaded?o():!gform.domLoaded&amp;&amp;gform.scriptsLoaded?window.addEventListener(&quot;DOMContentLoaded&quot;,o):document.addEventListener(&quot;gform_main_scripts_loaded&quot;,o)},hooks:{action:{},filter:{}},addAction:function(o,n,r,t){gform.addHook(&quot;action&quot;,o,n,r,t)},addFilter:function(o,n,r,t){gform.addHook(&quot;filter&quot;,o,n,r,t)},doAction:function(o){gform.doHook(&quot;action&quot;,o,arguments)},applyFilters:function(o){return gform.doHook(&quot;filter&quot;,o,arguments)},removeAction:function(o,n){gform.removeHook(&quot;action&quot;,o,n)},removeFilter:function(o,n,r){gform.removeHook(&quot;filter&quot;,o,n,r)},addHook:function(o,n,r,t,i){null==gform.hooks[o][n]&amp;&amp;(gform.hooks[o][n]=[]);var e=gform.hooks[o][n];null==i&amp;&amp;(i=n+&quot;_&quot;+e.length),gform.hooks[o][n].push({tag:i,callable:r,priority:t=null==t?10:t})},doHook:function(n,o,r){var t;if(r=Array.prototype.slice.call(r,1),null!=gform.hooks[n][o]&amp;&amp;((o=gform.hooks[n][o]).sort(function(o,n){return o.priority-n.priority}),o.forEach(function(o){&quot;function&quot;!=typeof(t=o.callable)&amp;&amp;(t=window[t]),&quot;action&quot;==n?t.apply(null,r):r[0]=t.apply(null,r)})),&quot;filter&quot;==n)return r[0]},removeHook:function(o,n,t,i){var r;null!=gform.hooks[o][n]&amp;&amp;(r=(r=gform.hooks[o][n]).filter(function(o,n,r){return!!(null!=i&amp;&amp;i!=o.tag||null!=t&amp;&amp;t!=o.priority)}),gform.hooks[o][n]=r)}});&lt;/script&gt;
    &lt;script&gt;<br />
    gform.initializeOnLoaded( function() {gformInitSpinner( 72, 'https://matomo.org/wp-content/plugins/gravityforms/images/spinner.svg', true );jQuery('#gform_ajax_frame_72').on('load',function(){var contents = jQuery(this).contents().find('*').html();var is_postback = contents.indexOf('GF_AJAX_POSTBACK') &gt;= 0;if(!is_postback){return;}var form_content = jQuery(this).contents().find('#gform_wrapper_72');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_72').length &gt; 0;var is_redirect = contents.indexOf('gformRedirect(){') &gt;= 0;var is_form = form_content.length &gt; 0 &amp;&amp; ! is_redirect &amp;&amp; ! is_confirmation;var mt = parseInt(jQuery('html').css('margin-top'), 10) + parseInt(jQuery('body').css('margin-top'), 10) + 100;if(is_form){jQuery('#gform_wrapper_72').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_72').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_72').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */  }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_72').val();gformInitSpinner( 72, 'https://matomo.org/wp-content/plugins/gravityforms/images/spinner.svg', true );jQuery(document).trigger('gform_page_loaded', [72, current_page]);window['gf_submitting_72'] = false;}else if(!is_redirect){var confirmation_content = jQuery(this).contents().find('.GF_AJAX_POSTBACK').html();if(!confirmation_content){confirmation_content = contents;}setTimeout(function(){jQuery('#gform_wrapper_72').replaceWith(confirmation_content);jQuery(document).trigger('gform_confirmation_loaded', [72]);window['gf_submitting_72'] = false;wp.a11y.speak(jQuery('#gform_confirmation_message_72').text());}, 50);}else{jQuery('#gform_72').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger(&quot;gform_pre_post_render&quot;, [{ formId: &quot;72&quot;, currentPage: &quot;current_page&quot;, abort: function() { this.preventDefault(); } }]);                if (event.defaultPrevented) {                return;         }        const gformWrapperDiv = document.getElementById( &quot;gform_wrapper_72&quot; );        if ( gformWrapperDiv ) {            const visibilitySpan = document.createElement( &quot;span&quot; );            visibilitySpan.id = &quot;gform_visibility_test_72&quot;;            gformWrapperDiv.insertAdjacentElement( &quot;afterend&quot;, visibilitySpan );        }        const visibilityTestDiv = document.getElementById( &quot;gform_visibility_test_72&quot; );        let postRenderFired = false;                function triggerPostRender() {            if ( postRenderFired ) {                return;            }            postRenderFired = true;            jQuery( document ).trigger( 'gform_post_render', [72, current_page] );            gform.utils.trigger( { event: 'gform/postRender', native: false, data: { formId: 72, currentPage: current_page } } );            if ( visibilityTestDiv ) {                visibilityTestDiv.parentNode.removeChild( visibilityTestDiv );            }        }        function debounce( func, wait, immediate ) {            var timeout;            return function() {                var context = this, args = arguments;                var later = function() {                    timeout = null;                    if ( !immediate ) func.apply( context, args );                };                var callNow = immediate &amp;&amp; !timeout;                clearTimeout( timeout );                timeout = setTimeout( later, wait );                if ( callNow ) func.apply( context, args );            };        }        const debouncedTriggerPostRender = debounce( function() {            triggerPostRender();        }, 200 );        if ( visibilityTestDiv &amp;&amp; visibilityTestDiv.offsetParent === null ) {            const observer = new MutationObserver( ( mutations ) =&gt; {                mutations.forEach( ( mutation ) =&gt; {                    if ( mutation.type === 'attributes' &amp;&amp; visibilityTestDiv.offsetParent !== null ) {                        debouncedTriggerPostRender();                        observer.disconnect();                    }                });            });            observer.observe( document.body, {                attributes: true,                childList: false,                subtree: true,                attributeFilter: [ 'style', 'class' ],            });        } else {            triggerPostRender();        }    } );} );<br />
    &lt;/script&gt;
    the consequences of more data are missing and incomplete data that messes up attribution and measurement.

    Unrestrained data collection leads to data bloat

    Marketing and the business world are experiencing a data problem. Analysts and business intelligence teams grapple with large amounts of data that aren’t always useful and are often incomplete. The idea that “more data is better” became a guiding principle in the early 2000s, encouraging companies to gather everything possible using all available data collection methods. This unrestrained pursuit often led to an unexpected problem : data bloat. Too much data, too little clarity. Digital marketers, analysts, and business leaders now try to navigate vast amounts of information that create more confusion than insight, especially when the data is incomplete due to privacy regulations.

    Cutting through the noise, focusing on what matters

    The “more data is better” mindset emerged when digital marketers were beginning to understand data’s potential. It seemed logical : more data should mean more opportunities to optimise, personalise, and drive results. But in practice, gathering every possible piece of data often leads to a cluttered, confusing pile of metrics that can mislead more than guide.

    This approach carries hidden costs. Excessive data collection burns resources, increases privacy concerns, and leaves teams unfocused. It’s easy to get lost trying to make sense of endless dashboards, metrics, and reports. More data doesn’t necessarily lead to better decisions ; it often just leads to more noise, hindering effective data management.

    Rethinking data management : From data overload to data mindfulness

    Data management has often prioritised comprehensive data gathering without considering the specific value of each data point. This approach has created more information, but not necessarily better insights.

    Data mindfulness is about taking a deliberate, focused approach to data collection and analysis. Instead of trying to collect everything, it emphasises gathering only what truly adds value. It’s about ensuring the data you collect serves a purpose and directly contributes to better insights and data-driven decision-making.

    Think of it like applying a “lean” methodology to data—trimming away the unnecessary and keeping only what is essential. Or consider embracing data minimalism to declutter your data warehouse, keeping only what truly sparks insight.

    Mindful data is ethical data

    Adopting a mindful approach to data can pay off in several ways :

    • Reduces overwhelm : When you reduce the clutter, you’re left with fewer, clearer metrics that lead to stronger decisions and actionable data insights.

    • Mitigates compliance risks : By collecting less, companies align better with privacy regulations and build trust with their customers. Privacy-first analytics and privacy-compliant analytics practices mean there’s no need for invasive tracking if it doesn’t add value—and customers will appreciate that.

    • Enhances data ethics : Focusing on the quality rather than the quantity of data collected ensures ethical data collection and management. Companies use data responsibly, respect user privacy, and minimise unnecessary data handling, strengthening customer relationships and brand integrity.

    • Improves data efficiency : Focused analytics means better use of resources. You’re spending less time managing meaningless metrics and more time working on meaningful insights. Many companies have found success by switching to a leaner, quality-first data approach, reporting sharper, more impactful results.

    Shifting towards simplicity and lean analytics

    If data mindfulness sounds appealing, here’s how you can get started :

    1. Ask the right questions. Before collecting any data, ask yourself : Why are we collecting this ? How will it drive value ? If you can’t answer these questions clearly, that data probably isn’t worth collecting. This is a key step in smart data management.

    2. Simplify metrics. Focus on the KPIs that truly matter for your business. Choose a handful of key metrics that reflect your goals rather than a sprawling list of nice-to-haves. Embracing data simplicity helps in targeting data collection effectively.

    3. Audit your current data. Review your existing data collection processes. Which metrics are you actively using to make decisions ? Eliminate any redundant or low-value metrics that create noise. Use ethical data management practices to ensure data efficiency and compliance. Understanding what is data management in this context is crucial.

    4. Implement lean analytics practices. Shift towards lean analytics by cutting down on unnecessary tracking. This can involve reducing reliance on multiple tracking scripts, simplifying your reporting, and setting up a streamlined dashboard focused on key outcomes. Embrace data reduction strategies to eliminate waste and boost effectiveness.

    Who should watch this bootcamp

    This bootcamp is perfect for data analysts, product managers, digital marketers and business leaders who are seeking a more streamlined approach to data measurement. If you’re interested in moving away from a chaotic “track-it-all” mentality and towards a focused, lean, and privacy-first analytics strategy, this workshop is for you.

    What you’ll discover

    • Practical steps : Learn actionable strategies to reduce data bloat and implement lean, privacy-first analytics in your organisation.

    • Real-life examples : Explore case studies of companies that have successfully adopted focused and privacy-first analytics.

    • Deep insights : Gain a deeper understanding of how to prioritise quality over quantity without sacrificing valuable insights.

    Watch the bootcamp on-demand

    For a comprehensive dive into these topics, watch the full workshop video or download the detailed transcript. Equip yourself with the knowledge and tools to transform your data management approach today.

    &lt;script&gt;<br />
    gform.initializeOnLoaded( function() {gformInitSpinner( 72, 'https://matomo.org/wp-content/plugins/gravityforms/images/spinner.svg', true );jQuery('#gform_ajax_frame_72').on('load',function(){var contents = jQuery(this).contents().find('*').html();var is_postback = contents.indexOf('GF_AJAX_POSTBACK') &gt;= 0;if(!is_postback){return;}var form_content = jQuery(this).contents().find('#gform_wrapper_72');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_72').length &gt; 0;var is_redirect = contents.indexOf('gformRedirect(){') &gt;= 0;var is_form = form_content.length &gt; 0 &amp;&amp; ! is_redirect &amp;&amp; ! is_confirmation;var mt = parseInt(jQuery('html').css('margin-top'), 10) + parseInt(jQuery('body').css('margin-top'), 10) + 100;if(is_form){jQuery('#gform_wrapper_72').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_72').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_72').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */  }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_72').val();gformInitSpinner( 72, 'https://matomo.org/wp-content/plugins/gravityforms/images/spinner.svg', true );jQuery(document).trigger('gform_page_loaded', [72, current_page]);window['gf_submitting_72'] = false;}else if(!is_redirect){var confirmation_content = jQuery(this).contents().find('.GF_AJAX_POSTBACK').html();if(!confirmation_content){confirmation_content = contents;}setTimeout(function(){jQuery('#gform_wrapper_72').replaceWith(confirmation_content);jQuery(document).trigger('gform_confirmation_loaded', [72]);window['gf_submitting_72'] = false;wp.a11y.speak(jQuery('#gform_confirmation_message_72').text());}, 50);}else{jQuery('#gform_72').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger(&quot;gform_pre_post_render&quot;, [{ formId: &quot;72&quot;, currentPage: &quot;current_page&quot;, abort: function() { this.preventDefault(); } }]);                if (event.defaultPrevented) {                return;         }        const gformWrapperDiv = document.getElementById( &quot;gform_wrapper_72&quot; );        if ( gformWrapperDiv ) {            const visibilitySpan = document.createElement( &quot;span&quot; );            visibilitySpan.id = &quot;gform_visibility_test_72&quot;;            gformWrapperDiv.insertAdjacentElement( &quot;afterend&quot;, visibilitySpan );        }        const visibilityTestDiv = document.getElementById( &quot;gform_visibility_test_72&quot; );        let postRenderFired = false;                function triggerPostRender() {            if ( postRenderFired ) {                return;            }            postRenderFired = true;            jQuery( document ).trigger( 'gform_post_render', [72, current_page] );            gform.utils.trigger( { event: 'gform/postRender', native: false, data: { formId: 72, currentPage: current_page } } );            if ( visibilityTestDiv ) {                visibilityTestDiv.parentNode.removeChild( visibilityTestDiv );            }        }        function debounce( func, wait, immediate ) {            var timeout;            return function() {                var context = this, args = arguments;                var later = function() {                    timeout = null;                    if ( !immediate ) func.apply( context, args );                };                var callNow = immediate &amp;&amp; !timeout;                clearTimeout( timeout );                timeout = setTimeout( later, wait );                if ( callNow ) func.apply( context, args );            };        }        const debouncedTriggerPostRender = debounce( function() {            triggerPostRender();        }, 200 );        if ( visibilityTestDiv &amp;&amp; visibilityTestDiv.offsetParent === null ) {            const observer = new MutationObserver( ( mutations ) =&gt; {                mutations.forEach( ( mutation ) =&gt; {                    if ( mutation.type === 'attributes' &amp;&amp; visibilityTestDiv.offsetParent !== null ) {                        debouncedTriggerPostRender();                        observer.disconnect();                    }                });            });            observer.observe( document.body, {                attributes: true,                childList: false,                subtree: true,                attributeFilter: [ 'style', 'class' ],            });        } else {            triggerPostRender();        }    } );} );<br />
    &lt;/script&gt;
  • Unwrapping Matomo 5.2.0 – Bringing you enhanced security and performance

    25 décembre 2024, par Daniel Crough — Latest Releases

     As we tie a bow on 2024, we’re delighted to share our final gift of the year. Matomo 5.2.0 comes wrapped with new security features, privacy controls, and performance improvements to enhance your analytics experience.

     Enhanced security and privacy controls

    Image that shows the This Wasn’t Me link in password reset email.

    We’ve strengthened Matomo’s security framework with several key updates :

    • A new installer timestamp mechanism for on-premise installations creates a secure 72-hour installation window, preventing unauthorised access during setup
    • Enhanced account security features including a “This Wasn’t Me” link in password reset emails and location-based login alerts
    • The new Global List of Query URL parameters feature lets you refine tracking by excluding sensitive or unnecessary parameters from collection

    Tag manager improvements for better efficiency

    The Matomo Tag Manager now includes several features to streamline your workflow :

    • New Consent Management Platform (CMP) tags for CookieYes, OneTrust, and Axeptio, simplifying consent tracking implementatio.
    • A new copy feature for containers, tags, and triggers that reduces setup time and ensures consistency across multiple properties
    • Improved management tools for maintaining standardised tracking across websites

    Performance and reliability updates

    We’ve made technical improvements to enhance Matomo’s performance :

    Important to note : This release does not require any major database upgrade, making it easier to implement these improvements.

    Looking forward to 2025

    As we prepare to enter a new year, these updates reflect our ongoing commitment to providing privacy-focused analytics. We’re grateful to all our community contributors who have helped make this release possible. Special thanks to the Matomo community for their contributions to this release.

    Ready to explore these new features ? Update to Matomo 5.2.0 today and start the new year with enhanced security, efficiency, and control over your analytics data.

    From all of us at Matomo, thank you for being part of our journey. Here’s to another year of protecting privacy and empowering insights together !


    For a detailed overview of all changes and improvements, see our complete release notes or join the discussion in our community forums. If you’d like to contribute to making Matomo even better, learn more about getting involved with our open-source project.