Recherche avancée

Médias (0)

Mot : - Tags -/api

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (24)

  • La sauvegarde automatique de canaux SPIP

    1er avril 2010, par

    Dans le cadre de la mise en place d’une plateforme ouverte, il est important pour les hébergeurs de pouvoir disposer de sauvegardes assez régulières pour parer à tout problème éventuel.
    Pour réaliser cette tâche on se base sur deux plugins SPIP : Saveauto qui permet une sauvegarde régulière de la base de donnée sous la forme d’un dump mysql (utilisable dans phpmyadmin) mes_fichiers_2 qui permet de réaliser une archive au format zip des données importantes du site (les documents, les éléments (...)

  • Script d’installation automatique de MediaSPIP

    25 avril 2011, par

    Afin de palier aux difficultés d’installation dues principalement aux dépendances logicielles coté serveur, un script d’installation "tout en un" en bash a été créé afin de faciliter cette étape sur un serveur doté d’une distribution Linux compatible.
    Vous devez bénéficier d’un accès SSH à votre serveur et d’un compte "root" afin de l’utiliser, ce qui permettra d’installer les dépendances. Contactez votre hébergeur si vous ne disposez pas de cela.
    La documentation de l’utilisation du script d’installation (...)

  • Automated installation script of MediaSPIP

    25 avril 2011, par

    To overcome the difficulties mainly due to the installation of server side software dependencies, an "all-in-one" installation script written in bash was created to facilitate this step on a server with a compatible Linux distribution.
    You must have access to your server via SSH and a root account to use it, which will install the dependencies. Contact your provider if you do not have that.
    The documentation of the use of this installation script is available here.
    The code of this (...)

Sur d’autres sites (2739)

  • Gstreamer channel reordering failed

    31 octobre 2017, par user972851

    I installed the library essentia which causes my previously working pipeline to crash :

    ** (gst-launch-1.0:22515): CRITICAL **: gst_audio_reorder_channels: assertion 'size % ((info->width * channels) / 8) == 0' failed
    ERROR: from element /GstPipeline:pipeline0/GstRtpL16Depay:rtpl16depay0: Channel reordering failed.
    Additional debug info:
    gstrtpL16depay.c(276): gst_rtp_L16_depay_process (): /GstPipeline:pipeline0/GstRtpL16Depay:rtpl16depay0

    The pipeline looks like this :

    udpsrc port=5000 ! application/x-rtp,media=(string)audio,channels=1, clock-rate=(int)44100,encoding-name=(string)L16,payload=10 ! rtpL16depay ! audioconvert ! tee name=t ! queue ! autoaudiosink sync=false t. ! queue ! appsink name=codesink

    I am using gstreamer 1.0 on Ubuntu 16.04 and (re-)installed the libraries mentioned in the essentia doc :

    build-essential libyaml-dev libfftw3-dev libavcodec-dev libavformat-dev libavutil-dev libavresample-dev python-dev libsamplerate0-dev libtag1-dev
    python-numpy-dev python-numpy python-yaml
    ffmpeg

    The essentia install script finished ’successfully’ even though I cannot find MonoLoader or any other Audioloader.... (so still something wrong with essentia as well, but thats not the main problem !)


    Cleaned out parts of the gstreamer debug log look like this :

    0:00:00.149495849 [334m22515[00m       0xd96a00 [37mDEBUG  [00m [00;01;36m  GST_PLUGIN_LOADING gstplugin.c:1549:gst_plugin_ext_dep_scan_dir_and_match_names:<plugin106>[00m g_dir_open(/dev/v4l2) failed: Error opening directory '/dev/v4l2': No such file or directory
    0:00:00.149807870 [334m22515[00m       0xd96a00 [37mDEBUG  [00m [00;01;36m  GST_PLUGIN_LOADING gstplugin.c:1549:gst_plugin_ext_dep_scan_dir_and_match_names:<plugin223>[00m g_dir_open(/home/xxx/.frei0r-1/lib) failed: Error opening directory '/home/xxx/.frei0r-1/lib': No such file or directory
    0:00:00.149823765 [334m22515[00m       0xd96a00 [37mDEBUG  [00m [00;01;36m  GST_PLUGIN_LOADING gstplugin.c:1549:gst_plugin_ext_dep_scan_dir_and_match_names:<plugin223>[00m g_dir_open(/usr/lib/x86_64-linux-gnu/frei0r-1) failed: Error opening directory '/usr/lib/x86_64-linux-gnu/frei0r-1': No such file or directory
    0:00:00.149836069 [334m22515[00m       0xd96a00 [37mDEBUG  [00m [00;01;36m  GST_PLUGIN_LOADING gstplugin.c:1549:gst_plugin_ext_dep_scan_dir_and_match_names:<plugin223>[00m g_dir_open(/usr/lib/frei0r-1) failed: Error opening directory '/usr/lib/frei0r-1': No such file or directory
    0:00:00.149847527 [334m22515[00m       0xd96a00 [37mDEBUG  [00m [00;01;36m  GST_PLUGIN_LOADING gstplugin.c:1549:gst_plugin_ext_dep_scan_dir_and_match_names:<plugin223>[00m g_dir_open(/usr/local/lib/frei0r-1) failed: Error opening directory '/usr/local/lib/frei0r-1': No such file or directory
    0:00:00.149859202 [334m22515[00m       0xd96a00 [37mDEBUG  [00m [00;01;36m  GST_PLUGIN_LOADING gstplugin.c:1549:gst_plugin_ext_dep_scan_dir_and_match_names:<plugin223>[00m g_dir_open(/usr/lib32/frei0r-1) failed: Error opening directory '/usr/lib32/frei0r-1': No such file or directory
    0:00:00.149870221 [334m22515[00m       0xd96a00 [37mDEBUG  [00m [00;01;36m  GST_PLUGIN_LOADING gstplugin.c:1549:gst_plugin_ext_dep_scan_dir_and_match_names:<plugin223>[00m g_dir_open(/usr/local/lib32/frei0r-1) failed: Error opening directory '/usr/local/lib32/frei0r-1': No such file or directory
    0:00:00.149881462 [334m22515[00m       0xd96a00 [37mDEBUG  [00m [00;01;36m  GST_PLUGIN_LOADING gstplugin.c:1549:gst_plugin_ext_dep_scan_dir_and_match_names:<plugin223>[00m g_dir_open(/usr/lib64/frei0r-1) failed: Error opening directory '/usr/lib64/frei0r-1': No such file or directory
    0:00:00.149893070 [334m22515[00m       0xd96a00 [37mDEBUG  [00m [00;01;36m  GST_PLUGIN_LOADING gstplugin.c:1549:gst_plugin_ext_dep_scan_dir_and_match_names:<plugin223>[00m g_dir_open(/usr/local/lib64/frei0r-1) failed: Error opening directory '/usr/local/lib64/frei0r-1': No such file or directory

    0:00:00.186559327 [334m22515[00m       0xf93a80 [33;01mWARN   [00m [00m         rtpL16depay gstrtpL16depay.c:276:gst_rtp_L16_depay_process:<rtpl16depay0>[00m error: Channel reordering failed.
    0:00:00.186574584 [334m22515[00m       0xf93a80 [37mDEBUG  [00m [00;01;37;41m         GST_MESSAGE gstelement.c:1848:gst_element_message_full:<rtpl16depay0>[00m start
    0:00:00.186589070 [334m22515[00m       0xf93a80 [36mINFO   [00m [00;01;31;47m    GST_ERROR_SYSTEM gstelement.c:1879:gst_element_message_full:<rtpl16depay0>[00m posting message: Channel reordering failed.
    0:00:00.186619665 [334m22515[00m       0xf93a80 [33;01mWARN   [00m [00m           structure gststructure.c:1935:priv_gst_structure_append_to_gstring:[00m No value transform to serialize field 'gerror' of type 'GError'
    0:00:00.186613247 [334m22515[00m       0xf93a80 [37mDEBUG  [00m [00;43m             GST_BUS gstbus.c:311:gst_bus_post:<bus1>[00m [msg 0xfc44c0] posting on bus error message: 0xfc44c0, time 99:99:99.999999999, seq-num 59, element 'rtpl16depay0', GstMessageError, gerror=(GError)NULL, debug=(string)"gstrtpL16depay.c\(276\):\ gst_rtp_L16_depay_process\ \(\):\ /GstPipeline:pipeline0/GstRtpL16Depay:rtpl16depay0";
    0:00:00.186641091 [334m22515[00m       0xf93a80 [37mDEBUG  [00m [00;01m                 bin gstbin.c:3533:gst_bin_handle_message_func:<pipeline0>[00m [msg 0xfc44c0] handling child rtpl16depay0 message of type error
    0:00:00.186649484 [334m22515[00m       0xf93a80 [37mDEBUG  [00m [00;01m                 bin gstbin.c:3540:gst_bin_handle_message_func:<pipeline0>[00m got ERROR message, unlocking state change
    0:00:00.186656312 [334m22515[00m       0xf93a80 [37mDEBUG  [00m [00;01m                 bin gstbin.c:3870:gst_bin_handle_message_func:<pipeline0>[00m posting message upward
    0:00:00.186665962 [334m22515[00m       0xf93a80 [33;01mWARN   [00m [00m           structure gststructure.c:1935:priv_gst_structure_append_to_gstring:[00m No value transform to serialize field 'gerror' of type 'GError'
    0:00:00.186662657 [334m22515[00m       0xf93a80 [37mDEBUG  [00m [00;43m             GST_BUS gstbus.c:311:gst_bus_post:<bus2>[00m [msg 0xfc44c0] posting on bus error message: 0xfc44c0, time 99:99:99.999999999, seq-num 59, element 'rtpl16depay0', GstMessageError, gerror=(GError)NULL, debug=(string)"gstrtpL16depay.c\(276\):\ gst_rtp_L16_depay_process\ \(\):\ /GstPipeline:pipeline0/GstRtpL16Depay:rtpl16depay0";
    0:00:00.186688725 [334m22515[00m       0xf93a80 [37mDEBUG  [00m [00;43m             GST_BUS gstbus.c:350:gst_bus_post:<bus2>[00m [msg 0xfc44c0] pushing on async queue
    0:00:00.186706354 [334m22515[00m       0xf93a80 [37mDEBUG  [00m [00;43m             GST_BUS gstbus.c:353:gst_bus_post:<bus2>[00m [msg 0xfc44c0] pushed on async queue
    0:00:00.186713847 [334m22515[00m       0xf93a80 [37mDEBUG  [00m [00;43m             GST_BUS gstbus.c:346:gst_bus_post:<bus1>[00m [msg 0xfc44c0] dropped
    0:00:00.186720541 [334m22515[00m       0xf93a80 [36mINFO   [00m [00;01;31;47m    GST_ERROR_SYSTEM gstelement.c:1902:gst_element_message_full:<rtpl16depay0>[00m posted error message: Channel reordering failed.
    0:00:00.186729277 [334m22515[00m       0xf93a80 [37mDEBUG  [00m [00;01;34m          GST_MEMORY gstmemory.c:87:_gst_memory_free:[00m free memory 0x7f7780004b80
    0:00:00.186737518 [334m22515[00m       0xf93a80 [37mDEBUG  [00m [00;01;35m      GST_SCHEDULING gstpad.c:4192:gst_pad_chain_data_unchecked:[00m called chainfunction &amp;0x7f77a1a9ae00 with buffer 0x7f7780016060, returned ok
    0:00:00.186746868 [334m22515[00m       0xf93a80 [37mDEBUG  [00m [00;01;35m      GST_SCHEDULING gstpad.c:4192:gst_pad_chain_data_unchecked:[00m called chainfunction &amp;gst_base_transform_chain with buffer 0x7f7780016060, returned ok
    0:00:00.186734973 [334m22515[00m       0xd96a00 [37mDEBUG  [00m [00;43m             GST_BUS gstbus.c:523:gst_bus_timed_pop_filtered:<bus2>[00m got message 0xfc44c0, error from rtpl16depay0, type mask is 4294967295
    0:00:00.186759208 [334m22515[00m       0xf93a80 [37mDEBUG  [00m [00m             basesrc gstbasesrc.c:2456:gst_base_src_get_range:<udpsrc0>[00m calling create offset 18446744073709551615 length 4096, time 0
    0:00:00.186808915 [334m22515[00m       0xf93a80 [37mDEBUG  [00m [00;01;34m          GST_MEMORY gstmemory.c:138:gst_memory_init:[00m new memory 0x7f7780017ae0, maxsize:901 offset:0 size:894
    0:00:00.186812210 [334m22515[00m       0xd96a00 [33;01mWARN   [00m [00m           structure gststructure.c:1935:priv_gst_structure_append_to_gstring:[00m No value transform to serialize field 'gerror' of type 'GError'
    0:00:00.186798035 [334m22515[00m       0xd96a00 [37mDEBUG  [00m [00;43m             GST_BUS gstbus.c:791:gst_bus_source_dispatch:<bus2>[00m source 0xfc0b60 calling dispatch with error message: 0xfc44c0, time 99:99:99.999999999, seq-num 59, element 'rtpl16depay0', GstMessageError, gerror=(GError)NULL, debug=(string)"gstrtpL16depay.c\(276\):\ gst_rtp_L16_depay_process\ \(\):\ /GstPipeline:pipeline0/GstRtpL16Depay:rtpl16depay0";


    0:00:00.187438285 [334m22515[00m       0xf93a80 [33;01mWARN   [00m [00m         rtpL16depay gstrtpL16depay.c:276:gst_rtp_L16_depay_process:<rtpl16depay0>[00m error: Channel reordering failed.

    0:00:00.187861496 [334m22515[00m       0xf93a80 [36mINFO   [00m [00;01;31;47m    GST_ERROR_SYSTEM gstelement.c:1879:gst_element_message_full:<rtpl16depay0>[00m posting message: Channel reordering failed.
    0:00:00.187870817 [334m22515[00m       0xd96a00 [37mDEBUG  [00m [00;01;31m          GST_STATES gstelement.c:2523:gst_element_set_state_func:<autoaudiosink0>[00m set_state to PAUSED
    0:00:00.187917831 [334m22515[00m       0xd96a00 [37mDEBUG  [00m [00;01;31m          GST_STATES gstelement.c:2561:gst_element_set_state_func:<autoaudiosink0>[00m current READY, old_pending PAUSED, next PAUSED, old return ASYNC
    0:00:00.187926145 [334m22515[00m       0xd96a00 [37mDEBUG  [00m [00;01;31m          GST_STATES gstelement.c:2615:gst_element_set_state_func:<autoaudiosink0>[00m element was busy with async state change
    0:00:00.187931662 [334m22515[00m       0xf93a80 [33;01mWARN   [00m [00m           structure gststructure.c:1935:priv_gst_structure_append_to_gstring:[00m No value transform to serialize field 'gerror' of type 'GError'
    0:00:00.187932562 [334m22515[00m       0xd96a00 [36mINFO   [00m [00;01;31m          GST_STATES gstbin.c:2770:gst_bin_change_state_func:<pipeline0>[00m child 'autoaudiosink0' is changing state asynchronously to PAUSED
    0:00:00.187919799 [334m22515[00m       0xf93a80 [37mDEBUG  [00m [00;43m             GST_BUS gstbus.c:311:gst_bus_post:<bus1>[00m [msg 0xfc4540] posting on bus error message: 0xfc4540, time 99:99:99.999999999, seq-num 60, element 'rtpl16depay0', GstMessageError, gerror=(GError)NULL, debug=(string)"gstrtpL16depay.c\(276\):\ gst_rtp_L16_depay_process\ \(\):\ /GstPipeline:pipeline0/GstRtpL16Depay:rtpl16depay0";
    0:00:00.187957346 [334m22515[00m       0xd96a00 [37mDEBUG  [00m [00;01m                 bin gstbin.c:2182:gst_bin_sort_iterator_next:<pipeline0>[00m queue head gives queue0
    0:00:00.187965818 [334m22515[00m       0xf93a80 [37mDEBUG  [00m [00;01m                 bin gstbin.c:3533:gst_bin_handle_message_func:<pipeline0>[00m [msg 0xfc4540] handling child rtpl16depay0 message of type error
    0:00:00.187975510 [334m22515[00m       0xd96a00 [37mDEBUG  [00m [00;01m                 bin gstbin.c:882:find_message:<pipeline0>[00m no message found matching types 00001000
    0:00:00.187996861 [334m22515[00m       0xd96a00 [37mDEBUG  [00m [00;01m                 bin gstbin.c:889:find_message:<pipeline0>[00m   structure-change
    0:00:00.188003444 [334m22515[00m       0xd96a00 [37mDEBUG  [00m [00;01m                 bin gstbin.c:2098:update_degree:<pipeline0>[00m change element audioconvert0, degree 1->0, linked to queue0
    0:00:00.188010702 [334m22515[00m       0xd96a00 [37mDEBUG  [00m [00;01m                 bin gstbin.c:1981:add_to_queue:<pipeline0>[00m adding 'audioconvert0' to queue
    0:00:00.188019716 [334m22515[00m       0xd96a00 [36mINFO   [00m [00;01;31m          GST_STATES gstbin.c:2316:gst_bin_element_set_state:<queue0>[00m current PLAYING pending VOID_PENDING, desired next PAUSED
    0:00:00.188021589 [334m22515[00m       0xf93a80 [37mDEBUG  [00m [00;01m                 bin gstbin.c:3540:gst_bin_handle_message_func:<pipeline0>[00m got ERROR message, unlocking state change

    0:00:00.188204142 [334m22515[00m       0xf93a80 [33;01mWARN   [00m [00m           structure gststructure.c:1935:priv_gst_structure_append_to_gstring:[00m No value transform to serialize field 'gerror' of type 'GError'

    0:00:00.188196343 [334m22515[00m       0xf93a80 [37mDEBUG  [00m [00;43m             GST_BUS gstbus.c:311:gst_bus_post:<bus2>[00m [msg 0xfc4540] posting on bus error message: 0xfc4540, time 99:99:99.999999999, seq-num 60, element 'rtpl16depay0', GstMessageError, gerror=(GError)NULL, debug=(string)"gstrtpL16depay.c\(276\):\ gst_rtp_L16_depay_process\ \(\):\ /GstPipeline:pipeline0/GstRtpL16Depay:rtpl16depay0";

    0:00:00.188532703 [334m22515[00m       0xf93a80 [36mINFO   [00m [00;01;31;47m    GST_ERROR_SYSTEM gstelement.c:1902:gst_element_message_full:<rtpl16depay0>[00m posted error message: Channel reordering failed.

    0:00:00.199466751 [334m22515[00m       0xd96a00 [37mDEBUG  [00m [00;43m             GST_BUS gstbus.c:523:gst_bus_timed_pop_filtered:<bus2>[00m got message 0xfc4540, error from rtpl16depay0, type mask is 4294967295

    0:00:00.203389413 [334m22515[00m       0xd96a00 [37mDEBUG  [00m [00;01;36m  GST_PLUGIN_LOADING gstpluginfeature.c:66:gst_plugin_feature_finalize:[00m finalizing feature 0xf69ea0: 'errorignore'
    </bus2></rtpl16depay0></bus2></pipeline0></queue0></pipeline0></pipeline0></pipeline0></pipeline0></pipeline0></pipeline0></bus1></pipeline0></autoaudiosink0></autoaudiosink0></autoaudiosink0></rtpl16depay0></rtpl16depay0></bus2></udpsrc0></bus2></rtpl16depay0></bus1></bus2></bus2></bus2></pipeline0></pipeline0></pipeline0></bus1></rtpl16depay0></rtpl16depay0></rtpl16depay0></plugin223></plugin223></plugin223></plugin223></plugin223></plugin223></plugin223></plugin223></plugin106>
  • Screen capture (video screencast) with FFMPEG with very low FPS

    20 septembre 2023, par jesusda

    I recently changed PCs, I went from having an Intel Core i5 4460 with integrated graphics card to a Xeon E5 2678 v3 with AMD RADEON RX 550 graphics.

    &#xA;

    On paper, the new PC is on the order of 3 to 7 times more powerful than the old one and I can attest that this is the case in daily use, video and image editing etc. The advantage of having so many cores and threads available is palpable. In terms of games I haven't tried it because I'm not really a gamer and the few games I use are the typical free ones that come with Debian and some emulators that, honestly, already worked fine with the old PC.

    &#xA;

    However there is one task that brings me head over heels for its terrible performance : video screen capture.

    &#xA;

    With my old PC I was able to capture at over 60 fps at full screen while doing any task I needed to record.

    &#xA;

    Even with my lenovo thinkpad x230 I am able to capture screen at over 80fps with total fluency.

    &#xA;

    The command I have always used is :

    &#xA;

    ffmpeg  -f x11grab -draw_mouse 1 -framerate 60 -video_size 1920x1200 -i :0.0&#x2B;1680,0  -qscale 0 -pix_fmt yuv420p -c:v libx264 -preset medium -qp 0 -q:v 1 -s 1920x1200 -f matroska -threads 4 video.mkv&#xA;

    &#xA;

    notes :

    &#xA;

    -video_size 1920x1200 -i :0.0&#x2B;1680,0 y -s 1920x1200 are the dimensions and position of the region to capture (my right monitor).

    &#xA;

    Notice that I even used -preset medium and software encoding, so I got very good quality even with that parameter setting and without ever going below 60 fps.

    &#xA;

    What happens to me now ?

    &#xA;

    The equipment is unable to capture more than 20 fps which makes any video invalid, with frame drops and not even reach 30fps, which would be the minimum required.

    &#xA;

    In addition, it is quite noticeable the decrease in responsiveness of the PC as soon as I launch the command. That is, all that fluidity and smoothness that is appreciated when working normally, disappears and even moving a window from one side to another is rough and stumbling.

    &#xA;

    I have tried with different parameters of ffmpeg, to capture raw, without encoding.

    &#xA;

    I have tried saving the resulting video directly to RAM disk in order to avoid the possible bottleneck of writing to disk. It doesn't affect it at all.

    &#xA;

    So, does anyone have any suggestions as to at least where I can dig further to find a solution to the problem ?

    &#xA;

    Additional data, in case it helps :

    &#xA;

    $ → inxi&#xA;CPU: 12-Core Intel Xeon E5-2678 v3 (-MT MCP-)&#xA;speed/min/max: 1201/1200/3300 MHz Kernel: 5.10.0-0.bpo.4-amd64 x86_64&#xA;Up: 1d 6h 55m Mem: 6427.6/32012.4 MiB (20.1%)&#xA;Storage: 13.76 TiB (55.9% used) Procs: 433 Shell: bash 5.0.18 inxi: 3.0.32&#xA;&#xA;&#xA;$ → ffmpeg -v&#xA;ffmpeg version 4.1.6 Copyright (c) 2000-2020 the FFmpeg developers&#xA;  built with gcc 8 (Debian 8.3.0-6)&#xA;  configuration: --disable-decoder=amrnb --disable-decoder=libopenjpeg --disable-libopencv --disable-outdev=sdl2 --disable-podpages --disable-sndio --disable-stripping --enable-libaom --enable-avfilter --enable-avresample --enable-gcrypt --disable-gnutls --enable-openssl --enable-gpl --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libilbc --enable-libkvazaar --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx265 --enable-libzimg --enable-libxvid --enable-libzvbi --enable-nonfree --enable-opencl --enable-opengl --enable-postproc --enable-pthreads --enable-shared --enable-version3 --enable-libwebp --incdir=/usr/include/x86_64-linux-gnu --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --toolchain=hardened --enable-frei0r --enable-chromaprint --enable-libx264 --enable-libiec61883 --enable-libdc1394 --enable-vaapi --enable-libmfx --enable-libvmaf --disable-altivec --shlibdir=/usr/lib/x86_64-linux-gnu&#xA;  libavutil      56. 22.100 / 56. 22.100&#xA;  libavcodec     58. 35.100 / 58. 35.100&#xA;  libavformat    58. 20.100 / 58. 20.100&#xA;  libavdevice    58.  5.100 / 58.  5.100&#xA;  libavfilter     7. 40.101 /  7. 40.101&#xA;  libavresample   4.  0.  0 /  4.  0.  0&#xA;  libswscale      5.  3.100 /  5.  3.100&#xA;  libswresample   3.  3.100 /  3.  3.100&#xA;  libpostproc    55.  3.100 / 55.  3.100&#xA;

    &#xA;

    I have the free amdgpu drivers (not amdgpu-pro), but I activated OpenCL just in case.

    &#xA;

    I followed this tutorial.

    &#xA;

    $ → glxinfo | grep OpenGL&#xA;OpenGL vendor string: AMD&#xA;OpenGL renderer string: Radeon RX550/550 Series (POLARIS12, DRM 3.40.0, 5.10.0-0.bpo.4-amd64, LLVM 11.0.1)&#xA;OpenGL core profile version string: 4.6 (Core Profile) Mesa 20.3.4&#xA;OpenGL core profile shading language version string: 4.60&#xA;OpenGL core profile context flags: (none)&#xA;OpenGL core profile profile mask: core profile&#xA;OpenGL core profile extensions:&#xA;OpenGL version string: 4.6 (Compatibility Profile) Mesa 20.3.4&#xA;OpenGL shading language version string: 4.60&#xA;OpenGL context flags: (none)&#xA;OpenGL profile mask: compatibility profile&#xA;OpenGL extensions:&#xA;OpenGL ES profile version string: OpenGL ES 3.2 Mesa 20.3.4&#xA;OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20&#xA;OpenGL ES profile extensions:&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;$ → clinfo&#xA;Number of platforms                               1&#xA;  Platform Name                                   Clover&#xA;  Platform Vendor                                 Mesa&#xA;  Platform Version                                OpenCL 1.1 Mesa 20.3.4&#xA;  Platform Profile                                FULL_PROFILE&#xA;  Platform Extensions                             cl_khr_icd&#xA;  Platform Extensions function suffix             MESA&#xA;&#xA;  Platform Name                                   Clover&#xA;Number of devices                                 1&#xA;  Device Name                                     Radeon RX550/550 Series (POLARIS12, DRM 3.40.0, 5.10.0-0.bpo.4-amd64, LLVM 11.0.1)&#xA;  Device Vendor                                   AMD&#xA;  Device Vendor ID                                0x1002&#xA;  Device Version                                  OpenCL 1.1 Mesa 20.3.4&#xA;  Driver Version                                  20.3.4&#xA;  Device OpenCL C Version                         OpenCL C 1.1&#xA;  Device Type                                     GPU&#xA;  Device Profile                                  FULL_PROFILE&#xA;  Device Available                                Yes&#xA;  Compiler Available                              Yes&#xA;  Max compute units                               8&#xA;  Max clock frequency                             1183MHz&#xA;  Max work item dimensions                        3&#xA;  Max work item sizes                             256x256x256&#xA;  Max work group size                             256&#xA;  Preferred work group size multiple              64&#xA;  Preferred / native vector sizes&#xA;    char                                                16 / 16&#xA;    short                                                8 / 8&#xA;    int                                                  4 / 4&#xA;    long                                                 2 / 2&#xA;    half                                                 0 / 0        (n/a)&#xA;    float                                                4 / 4&#xA;    double                                               2 / 2        (cl_khr_fp64)&#xA;  Half-precision Floating-point support           (n/a)&#xA;  Single-precision Floating-point support         (core)&#xA;    Denormals                                     No&#xA;    Infinity and NANs                             Yes&#xA;    Round to nearest                              Yes&#xA;    Round to zero                                 No&#xA;    Round to infinity                             No&#xA;    IEEE754-2008 fused multiply-add               No&#xA;    Support is emulated in software               No&#xA;    Correctly-rounded divide and sqrt operations  No&#xA;  Double-precision Floating-point support         (cl_khr_fp64)&#xA;    Denormals                                     Yes&#xA;    Infinity and NANs                             Yes&#xA;    Round to nearest                              Yes&#xA;    Round to zero                                 Yes&#xA;    Round to infinity                             Yes&#xA;    IEEE754-2008 fused multiply-add               Yes&#xA;    Support is emulated in software               No&#xA;  Address bits                                    64, Little-Endian&#xA;  Global memory size                              3221225472 (3GiB)&#xA;  Error Correction support                        No&#xA;  Max memory allocation                           1717986918 (1.6GiB)&#xA;  Unified memory for Host and Device              No&#xA;  Minimum alignment for any data type             128 bytes&#xA;  Alignment of base address                       32768 bits (4096 bytes)&#xA;  Global Memory cache type                        None&#xA;  Image support                                   No&#xA;  Local memory type                               Local&#xA;  Local memory size                               32768 (32KiB)&#xA;  Max number of constant args                     16&#xA;  Max constant buffer size                        67108864 (64MiB)&#xA;  Max size of kernel argument                     1024&#xA;  Queue properties&#xA;    Out-of-order execution                        No&#xA;    Profiling                                     Yes&#xA;  Profiling timer resolution                      0ns&#xA;  Execution capabilities&#xA;    Run OpenCL kernels                            Yes&#xA;    Run native kernels                            No&#xA;  Device Extensions cl_khr_byte_addressable_store cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_fp64&#xA;&#xA;NULL platform behavior&#xA;  clGetPlatformInfo(NULL, CL_PLATFORM_NAME, ...)  Clover&#xA;  clGetDeviceIDs(NULL, CL_DEVICE_TYPE_ALL, ...)   Success [MESA]&#xA;  clCreateContext(NULL, ...) [default]            Success [MESA]&#xA;  clCreateContextFromType(NULL, CL_DEVICE_TYPE_DEFAULT)  Success (1)&#xA;    Platform Name                                 Clover&#xA;    Device Name                                   Radeon RX550/550 Series (POLARIS12, DRM 3.40.0, 5.10.0-0.bpo.4-amd64, LLVM 11.0.1)&#xA;  clCreateContextFromType(NULL, CL_DEVICE_TYPE_CPU)  No devices found in platform&#xA;  clCreateContextFromType(NULL, CL_DEVICE_TYPE_GPU)  Success (1)&#xA;    Platform Name                                 Clover&#xA;    Device Name                                   Radeon RX550/550 Series (POLARIS12, DRM 3.40.0, 5.10.0-0.bpo.4-amd64, LLVM 11.0.1)&#xA;  clCreateContextFromType(NULL, CL_DEVICE_TYPE_ACCELERATOR)  No devices found in platform&#xA;  clCreateContextFromType(NULL, CL_DEVICE_TYPE_CUSTOM)  No devices found in platform&#xA;  clCreateContextFromType(NULL, CL_DEVICE_TYPE_ALL)  Success (1)&#xA;    Platform Name                                 Clover&#xA;    Device Name                                   Radeon RX550/550 Series (POLARIS12, DRM 3.40.0, 5.10.0-0.bpo.4-amd64, LLVM 11.0.1)&#xA;&#xA;ICD loader properties&#xA;  ICD loader Name                                 OpenCL ICD Loader&#xA;  ICD loader Vendor                               OCL Icd free software&#xA;  ICD loader Version                              2.2.12&#xA;  ICD loader Profile                              OpenCL 2.2&#xA;

    &#xA;

    This would not be a tearing problem, as no tearing is visible when playing videos and the TearFree driver policy is enabled.

    &#xA;

    $ → xrandr --verbose | grep TearFree&#xA;    TearFree: on&#xA;    TearFree: on&#xA;    TearFree: on&#xA;

    &#xA;

  • What is Multi-Touch Attribution ? (And How To Get Started)

    2 février 2023, par Erin — Analytics Tips

    Good marketing thrives on data. Or more precisely — its interpretation. Using modern analytics software, we can determine which marketing actions steer prospects towards the desired action (a conversion event). 

    An attribution model in marketing is a set of rules that determine how various marketing tactics and channels impact the visitor’s progress towards a conversion. 

    Yet, as customer journeys become more complicated and involve multiple “touches”, standard marketing reports no longer tell the full picture. 

    That’s when multi-touch attribution analysis comes to the fore. 

    What is Multi-Touch Attribution ?

    Multi-touch attribution (also known as multi-channel attribution or cross-channel attribution) measures the impact of all touchpoints on the consumer journey on conversion. 

    Unlike single-touch reporting, multi-touch attribution models give credit to each marketing element — a social media ad, an on-site banner, an email link click, etc. By seeing impacts from every touchpoint and channel, marketers can avoid false assumptions or subpar budget allocations.

    To better understand the concept, let’s interpret the same customer journey using a standard single-touch report vs a multi-touch attribution model. 

    Picture this : Jammie is shopping around for a privacy-centred web analytics solution. She saw a recommendation on Twitter and ended up on the Matomo website. After browsing a few product pages and checking comparisons with other web analytics tools, she signs up for a webinar. One week after attending, Jammie is convinced that Matomo is the right tool for her business and goes directly to the Matomo website a starts a free trial. 

    • A standard single-touch report would attribute 100% of the conversion to direct traffic, which doesn’t give an accurate view of the multiple touchpoints that led Jammie to start a free trial. 
    • A multi-channel attribution report would showcase all the channels involved in the free trial conversion — social media, website content, the webinar, and then the direct traffic source.

    In other words : Multi-touch attribution helps you understand how prospects move through the sales funnel and which elements tinder them towards the desired outcome. 

    Types of Attribution Models

    As marketers, we know that multiple factors play into a conversion — channel type, timing, user’s stage on the buyer journey and so on. Various attribution models exist to reflect this variability. 

    Types of Attribution Models

    First Interaction attribution model (otherwise known as first touch) gives all credit for the conversion to the first channel (for example — a referral link) and doesn’t report on all the other interactions a user had with your company (e.g., clicked a newsletter link, engaged with a landing page, or browsed the blog campaign).

    First-touch helps optimise the top of your funnel and establish which channels bring the best leads. However, it doesn’t offer any insight into other factors that persuaded a user to convert. 

    Last Interaction attribution model (also known as last touch) allocates 100% credit to the last channel before conversion — be it direct traffic, paid ad, or an internal product page.

    The data is useful for optimising the bottom-of-the-funnel (BoFU) elements. But you have no visibility into assisted conversions — interactions a user had prior to conversion. 

    Last Non-Direct attribution model model excludes direct traffic and assigns 100% credit for a conversion to the last channel a user interacted with before converting. For instance, a social media post will receive 100% of credit if a shopper buys a product three days later. 

    This model is more telling about the other channels, involved in the sales process. Yet, you’re seeing only one step backwards, which may not be sufficient for companies with longer sales cycles.

    Linear attribution model distributes an equal credit for a conversion between all tracked touchpoints.

    For instance, with a four touchpoint conversion (e.g., an organic visit, then a direct visit, then a social visit, then a visit and conversion from an ad campaign) each touchpoint would receive 25% credit for that single conversion.

    This is the simplest multi-channel attribution modelling technique many tools support. The nuance is that linear models don’t reflect the true impact of various events. After all, a paid ad that introduced your brand to the shopper and a time-sensitive discount code at the checkout page probably did more than the blog content a shopper browsed in between. 

    Position Based attribution model allocates a 40% credit to the first and the last touchpoints and then spreads the remaining 20% across the touchpoints between the first and last. 

    This attribution model comes in handy for optimising conversions across the top and the bottom of the funnel. But it doesn’t provide much insight into the middle, which can skew your decision-making. For instance, you may overlook cases when a shopper landed via a social media post, then was re-engaged via email, and proceeded to checkout after an organic visit. Without email marketing, that sale may not have happened.

    Time decay attribution model adjusts the credit, based on the timing of the interactions. Touchpoints that preceded the conversion get the highest score, while the first ones get less weight (e.g., 5%-5%-10%-15%-25%-30%).

    This multi-channel attribution model works great for tracking the bottom of the funnel, but it underestimates the impact of brand awareness campaigns or assisted conversions at mid-stage. 

    Why Use Multi-Touch Attribution Modelling

    Multi-touch attribution provides you with the full picture of your funnel. With accurate data across all touchpoints, you can employ targeted conversion rate optimisation (CRO) strategies to maximise the impact of each campaign. 

    Most marketers and analysts prefer using multi-touch attribution modelling — and for some good reasons.

    Issues multi-touch attribution solves 

    • Funnel visibility. Understand which tactics play an important role at the top, middle and bottom of your funnel, instead of second-guessing what’s working or not. 
    • Budget allocations. Spend money on channels and tactics that bring a positive return on investment (ROI). 
    • Assisted conversions. Learn how different elements and touchpoints cumulatively contribute to the ultimate goal — a conversion event — to optimise accordingly. 
    • Channel segmentation. Determine which assets drive the most qualified and engaged leads to replicate them at scale.
    • Campaign benchmarking. Compare how different marketing activities from affiliate marketing to social media perform against the same metrics.

    How To Get Started With Multi-Touch Attribution 

    To make multi-touch attribution part of your analytics setup, follow the next steps :

    1. Define Your Marketing Objectives 

    Multi-touch attribution helps you better understand what led people to convert on your site. But to capture that, you need to first map the standard purchase journeys, which include a series of touchpoints — instances, when a prospect forms an opinion about your business.

    Touchpoints include :

    • On-site interactions (e.g., reading a blog post, browsing product pages, using an on-site calculator, etc.)
    • Off-site interactions (e.g., reading a review, clicking a social media link, interacting with an ad, etc.)

    Combined these interactions make up your sales funnel — a designated path you’ve set up to lead people toward the desired action (aka a conversion). 

    Depending on your business model, you can count any of the following as a conversion :

    • Purchase 
    • Account registration 
    • Free trial request 
    • Contact form submission 
    • Online reservation 
    • Demo call request 
    • Newsletter subscription

    So your first task is to create a set of conversion objectives for your business and add them as Goals or Conversions in your web analytics solution. Then brainstorm how various touchpoints contribute to these objectives. 

    Web analytics tools with multi-channel attribution, like Matomo, allow you to obtain an extra dimension of data on touchpoints via Tracked Events. Using Event Tracking, you can analyse how many people started doing a desired action (e.g., typing details into the form) but never completed the task. This way you can quickly identify “leaking” touchpoints in your funnel and fix them. 

    2. Select an Attribution Model 

    Multi-attribution models have inherent tradeoffs. Linear attribution model doesn’t always represent the role and importance of each channel. Position-based attribution model emphasises the role of the last and first channel while diminishing the importance of assisted conversions. Time-decay model, on the contrary, downplays the role awareness-related campaigns played.

    To select the right attribution model for your business consider your objectives. Is it more important for you to understand your best top of funnel channels to optimise customer acquisition costs (CAC) ? Or would you rather maximise your on-site conversion rates ? 

    Your industry and the average cycle length should also guide your choice. Position-based models can work best for eCommerce and SaaS businesses where both CAC and on-site conversion rates play an important role. Manufacturing companies or educational services providers, on the contrary, will benefit more from a time-decay model as it better represents the lengthy sales cycles. 

    3. Collect and Organise Data From All Touchpoints 

    Multi-touch attribution models are based on available funnel data. So to get started, you will need to determine which data sources you have and how to best leverage them for attribution modelling. 

    Types of data you should collect : 

    • General web analytics data : Insights on visitors’ on-site actions — visited pages, clicked links, form submissions and more.
    • Goals (Conversions) : Reports on successful conversions across different types of assets. 
    • Behavioural user data : Some tools also offer advanced features such as heatmaps, session recording and A/B tests. These too provide ample data into user behaviours, which you can use to map and optimise various touchpoints.

    You can also implement extra tracking, for instance for contact form submissions, live chat contacts or email marketing campaigns to identify repeat users in your system. Just remember to stay on the good side of data protection laws and respect your visitors’ privacy. 

    Separately, you can obtain top-of-the-funnel data by analysing referral traffic sources (channel, campaign type, used keyword, etc). A Tag Manager comes in handy as it allows you to zoom in on particular assets (e.g., a newsletter, an affiliate, a social campaign, etc). 

    Combined, these data points can be parsed by an app, supporting multi-touch attribution (or a custom algorithm) and reported back to you as specific findings. 

    Sounds easy, right ? Well, the devil is in the details. Getting ample, accurate data for multi-touch attribution modelling isn’t easy. 

    Marketing analytics has an accuracy problem, mainly for two reasons :

    • Cookie consent banner rejection 
    • Data sampling application

    Please note that we are not able to provide legal advice, so it’s important that you consult with your own DPO to ensure compliance with all relevant laws and regulations.

    If you’re collecting web analytics in the EU, you know that showing a cookie consent banner is a GDPR must-do. But many consumers don’t often rush to accept cookie consent banners. The average consent rate for cookies in 2021 stood at 54% in Italy, 45% in France, and 44% in Germany. The consent rates are likely lower in 2023, as Google was forced to roll out a “reject all” button for cookie tracking in Europe, while privacy organisations lodge complaints against individual businesses for deceptive banners. 

    For marketers, cookie rejection means substantial gaps in analytics data. The good news is that you can fill in those gaps by using a privacy-centred web analytics tool like Matomo. 

    Matomo takes extra safeguards to protect user privacy and supports fully cookieless tracking. Because of that, Matomo is legally exempt from tracking consent in France. Plus, you can configure to use our analytics tool without consent banners in other markets outside of Germany and the UK. This way you get to retain the data you need for audience modelling without breaching any privacy regulations. 

    Data sampling application partially stems from the above. When a web analytics or multi-channel attribution tool cannot secure first-hand data, the “guessing game” begins. Google Analytics, as well as other tools, often rely on synthetic AI-generated data to fill in the reporting gaps. Respectively, your multi-attribution model doesn’t depict the real state of affairs. Instead, it shows AI-produced guesstimates of what transpired whenever not enough real-world evidence is available.

    4. Evaluate and Select an Attribution Tool 

    Google Analytics (GA) offers several multi-touch attribution models for free (linear, time-decay and position-based). The disadvantage of GA multi-touch attribution is its lower accuracy due to cookie rejection and data sampling application.

    At the same time, you cannot create custom credit allocations for the proposed models, unless you have the paid version of GA, Google Analytics 360. This version of GA comes with a custom Attribution Modeling Tool (AMT). The price tag, however, starts at USD $50,000 per year. 

    Matomo Cloud offers multi-channel conversion attribution as a feature and it is available as a plug-in on the marketplace for Matomo On-Premise. We support linear, position-based, first-interaction, last-interaction, last non-direct and time-decay modelling, based fully on first-hand data. You also get more precise insights because cookie consent isn’t an issue with us. 

    Most multi-channel attribution tools, like Google Analytics and Matomo, provide out-of-the-box multi-touch attribution models. But other tools, like Matomo On-Premise, also provide full access to raw data so you can develop your own multi-touch attribution models and do custom attribution analysis. The ability to create custom attribution analysis is particularly beneficial for data analysts or organisations with complex and unique buyer journeys. 

    Conclusion

    Ultimately, multi-channel attribution gives marketers greater visibility into the customer journey. By analysing multiple touchpoints, you can establish how various marketing efforts contribute to conversions. Then use this information to inform your promotional strategy, budget allocations and CRO efforts. 

    The key to benefiting the most from multi-touch attribution is accurate data. If your analytics solution isn’t telling you the full story, your multi-touch model won’t either. 

    Collect accurate visitor data for multi-touch attribution modelling with Matomo. Start your free 21-day trial now