Recherche avancée

Médias (1)

Mot : - Tags -/net art

Autres articles (72)

  • 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

  • Le profil des utilisateurs

    12 avril 2011, par

    Chaque utilisateur dispose d’une page de profil lui permettant de modifier ses informations personnelle. Dans le menu de haut de page par défaut, un élément de menu est automatiquement créé à l’initialisation de MediaSPIP, visible uniquement si le visiteur est identifié sur le site.
    L’utilisateur a accès à la modification de profil depuis sa page auteur, un lien dans la navigation "Modifier votre profil" est (...)

  • Configurer la prise en compte des langues

    15 novembre 2010, par

    Accéder à la configuration et ajouter des langues prises en compte
    Afin de configurer la prise en compte de nouvelles langues, il est nécessaire de se rendre dans la partie "Administrer" du site.
    De là, dans le menu de navigation, vous pouvez accéder à une partie "Gestion des langues" permettant d’activer la prise en compte de nouvelles langues.
    Chaque nouvelle langue ajoutée reste désactivable tant qu’aucun objet n’est créé dans cette langue. Dans ce cas, elle devient grisée dans la configuration et (...)

Sur d’autres sites (7623)

  • Why does every encoded frame's size increase after I had use to set one frame to be key in intel qsv of ffmpeg

    22 avril 2021, par TONY

    I used intel's qsv to encode h264 video in ffmpeg. My av codec context settings is like as below :

    


     m_ctx->width = m_width;
    m_ctx->height = m_height;
    m_ctx->time_base = { 1, (int)fps };
    m_ctx->qmin = 10;
    m_ctx->qmax = 35;
    m_ctx->gop_size = 3000;
    m_ctx->max_b_frames = 0;
    m_ctx->has_b_frames = false;
    m_ctx->refs = 2;
    m_ctx->slices = 0;
    m_ctx->codec_id = m_encoder->id;
    m_ctx->codec_type = AVMEDIA_TYPE_VIDEO;
    m_ctx->pix_fmt = m_h264InputFormat;
    m_ctx->compression_level = 4;
    m_ctx->flags &= ~AV_CODEC_FLAG_CLOSED_GOP;
    AVDictionary *param = nullptr;
    av_dict_set(&param, "idr_interval", "0", 0);
    av_dict_set(&param, "async_depth", "1", 0);
    av_dict_set(&param, "forced_idr", "1", 0);


    


    and in the encoding, I set the AVFrame to be AV_PICTURE_TYPE_I when key frame is needed :

    


      if(key_frame){
        encodeFrame->pict_type = AV_PICTURE_TYPE_I;
    }else{
        encodeFrame->pict_type = AV_PICTURE_TYPE_NONE;
    }
    avcodec_send_frame(m_ctx, encodeFrame);
    avcodec_receive_packet(m_ctx, m_packet);
   std::cerr<<"packet size is "<size<<",is key frame "<code>

    


    The strange phenomenon is that if I had set one frame to AV_PICTURE_TYPE_I, then every encoded frame's size after the key frame would increase. If I change the h264 encoder to x264, then it's ok.

    


    The packet size is as below before I call "encodeFrame->pict_type = AV_PICTURE_TYPE_I" :

    


    packet size is 26839
packet size is 2766
packet size is 2794
packet size is 2193
packet size is 1820
packet size is 2542
packet size is 2024
packet size is 1692
packet size is 2095
packet size is 2550
packet size is 1685
packet size is 1800
packet size is 2276
packet size is 1813
packet size is 2206
packet size is 2745
packet size is 2334
packet size is 2623
packet size is 2055


    


    If I call "encodeFrame->pict_type = AV_PICTURE_TYPE_I", then the packet size is as below :

    


    packet size is 23720,is key frame 1
packet size is 23771,is key frame 0
packet size is 23738,is key frame 0
packet size is 23752,is key frame 0
packet size is 23771,is key frame 0
packet size is 23763,is key frame 0
packet size is 23715,is key frame 0
packet size is 23686,is key frame 0
packet size is 23829,is key frame 0
packet size is 23774,is key frame 0
packet size is 23850,is key frame 0


    


  • RTMP server with OpenCV (python)

    12 février 2024, par Overnout

    I'm trying to process an RTMP stream in Python, using OpenCV2 but I'm not able to get OpenCV to capture it (i.e. act as RTMP server).

    


    I can run FFmpeg/FFplay from the command line and receive the stream successfully.
What could cause OpenCV to fail opening the stream in listening mode ?

    


    Here is my code :

    


    import cv2

cap = cv2.VideoCapture("rtmp://0.0.0.0:8000/live", cv2.CAP_FFMPEG)

if not cap.isOpened():
    print("Cannot open video source")
    exit()


    


    And the output :

    


    [tcp @ 00000192c490d640] Connection to tcp://0.0.0.0:8000 failed: Error number -138 occurred
[rtmp @ 00000192c490d580] Cannot open connection tcp://0.0.0.0:8000 
Cannot open video source


    


    edit2 : Output with debug logging turned on :

    


    output of the python script with debug logging on:
[DEBUG:0@0.017] global videoio_registry.cpp:218 cv::`anonymous-namespace'::VideoBackendRegistry::VideoBackendRegistry VIDEOIO: Builtin backends(9): FFMPEG(1000); GSTREAMER(990); INTEL_MFX(980); MSMF(970); DSHOW(960); CV_IMAGES(950); CV_MJPEG(940); UEYE(930); OBSENSOR(920)
[DEBUG:0@0.026] global videoio_registry.cpp:242 cv::`anonymous-namespace'::VideoBackendRegistry::VideoBackendRegistry VIDEOIO: Available backends(9): FFMPEG(1000); GSTREAMER(990); INTEL_MFX(980); MSMF(970); DSHOW(960); CV_IMAGES(950); CV_MJPEG(940); UEYE(930); OBSENSOR(920)
[ INFO:0@0.031] global videoio_registry.cpp:244 cv::`anonymous-namespace'::VideoBackendRegistry::VideoBackendRegistry VIDEOIO: Enabled backends(9, sorted by priority): FFMPEG(1000); GSTREAMER(990); INTEL_MFX(980); MSMF(970); DSHOW(960); CV_IMAGES(950); CV_MJPEG(940); UEYE(930); OBSENSOR(920)
[ WARN:0@0.037] global cap.cpp:132 cv::VideoCapture::open VIDEOIO(FFMPEG): trying capture filename='rtmp://192.168.254.101:8000/live' ...
[ INFO:0@0.040] global backend_plugin.cpp:383 cv::impl::getPluginCandidates Found 2 plugin(s) for FFMPEG
[ INFO:0@0.043] global plugin_loader.impl.hpp:67 cv::plugin::impl::DynamicLib::libraryLoad load C:\Users\me\src\opencv\.venv\Lib\site-packages\cv2\opencv_videoio_ffmpeg490_64.dll => OK
[ INFO:0@0.047] global backend_plugin.cpp:50 cv::impl::PluginBackend::initCaptureAPI Found entry: 'opencv_videoio_capture_plugin_init_v1'
[ INFO:0@0.049] global backend_plugin.cpp:169 cv::impl::PluginBackend::checkCompatibility Video I/O: initialized 'FFmpeg OpenCV Video I/O Capture plugin': built with OpenCV 4.9 (ABI/API = 1/1), current OpenCV version is '4.9.0' (ABI/API = 1/1)
[ INFO:0@0.055] global backend_plugin.cpp:69 cv::impl::PluginBackend::initCaptureAPI Video I/O: plugin is ready to use 'FFmpeg OpenCV Video I/O Capture plugin'
[ INFO:0@0.058] global backend_plugin.cpp:84 cv::impl::PluginBackend::initWriterAPI Found entry: 'opencv_videoio_writer_plugin_init_v1'
[ INFO:0@0.061] global backend_plugin.cpp:169 cv::impl::PluginBackend::checkCompatibility Video I/O: initialized 'FFmpeg OpenCV Video I/O Writer plugin': built with OpenCV 4.9 (ABI/API = 1/1), current OpenCV version is '4.9.0' (ABI/API = 1/1)
[ INFO:0@0.065] global backend_plugin.cpp:103 cv::impl::PluginBackend::initWriterAPI Video I/O: plugin is ready to use 'FFmpeg OpenCV Video I/O Writer plugin'
[tcp @ 00000266b2f0d0c0] Connection to tcp://192.168.254.101:8000 failed: Error number -138 occurred
[rtmp @ 00000266b2f0cfc0] Cannot open connection tcp://192.168.254.101:8000
[ WARN:0@5.630] global cap.cpp:155 cv::VideoCapture::open VIDEOIO(FFMPEG): can't create capture
[DEBUG:0@5.632] global cap.cpp:225 cv::VideoCapture::open VIDEOIO: choosen backend does not work or wrong. Please make sure that your computer support chosen backend and OpenCV built with right flags.
Cannot open video source
[ INFO:1@5.661] global plugin_loader.impl.hpp:74 cv::plugin::impl::DynamicLib::libraryRelease unload C:\Users\me\src\opencv\.venv\Lib\site-packages\cv2\opencv_videoio_ffmpeg490_64.dll


    


    Here is the output of cv2.getBuildInformation()

    


    General configuration for OpenCV 4.9.0 =====================================
  Version control:               4.9.0

  Platform:
    Timestamp:                   2023-12-31T11:21:12Z
    Host:                        Windows 10.0.17763 AMD64
    CMake:                       3.24.2
    CMake generator:             Visual Studio 14 2015
    CMake build tool:            MSBuild.exe
    MSVC:                        1900
    Configuration:               Debug Release

  CPU/HW features:
    Baseline:                    SSE SSE2 SSE3
      requested:                 SSE3
    Dispatched code generation:  SSE4_1 SSE4_2 FP16 AVX AVX2
      requested:                 SSE4_1 SSE4_2 AVX FP16 AVX2 AVX512_SKX
      SSE4_1 (16 files):         + SSSE3 SSE4_1
      SSE4_2 (1 files):          + SSSE3 SSE4_1 POPCNT SSE4_2
      FP16 (0 files):            + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 AVX
      AVX (8 files):             + SSSE3 SSE4_1 POPCNT SSE4_2 AVX
      AVX2 (36 files):           + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2

  C/C++:
    Built as dynamic libs?:      NO
    C++ standard:                11
    C++ Compiler:                C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe  (ver 19.0.24247.2)
    C++ flags (Release):         /DWIN32 /D_WINDOWS /W4 /GR  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi  /fp:precise     /EHa /wd4127 /wd4251 /wd4324 /wd4275 /wd4512 /wd4589 /wd4819 /MP  /O2 /Ob2 /DNDEBUG 
    C++ flags (Debug):           /DWIN32 /D_WINDOWS /W4 /GR  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi  /fp:precise     /EHa /wd4127 /wd4251 /wd4324 /wd4275 /wd4512 /wd4589 /wd4819 /MP  /Zi /Ob0 /Od /RTC1 
    C Compiler:                  C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe
    C flags (Release):           /DWIN32 /D_WINDOWS /W3  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi  /fp:precise     /MP   /O2 /Ob2 /DNDEBUG 
    C flags (Debug):             /DWIN32 /D_WINDOWS /W3  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi  /fp:precise     /MP /Zi /Ob0 /Od /RTC1 
    Linker flags (Release):      /machine:x64  /NODEFAULTLIB:atlthunk.lib /INCREMENTAL:NO  /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:libcpmtd.lib /NODEFAULTLIB:msvcrtd.lib
    Linker flags (Debug):        /machine:x64  /NODEFAULTLIB:atlthunk.lib /debug /INCREMENTAL  /NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libcpmt.lib /NODEFAULTLIB:msvcrt.lib
    ccache:                      NO
    Precompiled headers:         YES
    Extra dependencies:          wsock32 comctl32 gdi32 ole32 setupapi ws2_32
    3rdparty dependencies:       libprotobuf ade ittnotify libjpeg-turbo libwebp libpng libtiff libopenjp2 IlmImf zlib ippiw ippicv

  OpenCV modules:
    To be built:                 calib3d core dnn features2d flann gapi highgui imgcodecs imgproc ml objdetect photo python3 stitching video videoio
    Disabled:                    java world
    Disabled by dependency:      -
    Unavailable:                 python2 ts
    Applications:                -
    Documentation:               NO
    Non-free algorithms:         NO

  Windows RT support:            NO

  GUI:                           WIN32UI
    Win32 UI:                    YES
    VTK support:                 NO

  Media I/O: 
    ZLib:                        build (ver 1.3)
    JPEG:                        build-libjpeg-turbo (ver 2.1.3-62)
      SIMD Support Request:      YES
      SIMD Support:              NO
    WEBP:                        build (ver encoder: 0x020f)
    PNG:                         build (ver 1.6.37)
    TIFF:                        build (ver 42 - 4.2.0)
    JPEG 2000:                   build (ver 2.5.0)
    OpenEXR:                     build (ver 2.3.0)
    HDR:                         YES
    SUNRASTER:                   YES
    PXM:                         YES
    PFM:                         YES

  Video I/O:
    DC1394:                      NO
    FFMPEG:                      YES (prebuilt binaries)
      avcodec:                   YES (58.134.100)
      avformat:                  YES (58.76.100)
      avutil:                    YES (56.70.100)
      swscale:                   YES (5.9.100)
      avresample:                YES (4.0.0)
    GStreamer:                   NO
    DirectShow:                  YES
    Media Foundation:            YES
      DXVA:                      YES

  Parallel framework:            Concurrency

  Trace:                         YES (with Intel ITT)

  Other third-party libraries:
    Intel IPP:                   2021.11.0 [2021.11.0]
           at:                   D:/a/opencv-python/opencv-python/_skbuild/win-amd64-3.7/cmake-build/3rdparty/ippicv/ippicv_win/icv
    Intel IPP IW:                sources (2021.11.0)
              at:                D:/a/opencv-python/opencv-python/_skbuild/win-amd64-3.7/cmake-build/3rdparty/ippicv/ippicv_win/iw
    Lapack:                      NO
    Eigen:                       NO
    Custom HAL:                  NO
    Protobuf:                    build (3.19.1)
    Flatbuffers:                 builtin/3rdparty (23.5.9)

  OpenCL:                        YES (NVD3D11)
    Include path:                D:/a/opencv-python/opencv-python/opencv/3rdparty/include/opencl/1.2
    Link libraries:              Dynamic load

  Python 3:
    Interpreter:                 C:/hostedtoolcache/windows/Python/3.7.9/x64/python.exe (ver 3.7.9)
    Libraries:                   C:/hostedtoolcache/windows/Python/3.7.9/x64/libs/python37.lib (ver 3.7.9)
    numpy:                       C:/hostedtoolcache/windows/Python/3.7.9/x64/lib/site-packages/numpy/core/include (ver 1.17.0)
    install path:                python/cv2/python-3

  Python (for build):            C:\hostedtoolcache\windows\Python\3.7.9\x64\python.exe

  Java:                          
    ant:                         NO
    Java:                        YES (ver 1.8.0.392)
    JNI:                         C:/hostedtoolcache/windows/Java_Temurin-Hotspot_jdk/8.0.392-8/x64/include C:/hostedtoolcache/windows/Java_Temurin-Hotspot_jdk/8.0.392-8/x64/include/win32 C:/hostedtoolcache/windows/Java_Temurin-Hotspot_jdk/8.0.392-8/x64/include
    Java wrappers:               NO
    Java tests:                  NO

  Install to:                    D:/a/opencv-python/opencv-python/_skbuild/win-amd64-3.7/cmake-install
-----------------------------------------------------------------


    


    edit : Receiving the stream with ffplay from command line :

    


    >ffplay.exe -i "rtmp://0.0.0.0:8000/live"  -listen 1 -f flv
ffplay version 2024-02-04-git-7375a6ca7b-full_build-www.gyan.dev Copyright (c) 2003-2024 the FFmpeg developers
  built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-static --pkg-config=pkgconf --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-dxva2 --enable-d3d11va --enable-libvpl --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
  libavutil      58. 36.101 / 58. 36.101
  libavcodec     60. 38.100 / 60. 38.100
  libavformat    60. 20.100 / 60. 20.100
  libavdevice    60.  4.100 / 60.  4.100
  libavfilter     9. 17.100 /  9. 17.100
  libswscale      7.  6.100 /  7.  6.100
  libswresample   4. 13.100 /  4. 13.100
  libpostproc    57.  4.100 / 57.  4.100
[rtmp @ 0000018a564ed340] Unexpected stream , expecting livef=0/0
    Last message repeated 1 times
Input #0, flv, from 'rtmp://0.0.0.0:8000/live':KB sq=    0B f=0/0
  Metadata:
    fileSize        : 0
    audiochannels   : 2
    2.1             : false
    3.1             : false
    4.0             : false
    4.1             : false
    5.1             : false
    7.1             : false
    encoder         : obs-output module (libobs version 30.0.2)
  Duration: 00:00:00.00, start: 0.000000, bitrate: N/A
  Stream #0:0: Audio: aac (LC), 48000 Hz, stereo, fltp, 163 kb/s
  Stream #0:1: Video: h264 (Constrained Baseline), yuv420p(tv, bt709, progressive), 1280x720 [SAR 1:1 DAR 16:9], 2560 kb/s, 30 fps, 30 tbr, 1k tbn
   7.54 A-V: -0.024 fd=  18 aq=   24KB vq=  498KB sq=    0B f=0/0


    


  • Attribution Tracking (What It Is and How It Works)

    23 février 2024, par Erin

    Facebook, TikTok, Google, email, display ads — which one is best to grow your business ? There’s one proven way to figure it out : attribution tracking.

    Marketing attribution allows you to see which channels are producing the best results for your marketing campaigns.

    In this guide, we’ll show you what attribution tracking is, why it’s important and how you can leverage it to accelerate your marketing success.

    What is attribution tracking ?

    By 2026, the global digital marketing industry is projected to reach $786.2 billion.

    With nearly three-quarters of a trillion U.S. dollars being poured into digital marketing every year, there’s no doubt it dominates traditional marketing.

    The question is, though, how do you know which digital channels to use ?

    By measuring your marketing efforts with attribution tracking.

    What is attribution tracking?

    So, what is attribution tracking ?

    Attribution tracking is where you use software to keep track of different channels and campaign efforts to determine which channel you should attribute conversion to.

    In other words, you can (and should) use attribution tracking to analyse which channels are pushing the needle and which ones aren’t.

    By tracking your marketing efforts, you’ll be able to accurately measure the scale of impact each of your channels, campaigns and touchpoints have on a customer’s purchasing decision.

    If you don’t track your attribution, you’ll end up blindly pouring time, money, and effort into activities that may or may not be helpful.

    Attribution tracking simply gives you insight into what you’re doing right as a marketer — and what you’re doing wrong.

    By understanding which efforts and channels are driving conversions and revenue, you’ll be able to properly allocate resources toward winning channels to double down on growth.

    Matomo lets you track attribution across various channels. Whether you’re looking to track your conversions through organic, referral websites, campaigns, direct traffic, or social media, you can see all your conversions in one place.

    Try Matomo for Free

    Get the web insights you need, without compromising data accuracy.

    No credit card required

    Why attribution tracking is important

    Attribution tracking is crucial to succeed with your marketing since it shows you your most valuable channels.

    It takes the guesswork out of your efforts.

    You don’t need to scratch your head wondering what made your campaigns a success (or a failure).

    While most tools show you last click attribution by default, using attribution tracking, or marketing attribution, you can track revenue and conversions for each touchpoint.

    For example, a Facebook ad might have no led to a conversion immediately. But, maybe the visitor returned to your website two weeks later through your email campaign. Attribution tracking will give credit over longer periods of time to see the bigger picture of how your marketing channels are impacting your overall performance.

    Here are five reasons you need to be using attribution tracking in your business today :

    Why attribution tracking is important.

    1. Measure channel performance

    The most obvious way attribution tracking helps is to show you how well each channel performs.

    When you’re using a variety of marketing channels to reach your audience, you have to know what’s actually doing well (and what’s not).

    This means having clarity on the performance of your :

    • Emails
    • Google Ads
    • Facebook Ads
    • Social media marketing
    • Search engine optimisation (SEO)
    • And more

    Attribution tracking allows you to measure each channel’s ROI and identify how much each channel impacted your campaigns.

    It gives you a more accurate picture of the performance of each channel and each campaign.

    With it, you can easily break down your channels by how much they drove sales, conversions, signups, or other actions.

    With this information, you can then understand where to further allocate your resources to fuel growth.

    2. See campaign performance over longer periods of time

    When you start tracking your channel performance with attribution tracking, you’ll gain new insights into how well your channels and campaigns are performing.

    The best part — you don’t just get to see recent performance.

    You get to track your campaign results over weeks or months.

    For example, if someone found you through Google by searching a question that your blog had an answer to, but they didn’t convert, your traditional tracking strategy would discount SEO.

    But, if that same person clicked a TikTok ad you placed three weeks later, came back, and converted — SEO would receive some attribution on the conversion.

    Using an attribution tracking tool like Matomo can help paint a holistic view of how your marketing is really doing from channel to channel over the long run.

    Try Matomo for Free

    Get the web insights you need, without compromising data accuracy.

    No credit card required

    3. Increase revenue

    Attribution tracking has one incredible benefit for marketers : optimised marketing spend.

    When you begin looking at how well your campaigns and your channels are performing, you’ll start to see what’s working.

    Attribution tracking gives you clarity into the performance of campaigns since it’s not just looking at the first time someone clicks through to your site. It’s looking at every touchpoint a customer made along the way to a conversion.

    By understanding what channels are most effective, you can pour more resources like time, money and labour into those effective channels.

    By doubling down on the winning channels, you’ll be able to grow like never before.

    Rather than trying to “diversify” your marketing efforts, lean into what’s working.

    This is one of the key strategies of an effective marketer to maximise your campaign returns and experience long-term success in terms of revenue.

    4. Improve profit margins

    The final benefit to attribution tracking is simple : you’ll earn more profit.

    Think about it this way : let’s say you’re putting 50% of your marketing spend into Facebook ads and 50% of your spend into email marketing.

    You do this for one year, allocating $500,000 to Facebook and $500,000 to email.

    Then, you start tracking attribution.

    You find that your Facebook ads are generating $900,000 in revenue. 

    That’s a 1,800% return on your investment.

    Not bad, right ?

    Well, after tracking your attribution, you see what your email revenue is.

    In the past year, you generated $1.7 million in email revenue.

    That’s a 3,400% return on your investment (close to the average return of email marketing across all industries).

    In this scenario, you can see that you’re getting nearly twice as much of a return on your marketing spend with email.

    So, the following year, you decide to go for a 75/25 split.

    Instead of putting $500,000 into both email and Facebook ads and email, you put $750,000 into email and $250,000 into Facebook ads.

    You’re still diversifying, but you’re doubling down on what’s working best.

    The result is that you’ll be able to get more revenue by investing the same amount of money, leaving you with higher profit margins.

    Different types of marketing attribution tracking

    There are several types of attribution tracking models in marketing.

    Depending on your goals, your business and your preferred method, there are a variety of types of attribution tracking you can use.

    Here are the six main types of attribution tracking :

    Pros and cons of different marketing attribution models.

    1. Last interaction

    Last interaction attribution model is also called “last touch.”

    It’s one of the most common types of attribution. The way it works is to give 100% of the credit to the final channel a customer interacted with before they converted into a customer.

    This could be through a paid ad, direct traffic, or organic search.

    One potential drawback of last interaction is that it doesn’t factor in other channels that may have assisted in the conversion. However, this model can work really well depending on the business.

    2. First interaction

    This is the opposite of the previous model.

    First interaction, or “first touch,” is all about the first interaction a customer has with your brand.

    It gives 100% of the credit to the channel (i.e. a link clicked from a social media post). And it doesn’t report or attribute anything else to another channel that someone may have interacted with in your marketing mix.

    For example, it won’t attribute the conversion or revenue if the visitor then clicked on an Instagram ad and converted. All credit would be given to the first touch which in this case would be the social media post. 

    The first interaction is a good model to use at the top of your funnel to help establish which channels are bringing leads in from outside your audience.

    3. Last non-direct

    Another model is called the last non-direct attribution model. 

    This model seeks to exclude direct traffic and assigns 100% credit for a conversion to the final channel a customer interacted with before becoming a customer, excluding clicks from direct traffic.

    For instance, if someone first comes to your website from an emai campaignl, and then, a week later, directly visits and buys a product, the email campaign gets all the credit for the sale.

    This attribution model tells a bit more about the whole sales process, shedding some more light on what other channels may have influenced the purchase decision.

    4. Linear

    Another common attribution model is linear.

    This model distributes completely equal credit across every single touchpoint (that’s tracked). 

    Imagine someone comes to your website in different ways : first, they find it through a Google search, then they click a link in an email from your campaign the next day, followed by visiting from a Facebook post a few days later, and finally, a week later, they come from a TikTok ad. 

    Here’s how the attribution is divided among these sources :

    • 25% Organic
    • 25% Email
    • 25% Facebook
    • 25% TikTok ad

    This attirubtion model provides a balanced perspective on the contribution of various sources to a user’s journey on your website.

    5. Position-based

    Position-based attribution is when you give 40% credit to both the first and last touchpoints and 20% credit is spread between the touchpoints in between.

    This model is preferred if you want to identify the initial touchpoint that kickstarted a conversion journey and the final touchpoint that sealed the deal.

    The downside is that you don’t gain much insight into the middle of the customer journey, which can make it hard to make effective decisions.

    For example, someone may have been interacting with your email newsletter for seven weeks, which allowed them to be nurtured and build a relationship with you.

    But that relationship and trust-building effort will be overlooked by the blog post that brought them in and the social media ad that eventually converted them.

    6. Time decay

    The final attribution model is called time decay attribution.

    This is all about giving credit based on the timing of the interactions someone had with your brand.

    For example, the touchpoints that just preceded the sale get the highest score, while the first touchpoints get the lowest score.

    For example, let’s use that scenario from above with the linear model :

    • 25% SEO
    • 25% Email
    • 25% Facebook ad
    • 25% Organic TikTok

    But, instead of splitting credit by 25% to each channel, you weigh the ones closer to the sale with more credit.

    Instead, time decay may look at these same channels like this :

    • 5% SEO (6 weeks ago)
    • 20% Email (3 weeks ago)
    • 30% Facebook ad (1 week ago)
    • 45% Organic TikTok (2 days ago)

    One downside is that it underestimates brand awareness campaigns. And, if you have longer sales cycles, it also isn’t the most accurate, as mid-stage nurturing and relationship building are underlooked. 

    Leverage Matomo : A marketing attribution tool

    Attribution tracking is a crucial part of leading an effective marketing strategy.

    But it’s impossible to do this without the right tools.

    A marketing attribution tool can give you insights into your best-performing channels automatically. 

    What is a marketing attribution tool?

    One of the best marketing attribution tools available is Matomo, a web analytics tool that helps you understand what’s going on with your website and different channels in one easy-to-use dashboard.

    With Matomo, you get marketing attribution as a plug-in or within Matomo On-Premise or for free in Matomo Cloud.

    The best part is it’s all done with crystal-clear data. Matomo gives you 100% accurate data since it doesn’t use data sampling on any plans like Google Analytics.

    To start tracking attribution today, try Matomo’s 21-day free trial. No credit card required.