Recherche avancée

Médias (2)

Mot : - Tags -/map

Autres articles (38)

  • Websites made ​​with MediaSPIP

    2 mai 2011, par

    This page lists some websites based on MediaSPIP.

  • Creating farms of unique websites

    13 avril 2011, par

    MediaSPIP platforms can be installed as a farm, with a single "core" hosted on a dedicated server and used by multiple websites.
    This allows (among other things) : implementation costs to be shared between several different projects / individuals rapid deployment of multiple unique sites creation of groups of like-minded sites, making it possible to browse media in a more controlled and selective environment than the major "open" (...)

  • Les autorisations surchargées par les plugins

    27 avril 2010, par

    Mediaspip core
    autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs

Sur d’autres sites (7902)

  • Transcoding hevc to h264 using GPU and scale_npp

    19 mai 2022, par JanZg

    I am trying to transcode hevc to h264 using GPU. Default input is 10 bit hevc but I also try it on 8 bit hevc. I use hevc_cuvid decoder and h264_nvenc encoder. While scaling using CPU its correct. I was also using scale_npp=w=1280:h=720:format=yuv420p and scale_cuda - > no result.

    


    Working command without using GPU to scale :

    


    /usr/local/bin/ffmpeg -y -v warning -c:v hevc_cuvid -an -sn -dn -reconnect_at_eof 1 -reconnect_streamed 1 -reconnect_on_network_error 1 -i http://1.2.3.4:8794 -c:v h264_nvenc -pix_fmt yuv420p -vf scale=1280:720 test_hevc.mp4


    


    But when I try to scale using GPU for example scale_cuda or scale_npp I get this error :

    


    Command :

    


    /usr/local/bin/ffmpeg -y -v warning -c:v hevc_cuvid -an -sn -dn -reconnect_at_eof 1 -reconnect_streamed 1 -reconnect_on_network_error 1 -i http://1.2.3.4:8794 -c:v h264_nvenc -pix_fmt yuv420p -vf scale_npp=1280:720 test_hevc.mp4


    


    Outputs :

    


    Error output with trace log level

    


    [graph 0 input from stream 0:0 @ 0x56164efb6b40] w:3840 h:2160 pixfmt:p010le tb:1/90000 fr:50/1 sar:1/1
[format @ 0x56164efb7940] Setting ‘pix_fmts’ to value ‘yuv420p’
[auto_scale_0 @ 0x56164efb9940] w:iw h:ih flags:’’ interl:0
[Parsed_scale_npp_0 @ 0x56164efb58c0] auto-inserting filter ‘auto_scale_0’ between the filter ‘graph 0 input from stream 0:0’ and the filter ‘Parsed_scale_npp_0’
Impossible to convert between the formats supported by the filter ‘graph 0 input from stream 0:0’ and the filter ‘auto_scale_0’
Error reinitializing filters!
Failed to inject frame into filter network: Function not implemented
Error while processing the decoded data for stream #0:0
[AVIOContext @ 0x56164ea41300] Statistics: 0 seeks, 0 writeouts
[AVIOContext @ 0x56164ea39c80] Statistics: 15357720 bytes read, 0 seeks
[AVHWDeviceContext @ 0x56164ea68480] Calling cu->cuCtxDestroy(hwctx->cuda_ctx)
Conversion failed!


    


    Full output with warning log level

    


    [hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[hevc @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 1 times
[hevc @ 0x555bd6e9f0c0] Error parsing NAL unit #2.
[mpegts @ 0x555bd6e85dc0] Could not find codec parameters for stream 0 (Video: hevc (HEVC / 0x43564548), none): unspecified size
Consider increasing the value for the ‘analyzeduration’ (0) and ‘probesize’ (5000000) options
[NULL @ 0x555bd6e9f0c0] PPS id out of range: 0
Last message repeated 66 times
Impossible to convert between the formats supported by the filter ‘graph 0 input from stream 0:0’ and the filter ‘auto_scale_0’
Error reinitializing filters!
Failed to inject frame into filter network: Function not implemented
Error while processing the decoded data for stream #0:0

Additional informations:

My FFmpeg Version below:

ffmpeg version N-103630-g06de593303 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 8 (Debian 8.3.0-6)
configuration: --prefix=/usr/local --enable-libtwolame --enable-libzvbi --enable-nonfree --enable-cuda-nvcc --nvccflags=’-gencode arch=compute_75,code=sm_75 -O2’ --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64
libavutil 57. 5.100 / 57. 5.100
libavcodec 59. 7.103 / 59. 7.103
libavformat 59. 5.100 / 59. 5.100
libavdevice 59. 0.101 / 59. 0.101
libavfilter 8. 9.100 / 8. 9.100
libswscale 6. 1.100 / 6. 1.100
libswresample 4. 0.100 / 4. 0.100


    


    GPU : Tesla T4

    


    System : Linux tgpu 4.19.0-17-amd64 #1 SMP Debian 4.19.194-3 (2021-07-18) x86_64 GNU/Linux

    


    Nvcc version : nvcc : NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2020 NVIDIA Corporation
Built on Mon_Oct_12_20:09:46_PDT_2020
Cuda compilation tools, release 11.1, V11.1.105
Build cuda_11.1.TC455_06.29190527_0

    


    Is it possible to scale hevc using GPU and how to fix this ?
Thank You in advance.

    


  • 9 Ways to Customise Your Matomo Like a Pro

    5 octobre 2022, par Erin

    Matomo is a feature-rich web analytics platform. As such, it has many layers of depth — core features, extra plug-ins, custom dimensions, reports, extensions and integrations. 

    Most of the product elements you see can be personalised and customised to your needs with minimal restrictions. However, this breadth of choice can be overlooked by new users. 

    In this post, we explain how to get the most out of Matomo with custom reports, dashboards, dimensions and even app design. 

    How to customise your Matomo web analytics

    To make major changes to Matomo (e.g., create custom dashboards or install new plugins), you’ll have to be a Matomo Super User (a.k.a. The Admin). Super Users can also grant administrator permissions to others so that more people could customise your Matomo deployment. 

    Most feature-related customisations (e.g. configuring a custom report, adding custom goal tracking, etc.) can be done by all users. 

    With the above in mind, here’s how you can tweak Matomo to better serve your website analytics needs : 

    1. Custom dashboards

    Matomo Customisable Dashboard and Widgets

    Dashboards provide a panorama view of all the collected website statistics. We display different categories of stats and KPIs as separate widgets — a standalone module you can also customise. 

    On your dashboard, you can change the type, position and number of widgets on display. This is an easy way to create separate dashboard views for different projects, clients or team members. Rather than a one-size-fits-all dashboard, a custom dashboard designed for a specific role or business unit will increase data-driven decision-making and efficiency across the business.

    You can create a new dashboard view in a few clicks. Then select a preferred layout — a split-page view or multi columns. Next, populate the new dashboard area with preferred widgets showing :

    Or code a custom widget area to pull specific website stats or other reporting data you need. Once you are done, arrange everything with our drag-and-drop functionality. 

    Matomo Widgets

    Popular feature use cases

    • Personalised website statistics layout for convenient viewing 
    • Simplified analytics dashboards for the line of business leaders/stakeholders 
    • Project- or client-specific dashboards for easy report sharing 

    Read more about customising Matomo dashboards and widget areas

    2. Custom reports

    Matomo Custom Reports

    As the name implies, Custom Reports widget allows you to mesh any of the dimensions and metrics collected by Matomo into a custom website traffic analysis. Custom reports save users time by providing specific data needed in one view so there is no need to jump back and forth between multiple reports or toggle through a report to find data.

    For each custom report, you can select up to three dimensions and then apply additional quantitative measurements (metrics) to drill down into the data.

    For example, if you want to closely observe mobile conversion rates in one market, you can create the following custom report :

    • Dimensions : User Type (registered), Device type (mobile), Location (France)
    • Metrics : Visits, Conversion Rate, Revenue, Avg. Generation Time.

    Custom Report widget is available within Matomo Cloud and as a plugin for Matomo On-Premise.

    &lt;script type=&quot;text/javascript&quot;&gt;<br />
           if ('function' === typeof window.playMatomoVideo){<br />
           window.playMatomoVideo(&quot;custom_reports&quot;, &quot;#custom_reports&quot;)<br />
           } else {<br />
           document.addEventListener(&quot;DOMContentLoaded&quot;, function() { window.playMatomoVideo(&quot;custom_reports&quot;, &quot;#custom_reports&quot;); });<br />
           }<br />
      &lt;/script&gt;

    Popular feature use cases

    • Campaign-specific reporting to better understand the impact of different promo strategies 
    • Advanced event tracking for conversion optimization 
    • Market segmentation reports to analyse different audience cohorts 

    Read more about creating and analysing Custom Reports.

    3. Custom widgets

    Matomo Customisable Widgets

    We realise that our users have different degrees of analytics knowledge. Some love in-depth reporting dimensions and multi-row reporting tables. Others just want to see essential stats. 

    To delight both the pros and the novice users, we’ve created widgets — reporting sub-modules you can add, delete or rearrange in a few clicks. Essentially, a widget is a slice of a dashboard area you can populate with extra information. 

    You can add pre-made custom widgets to Matomo or develop your own widget to display custom reports or even external data (e.g., offline sales volume). At the same time, you can also embed Matomo widgets into other applications (e.g., a website CMS or corporate portal).

    Popular feature use cases

    • Display main goals (e.g., new trial sign-ups) on the main dashboard for greater visibility 
    • Highlight cost-per-conversion reporting by combining goals and conversion data to keep your budgets in check 
    • Run omnichannel eCommerce analytics (with embedded offline sales data) to get a 360-degree view into your operations 

    Read more about creating widgets in Matomo (beginner’s guide)

    4. Custom dimensions 

    Matomo Custom Dimensions

    Dimensions describe the characteristics of reported data. Think of them as “filters” — a means to organise website analytics data by a certain parameter such as “Browser”, “Country”, “Device Type”, “User Type” and many more. 

    Custom Dimensions come in handy for all sorts of segmentation reports. For example, comparing conversion rates between registered and guest users. Or tracking revenue by device type and location. 

    For convenience, we’ve grouped Custom Dimensions in two categories :

    Visit dimensions. These associate metadata about a user with Visitor profiles — a summary of different knowledge you have about your audience. Reports for Visit scoped custom dimensions are available in the Visitors section of your dashboard. 

    Action dimensions. These segment users by specific actions tracked by Matomo such as pageviews, events completion, downloads, form clicks, etc. When configuring Custom Dimensions, you can select among pre-defined action types or code extra action dimensions. Action scoped custom dimensions are available in the Behaviours section of Matomo. 

    Depending on your Matomo version, you can apply 5 – 15 custom dimensions to reports. 

    Important : Since you can’t delete dimensions (only deactivate them), think about your use case first. Custom Dimensions each have their own dedicated reports page on your Matomo dashboard. 

    Popular custom dimension use cases among users :

    • Segmenting reports by users’ screen resolution size to understand how your website performs on different devices
    • Monitor conversion rates for different page types to determine your best-performing assets 

    Read more about creating, tracking and managing Custom Dimensions

    5. Custom scheduled reports

    Manually sending reports can be time consuming, especially if you have multiple clients or provide reports to numerous stakeholders. Custom scheduled reports remove this manual process to improve efficiency and ensure timely distribution of data to relevant users.

    Any report in Matomo (default or custom) can be shared with others by email as a PDF file, HTML content or as an attached CSV document. 

    You can customise which data you want to send to different people — your colleagues, upper management, clients or other company divisions. Then set up the frequency of email dispatches and Matomo will do the rest. 

    Auto-scheduling an email report is easy. Name your report, select a Segment (aka custom or standard report), pick time, file format and sender. 

    Matomo Schedule Reports

    You can also share links to Matomo reports as text messages, if you are using ASPSMS or Clockwork SMS

    Popular feature use cases

    • Convenient stakeholder reporting on key website KPIs 
    • Automated client updates to keep clients informed and reduce workload 
    • Easy data downloads for doing custom analysis with business intelligence tools 

    Read more about email reporting features in Matomo

    6. Custom alerts

    Matomo Custom Alerts

    Custom Alerts is a Matomo plugin for keeping you updated on the most important analytics events. Unlike Custom Reports, which provide a complete or segmented analytics snapshot, alerts are better suited for tracking individual events. For example, significant traffic increases from a specific channel, new 404 pages or major goal achievement (e.g., hitting 1,000 sales in a week). 

    Custom Alerts are a convenient way to keep your finger on the pulse of your site so you can quickly remedy an issue or get updated on reaching a crucial KPI promptly. You can receive custom alerts via email or text message in a matter of minutes.

    To avoid flooding your inbox with alerts, we recommend reserving Custom Alerts for a select few use cases (3 to 5) and schedule custom Email Reports to receive general web page analytics. 

    Popular custom alerts use cases among users :

    • Monitor sudden drops in revenue to investigate the cause behind them and solve any issues promptly 
    • Get notified of traffic spikes or sudden dips to better manage your website’s technical performance 

    Read more about creating and managing Custom Alerts

    7. Goals

    Matomo Customisable Goal Funnels

    Goals feature helps you better understand how your website performs on certain business objectives such as lead generation, online sales or content discovery. A goal is a quantifiable action you want to measure (e.g., a specific page visit, form submission or a file download). 

    When combined together, Goals make up your sales funnel — a series of specific actions you expect users to complete in order to convert. 

    Goals-setting and Funnel Analytics are a powerful, customisable combo for understanding how people navigate your website ; what makes them take action or, on the contrary, lose interest and bounce off. 

    On Matomo, you can simultaneously track multiple goals, monitor multiple conversions per one visit (e.g., when one user requests two content downloads) and assign revenue targets to specific goals.

    &lt;script type=&quot;text/javascript&quot;&gt;<br />
           if ('function' === typeof window.playMatomoVideo){<br />
           window.playMatomoVideo(&quot;goals&quot;, &quot;#goals&quot;)<br />
           } else {<br />
           document.addEventListener(&quot;DOMContentLoaded&quot;, function() { window.playMatomoVideo(&quot;goals&quot;, &quot;#goals&quot;); });<br />
           }<br />
      &lt;/script&gt;

    Separately, Matomo Cloud users also get access to a premium Funnels feature and Multi Channel Conversion Attribution. On-Premises Matomo users can get both as paid plugins via our Marketplace.

    Popular goal tracking use cases among users :

    • Tracking newsletter subscription to maximise subscriber growth 
    • Conversion tracking for gated content (e.g., eBooks) to understand how each asset performs 
    • Analysing the volume of job applications per post to better interpret your HR marketing performance 

    Read more about creating and managing Goals in Matomo.

    8. Themes

    Matomo On-Premise Customisable Themes

    Want to give your Matomo app a distinctive visual flair ? Pick a new free theme for your On-Premises installation. Minimalistic, dark or classic — our community created six different looks that other Matomo users can download and install in a few clicks. 

    If you have some HTML/CSS/JS knowledge, you can also design your own Matomo theme. Since Matomo is an open-source project, we don’t restrict interface customisation and always welcome creativity from our users.

    Read more about designing your own Matomo theme (developer documentation).

    9. White labelling

    Matomo white label options

    Matomo is one of the few website analytics tools to support white labelling. White labelling means that you can distribute our product to others under your brand. 

    For example, as a web design agency, you can delight customers with pre-installed GDPR-friendly website analytics. Marketing services providers, in turn, can present their clients with embedded reporting widgets, robust funnel analytics and 100% unsampled data. 

    Apart from selecting a custom theme, you can also align Matomo with your brand by :

    • Customising product name
    • Using custom header/font colours 
    • Change your tracking endpoint
    • Remove links to Matomo.org

    To streamline Matomo customisation and set-up, we developed a White Label plug-in. It provides a convenient set of controls for changing your Matomo deployment and distributing access rights to other users or sharing embedded Matomo widgets). 

    Read more about white labelling Matomo

    Learning more about Matomo 

    Matomo has an ever-growing list of features, ranging from standard website tracking controls to unique conversion rate optimisation tools (heatmaps, media analytics, user cohorts and more).

    To learn more about Matomo features you can check our free video web analytics training series where we cover the basics. For feature-specific tips, tricks and configurations, browse our video content or written guides

  • Using FFmpeg to stitch together H.264 videos and variably-spaced JPEG pictures ; dealing with ffmpeg warnings

    19 octobre 2022, par LB2

    Context

    &#xA;

    I have a process flow that may output either H.264 Annex B streams, variably-spaced JPEGs, or a mixture of two. By variably-spaced I mean where elapsed time between any two adjacent JPEGs may (and likely to be) different from any other two adjacent JPEGs. So an example of possible inputs are :

    &#xA;

      &#xA;
    1. stream1.h264
    2. &#xA;

    3. {Set of JPEGs}
    4. &#xA;

    5. stream1.h264 &#x2B; stream2.h264
    6. &#xA;

    7. stream1.h264 &#x2B; {Set of JPEGs}
    8. &#xA;

    9. stream1.h264 &#x2B; {Set of JPEGs} &#x2B; stream2.h264
    10. &#xA;

    11. stream1.h264 &#x2B; {Set of JPEGs} &#x2B; stream2.h264 &#x2B; {Set of JPEGs} &#x2B; ...
    12. &#xA;

    13. stream1.h264 &#x2B; stream2.h264 &#x2B; {Set of JPEGs} &#x2B; ...
    14. &#xA;

    &#xA;

    The output needs to be a single stitched (i.e. concatenated) output in MPEG-4 container.

    &#xA;

    Requirements : No re-encoding or transcoding of existing video compression (One time conversion of JPEG sets to video format is OKay).

    &#xA;

    Solution Prototype

    &#xA;

    To prototype the solution I have found that ffmpeg has concat demuxer that would let me specify an ordered sequence of inputs that ffmpeg would then concatenate together, but all inputs must be of the same format. So, to meet that requirement, I :

    &#xA;

      &#xA;
    1. Convert every JPEG set to an .mp4 using concat (and using delay # directive to specify time-spacing between each JPEG)
    2. &#xA;

    3. Convert every .h264 to .mp4 using -c copy to avoid transcoding.
    4. &#xA;

    5. Stitch all generated interim .mp4 files into the single final .mp4 using -f concat and -c copy.
    6. &#xA;

    &#xA;

    Here's the bash script, in parts, that performs the above :

    &#xA;

      &#xA;
    1. Ignore the curl comment ; that's from originally generating a 100 jpeg images with numbers and these are simply saved locally. What the loop does is it generates concat input file with file sequence#.jpeg directives and duration # directive where each successive JPEG delay is incremented by 0.1 seconds (0.1 between first and second, 0.2 b/w 2nd and 3rd, 0.3 b/w 3rd and 4th, and so on). Then it runs ffmpeg command to convert the set of JPEGs to .mp4 interim file.

      &#xA;

      echo "ffconcat version 1.0" >ffconcat-jpeg.txt&#xA;echo >>ffconcat-jpeg.txt&#xA;&#xA;for i in {1..100}&#xA;do&#xA;    echo "file $i.jpeg" >>ffconcat-jpeg.txt&#xA;    d=$(echo "$i" | awk &#x27;{printf "%f", $1 / 10}&#x27;)&#xA;    # d=$(echo "scale=2; $i/10" | bc)&#xA;    echo "duration $d" >>ffconcat-jpeg.txt&#xA;    echo "" >>ffconcat-jpeg.txt&#xA;    # curl -o "$i.jpeg" "https://math.tools/equation/get_equaimages?equation=$i&amp;fontsize=256"&#xA;done&#xA;&#xA;ffmpeg \&#xA;    -hide_banner \&#xA;    -vsync vfr \&#xA;    -f concat \&#xA;    -i ffconcat-jpeg.txt \&#xA;    -r 30 \&#xA;    -video_track_timescale 90000 \&#xA;    video-jpeg.mp4&#xA;

      &#xA;

    2. &#xA;

    3. Convert two streams from .h264 to .mp4 via copy (no transcoding).

      &#xA;

      ffmpeg \&#xA;    -hide_banner \&#xA;    -i low-motion-video.h264 \&#xA;    -c copy \&#xA;    -vsync vfr \&#xA;    -video_track_timescale 90000 \&#xA;    low-motion-video.mp4&#xA;&#xA;ffmpeg \&#xA;    -hide_banner \&#xA;    -i full-video.h264 \&#xA;    -c copy \&#xA;    -video_track_timescale 90000 \&#xA;    -vsync vfr \&#xA;    full-video.mp4&#xA;

      &#xA;

    4. &#xA;

    5. Stitch all together by generating another concat directive file.

      &#xA;

      echo "ffconcat version 1.0" >ffconcat-h264.txt&#xA;echo >>ffconcat-h264.txt&#xA;echo "file low-motion-video.mp4" >>ffconcat-h264.txt&#xA;echo >>ffconcat-h264.txt&#xA;echo "file full-video.mp4" >>ffconcat-h264.txt&#xA;echo >>ffconcat-h264.txt&#xA;echo "file video-jpeg.mp4" >>ffconcat-h264.txt&#xA;echo >>ffconcat-h264.txt&#xA;&#xA;ffmpeg \&#xA;    -hide_banner \&#xA;    -f concat \&#xA;    -i ffconcat-h264.txt \&#xA;    -pix_fmt yuv420p \&#xA;    -c copy \&#xA;    -video_track_timescale 90000 \&#xA;    -vsync vfr \&#xA;    video-out.mp4&#xA;&#xA;

      &#xA;

    6. &#xA;

    &#xA;

    Problem (and attempted troubleshooting)

    &#xA;

    The above does produce a reasonable output — it plays first video, then plays second video with no timing/rate issues AFAICT, then plays JPEGs with time between each JPEG "frame" growing successively, as expected.

    &#xA;

    But, the conversion process produces warnings that concern me (for compatibility with players ; or potentially other IRL streams that may result in some issue my prototyping content doesn't make obvious). Initial attempts generated 100s of warnings, but with some arguments added, I reduced it down to just a handful, but this handful is stubborn and nothing I tried would help.

    &#xA;

    The first conversion of JPEGs to .mp4 goes fine with the following output :

    &#xA;

    Input #0, concat, from &#x27;ffconcat-jpeg.txt&#x27;:&#xA;  Duration: 00:08:25.00, start: 0.000000, bitrate: 0 kb/s&#xA;  Stream #0:0: Video: png, pal8(pc), 176x341 [SAR 3780:3780 DAR 16:31], 25 fps, 25 tbr, 25 tbn, 25 tbc&#xA;Stream mapping:&#xA;  Stream #0:0 -> #0:0 (png (native) -> h264 (libx264))&#xA;Press [q] to stop, [?] for help&#xA;[libx264 @ 0x7fe418008e00] using SAR=1/1&#xA;[libx264 @ 0x7fe418008e00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2&#xA;[libx264 @ 0x7fe418008e00] profile High 4:4:4 Predictive, level 1.3, 4:4:4, 8-bit&#xA;[libx264 @ 0x7fe418008e00] 264 - core 163 r3060 5db6aa6 - H.264/MPEG-4 AVC codec - Copyleft 2003-2021 - 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=4 threads=11 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&#xA;Output #0, mp4, to &#x27;video-jpeg.mp4&#x27;:&#xA;  Metadata:&#xA;    encoder         : Lavf58.76.100&#xA;  Stream #0:0: Video: h264 (avc1 / 0x31637661), yuv444p(tv, progressive), 176x341 [SAR 1:1 DAR 16:31], q=2-31, 30 fps, 90k tbn&#xA;    Metadata:&#xA;      encoder         : Lavc58.134.100 libx264&#xA;    Side data:&#xA;      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A&#xA;frame=  100 fps=0.0 q=-1.0 Lsize=     157kB time=00:07:55.33 bitrate=   2.7kbits/s speed=2.41e&#x2B;03x    &#xA;video:155kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.800846%&#xA;[libx264 @ 0x7fe418008e00] frame I:1     Avg QP:20.88  size:   574&#xA;[libx264 @ 0x7fe418008e00] frame P:43    Avg QP:14.96  size:  2005&#xA;[libx264 @ 0x7fe418008e00] frame B:56    Avg QP:21.45  size:  1266&#xA;[libx264 @ 0x7fe418008e00] consecutive B-frames: 14.0% 24.0% 30.0% 32.0%&#xA;[libx264 @ 0x7fe418008e00] mb I  I16..4: 36.4% 55.8%  7.9%&#xA;[libx264 @ 0x7fe418008e00] mb P  I16..4:  5.1%  7.5% 11.2%  P16..4:  5.6%  8.1%  4.5%  0.0%  0.0%    skip:57.9%&#xA;[libx264 @ 0x7fe418008e00] mb B  I16..4:  2.4%  0.9%  3.9%  B16..8: 16.2%  8.8%  4.6%  direct: 1.2%  skip:62.0%  L0:56.6% L1:38.7% BI: 4.7%&#xA;[libx264 @ 0x7fe418008e00] 8x8 transform intra:28.3% inter:3.7%&#xA;[libx264 @ 0x7fe418008e00] coded y,u,v intra: 26.5% 0.0% 0.0% inter: 9.8% 0.0% 0.0%&#xA;[libx264 @ 0x7fe418008e00] i16 v,h,dc,p: 82% 13%  4%  0%&#xA;[libx264 @ 0x7fe418008e00] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 20%  8% 71%  1%  0%  0%  0%  0%  0%&#xA;[libx264 @ 0x7fe418008e00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 41% 11% 29%  4%  2%  3%  1%  7%  1%&#xA;[libx264 @ 0x7fe418008e00] Weighted P-Frames: Y:0.0% UV:0.0%&#xA;[libx264 @ 0x7fe418008e00] ref P L0: 44.1%  4.2% 28.4% 23.3%&#xA;[libx264 @ 0x7fe418008e00] ref B L0: 56.2% 32.1% 11.6%&#xA;[libx264 @ 0x7fe418008e00] ref B L1: 92.4%  7.6%&#xA;[libx264 @ 0x7fe418008e00] kb/s:2.50&#xA;

    &#xA;

    The conversion of individual streams from .h264 to .mp4 generates two types of warnings each. One is [mp4 @ 0x7faee3040400] Timestamps are unset in a packet for stream 0. This is deprecated and will stop working in the future. Fix your code to set the timestamps properly, and the other is [mp4 @ 0x7faee3040400] pts has no value.

    &#xA;

    Some posts on SO (can't find my original finds on that now) suggested that it's safe to ignore and comes from H.264 being an elementary stream that supposedly doesn't contain timestamps. It surprises me a bit since I produce that stream using NVENC API and clearly supply timing information for each frame via PIC_PARAMS structure : NV_STRUCT(PIC_PARAMS, pp); ...; pp.inputTimeStamp = _frameIndex&#x2B;&#x2B; * (H264_CLOCK_RATE / _params.frameRate);, where #define H264_CLOCK_RATE 9000 and _params.frameRate = 30.

    &#xA;

    Input #0, h264, from &#x27;low-motion-video.h264&#x27;:&#xA;  Duration: N/A, bitrate: N/A&#xA;  Stream #0:0: Video: h264 (High), yuv420p(progressive), 1440x3040 [SAR 1:1 DAR 9:19], 30 fps, 30 tbr, 1200k tbn, 60 tbc&#xA;Output #0, mp4, to &#x27;low-motion-video.mp4&#x27;:&#xA;  Metadata:&#xA;    encoder         : Lavf58.76.100&#xA;  Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1440x3040 [SAR 1:1 DAR 9:19], q=2-31, 30 fps, 30 tbr, 90k tbn, 1200k tbc&#xA;Stream mapping:&#xA;  Stream #0:0 -> #0:0 (copy)&#xA;Press [q] to stop, [?] for help&#xA;[mp4 @ 0x7faee3040400] Timestamps are unset in a packet for stream 0. This is deprecated and will stop working in the future. Fix your code to set the timestamps properly&#xA;[mp4 @ 0x7faee3040400] pts has no value&#xA;[mp4 @ 0x7faee3040400] pts has no value0kB time=-00:00:00.03 bitrate=N/A speed=N/A    &#xA;    Last message repeated 17985 times&#xA;frame=17987 fps=0.0 q=-1.0 Lsize=   79332kB time=00:09:59.50 bitrate=1084.0kbits/s speed=1.59e&#x2B;03x    &#xA;video:79250kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.103804%&#xA;Input #0, h264, from &#x27;full-video.h264&#x27;:&#xA;  Duration: N/A, bitrate: N/A&#xA;  Stream #0:0: Video: h264 (High), yuv420p(progressive), 1440x3040 [SAR 1:1 DAR 9:19], 30 fps, 30 tbr, 1200k tbn, 60 tbc&#xA;Output #0, mp4, to &#x27;full-video.mp4&#x27;:&#xA;  Metadata:&#xA;    encoder         : Lavf58.76.100&#xA;  Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1440x3040 [SAR 1:1 DAR 9:19], q=2-31, 30 fps, 30 tbr, 90k tbn, 1200k tbc&#xA;Stream mapping:&#xA;  Stream #0:0 -> #0:0 (copy)&#xA;Press [q] to stop, [?] for help&#xA;[mp4 @ 0x7f9381864600] Timestamps are unset in a packet for stream 0. This is deprecated and will stop working in the future. Fix your code to set the timestamps properly&#xA;[mp4 @ 0x7f9381864600] pts has no value&#xA;[mp4 @ 0x7f9381864600] pts has no value0kB time=-00:00:00.03 bitrate=N/A speed=N/A    &#xA;    Last message repeated 17981 times&#xA;frame=17983 fps=0.0 q=-1.0 Lsize=   52976kB time=00:09:59.36 bitrate= 724.1kbits/s speed=1.33e&#x2B;03x    &#xA;video:52893kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.156232%&#xA;

    &#xA;

    But the most worrisome error for me is from stitching together all interim .mp4 files into one :

    &#xA;

    [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f9ff2010e00] Auto-inserting h264_mp4toannexb bitstream filter&#xA;Input #0, concat, from &#x27;ffconcat-h264.txt&#x27;:&#xA;  Duration: N/A, bitrate: 1082 kb/s&#xA;  Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1440x3040 [SAR 1:1 DAR 9:19], 1082 kb/s, 30 fps, 30 tbr, 90k tbn, 60 tbc&#xA;    Metadata:&#xA;      handler_name    : VideoHandler&#xA;      vendor_id       : [0][0][0][0]&#xA;Output #0, mp4, to &#x27;video-out.mp4&#x27;:&#xA;  Metadata:&#xA;    encoder         : Lavf58.76.100&#xA;  Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1440x3040 [SAR 1:1 DAR 9:19], q=2-31, 1082 kb/s, 30 fps, 30 tbr, 90k tbn, 90k tbc&#xA;    Metadata:&#xA;      handler_name    : VideoHandler&#xA;      vendor_id       : [0][0][0][0]&#xA;Stream mapping:&#xA;  Stream #0:0 -> #0:0 (copy)&#xA;Press [q] to stop, [?] for help&#xA;[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f9fe1009c00] Auto-inserting h264_mp4toannexb bitstream filter&#xA;[mp4 @ 0x7f9ff2023400] Non-monotonous DTS in output stream 0:0; previous: 53954460, current: 53954460; changing to 53954461. This may result in incorrect timestamps in the output file.&#xA;[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f9fd1008a00] Auto-inserting h264_mp4toannexb bitstream filter&#xA;[mp4 @ 0x7f9ff2023400] Non-monotonous DTS in output stream 0:0; previous: 107900521, current: 107874150; changing to 107900522. This may result in incorrect timestamps in the output file.&#xA;[mp4 @ 0x7f9ff2023400] Non-monotonous DTS in output stream 0:0; previous: 107900522, current: 107886150; changing to 107900523. This may result in incorrect timestamps in the output file.&#xA;frame=36070 fps=0.0 q=-1.0 Lsize=  132464kB time=00:27:54.26 bitrate= 648.1kbits/s speed=6.54e&#x2B;03x    &#xA;video:132296kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.126409%&#xA;

    &#xA;

    I'm not sure how to deal with those non-monotonous DTS errors, and no matter what I try, nothing budges. I analyzed the interim .mp4 files using ffprobe -show_frames and found that the last frame of each interim .mp4 does not have DTS, while previous frames do. E.g. :

    &#xA;

    ...&#xA;[FRAME]&#xA;media_type=video&#xA;stream_index=0&#xA;key_frame=0&#xA;pkt_pts=53942461&#xA;pkt_pts_time=599.360678&#xA;pkt_dts=53942461&#xA;pkt_dts_time=599.360678&#xA;best_effort_timestamp=53942461&#xA;best_effort_timestamp_time=599.360678&#xA;pkt_duration=3600&#xA;pkt_duration_time=0.040000&#xA;pkt_pos=54161377&#xA;pkt_size=1034&#xA;width=1440&#xA;height=3040&#xA;pix_fmt=yuv420p&#xA;sample_aspect_ratio=1:1&#xA;pict_type=B&#xA;coded_picture_number=17982&#xA;display_picture_number=0&#xA;interlaced_frame=0&#xA;top_field_first=0&#xA;repeat_pict=0&#xA;color_range=unknown&#xA;color_space=unknown&#xA;color_primaries=unknown&#xA;color_transfer=unknown&#xA;chroma_location=left&#xA;[/FRAME]&#xA;[FRAME]&#xA;media_type=video&#xA;stream_index=0&#xA;key_frame=0&#xA;pkt_pts=53927461&#xA;pkt_pts_time=599.194011&#xA;pkt_dts=N/A&#xA;pkt_dts_time=N/A&#xA;best_effort_timestamp=53927461&#xA;...&#xA;

    &#xA;

    My guess is that as concat demuxer reads in (or elsewhere in ffmpeg's conversion pipeline), for the last frame it sees no DTS set, and produces a virtual value equal to the last seen. Then further in pipeline it consumes this input, sees that DTS value is being repeated, issues a warning and offsets it with increment by one, which might be somewhat nonsensical/unrealistic timing value.

    &#xA;

    I tried using -fflags &#x2B;genpts as suggested in this SO answer, but that doesn't change anything.

    &#xA;

    Per yet other posts suggesting issue being with incompatible tbn and tbc values and possible timebase issues, I tried adding -time_base 1:90000 and -enc_time_base 1:90000 and -copytb 1 and nothing budges. The -video_track_timescale 90000 is there b/c it helped reduce those DTS warnings from 100s down to 3, but doesn't eliminate them all.

    &#xA;

    Question

    &#xA;

    What is missing and how can I get ffmpeg to perform conversions without these warnings, to be sure it produces proper, well-formed output ?

    &#xA;