Recherche avancée

Médias (0)

Mot : - Tags -/diogene

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

Autres articles (53)

  • Participer à sa traduction

    10 avril 2011

    Vous pouvez nous aider à améliorer les locutions utilisées dans le logiciel ou à traduire celui-ci dans n’importe qu’elle nouvelle langue permettant sa diffusion à de nouvelles communautés linguistiques.
    Pour ce faire, on utilise l’interface de traduction de SPIP où l’ensemble des modules de langue de MediaSPIP sont à disposition. ll vous suffit de vous inscrire sur la liste de discussion des traducteurs pour demander plus d’informations.
    Actuellement MediaSPIP n’est disponible qu’en français et (...)

  • Supporting all media types

    13 avril 2011, par

    Unlike most software and media-sharing platforms, MediaSPIP aims to manage as many different media types as possible. The following are just a few examples from an ever-expanding list of supported formats : images : png, gif, jpg, bmp and more audio : MP3, Ogg, Wav and more video : AVI, MP4, OGV, mpg, mov, wmv and more text, code and other data : OpenOffice, Microsoft Office (Word, PowerPoint, Excel), web (html, CSS), LaTeX, Google Earth and (...)

  • Les formats acceptés

    28 janvier 2010, par

    Les commandes suivantes permettent d’avoir des informations sur les formats et codecs gérés par l’installation local de ffmpeg :
    ffmpeg -codecs ffmpeg -formats
    Les format videos acceptés en entrée
    Cette liste est non exhaustive, elle met en exergue les principaux formats utilisés : h264 : H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 m4v : raw MPEG-4 video format flv : Flash Video (FLV) / Sorenson Spark / Sorenson H.263 Theora wmv :
    Les formats vidéos de sortie possibles
    Dans un premier temps on (...)

Sur d’autres sites (7963)

  • Using PyAV to encode mono audio to file, params match docs, but still causes Errno 22

    20 février 2023, par andrew8088

    While trying to use PyAV to encode live mono audio from a microphone to a compressed audio stream (using mp2 or flac as encoder), the program kept raising an exception ValueError: [Errno 22] Invalid argument.

    


    To remove the live microphone source as a cause of the problem, and to make the problematic code easier for others to run/test, I have removed the mic source and now just generate a pure tone as a sequence of input buffers.

    


    All attempts to figure out the missing or mismatched or incorrect argument have just resulted in seeing documentation and examples that are the same as my code.

    


    I would like to know from someone who has used PyAV successfully for mono audio what the correct method and parameters are for encoding mono frames into the mono stream.

    


    The package used is av 10.0.0 installed with
pip3 install av --no-binary av
so it uses my package-manager provided ffmpeg library, which is version 4.2.7.

    


    The problematic python code is :

    


    #!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Recreating an error 22 when encoding sound with PyAV.

Created on Sun Feb 19 08:10:29 2023
@author: andrewm
"""
import typing
import sys
import math
import fractions

import av
from av import AudioFrame

""" Ensure some PyAudio constants are still defined without changing 
    the PyAudio recording callback function and without depending 
    on PyAudio simply for reproducing the PyAV bug [Errno 22] thrown in 
    File "av/filter/context.pyx", line 89, in av.filter.context.FilterContext.push
"""
class PA_Stub():
    paContinue = True
    paComplete= False

pyaudio = PA_Stub()


"""Generate pure tone at given frequency with amplitude 0...1.0 at 
   sampling frewuency fs and beginning at phase offset 'phase'.
   Returns the new phase after the sinusoid has cycled over the 
   sampling window length.
"""
def generate_tone(
        freq:int, phase:float, amp:float, fs, samp_fmt, buffer:bytearray
) -> float:
    assert samp_fmt == "s16", "Only s16 supported atm"
    samp_size_bytes = 2
    n_samples = int(len(buffer)/samp_size_bytes)
    window = [int(0) for i in range(n_samples)]
    theta = phase
    phase_inc = 2*math.pi * freq / fs
    for i in range(n_samples):
        v = amp * math.sin(theta)
        theta += phase_inc
        s = int((2**15-1)*v)
        window[i] = s
    for sample_i in range(len(window)):
        byte_i = sample_i * samp_size_bytes
        enc = window[sample_i].to_bytes(
                2, byteorder=sys.byteorder, signed=True
        )
        buffer[byte_i] = enc[0]
        buffer[byte_i+1] = enc[1]
    return theta


channels = 1
fs = 44100  # Record at 44100 samples per second
fft_size_samps = 256
chunk_samps = fft_size_samps * 10  # Record in chunks that are multiples of fft windows.

# print(f"fft_size_samps={fft_size_samps}\nchunk_samps={chunk_samps}")

seconds = 3.0
out_filename = "testoutput.wav"

# Store data in chunks for 3 seconds
sample_limit = int(fs * seconds)
sample_len = 0
frames = []  # Initialize array to store frames

ffmpeg_codec_name = 'mp2'  # flac, mp3, or libvorbis make same error.

sample_size_bytes = 2
buffer = bytearray(int(chunk_samps*sample_size_bytes))
chunkperiod = chunk_samps / fs
total_chunks = int(math.ceil(seconds / chunkperiod))
phase = 0.0

### uncomment if you want to see the synthetic data being used as a mic input.
# with open("test.raw","wb") as raw_out:
#     for ci in range(total_chunks):
#         phase = generate_tone(2600, phase, 0.8, fs, "s16", buffer)
#         raw_out.write(buffer)
# print("finished gen test")
# sys.exit(0)
# #---- 

# Using mp2 or mkv as the container format gets the same error.
with av.open(out_filename+'.mp2', "w", format="mp2") as output_con:
    output_con.metadata["title"] = "My title"
    output_con.metadata["key"] = "value"
    channel_layout = "mono"
    sample_fmt = "s16p"

    ostream = output_con.add_stream(ffmpeg_codec_name, fs, layout=channel_layout)
    assert ostream is not None, "No stream!"
    cctx = ostream.codec_context
    cctx.sample_rate = fs
    cctx.time_base = fractions.Fraction(numerator=1,denominator=fs)
    cctx.format = sample_fmt
    cctx.channels = channels
    cctx.layout = channel_layout
    print(cctx, f"layout#{cctx.channel_layout}")
    
    # Define PyAudio-style callback for recording plus PyAV transcoding.
    def rec_callback(in_data, frame_count, time_info, status):
        global sample_len
        global ostream
        frames.append(in_data)
        nsamples = int(len(in_data) / (channels*sample_size_bytes))
        
        frame = AudioFrame(format=sample_fmt, layout=channel_layout, samples=nsamples)
        frame.sample_rate = fs
        frame.time_base = fractions.Fraction(numerator=1,denominator=fs)
        frame.pts = sample_len
        frame.planes[0].update(in_data)
        print(frame, len(in_data))
        
        for out_packet in ostream.encode(frame):
            output_con.mux(out_packet)
        for out_packet in ostream.encode(None):
            output_con.mux(out_packet)
        
        sample_len += nsamples
        retflag = pyaudio.paContinue if sample_lencode>

    


    If you uncomment the RAW output part you will find the generated data can be imported as PCM s16 Mono 44100Hz into Audacity and plays the expected tone, so the generated audio data does not seem to be the problem.

    


    The normal program console output up until the exception is :

    


    mp2 at 0x7f8e38202cf0> layout#4
Beginning
 5120
. 5120


    


    The stack trace is :

    


    Traceback (most recent call last):&#xA;&#xA;  File "Dev/multichan_recording/av_encode.py", line 147, in <module>&#xA;    ret_data, ret_flag = rec_callback(buffer, ci, {}, 1)&#xA;&#xA;  File "Dev/multichan_recording/av_encode.py", line 121, in rec_callback&#xA;    for out_packet in ostream.encode(frame):&#xA;&#xA;  File "av/stream.pyx", line 153, in av.stream.Stream.encode&#xA;&#xA;  File "av/codec/context.pyx", line 484, in av.codec.context.CodecContext.encode&#xA;&#xA;  File "av/audio/codeccontext.pyx", line 42, in av.audio.codeccontext.AudioCodecContext._prepare_frames_for_encode&#xA;&#xA;  File "av/audio/resampler.pyx", line 101, in av.audio.resampler.AudioResampler.resample&#xA;&#xA;  File "av/filter/graph.pyx", line 211, in av.filter.graph.Graph.push&#xA;&#xA;  File "av/filter/context.pyx", line 89, in av.filter.context.FilterContext.push&#xA;&#xA;  File "av/error.pyx", line 336, in av.error.err_check&#xA;&#xA;ValueError: [Errno 22] Invalid argument&#xA;&#xA;</module>

    &#xA;

    edit : It's interesting that the error happens on the 2nd AudioFrame, as apparently the first one was encoded okay, because they are given the same attribute values aside from the Presentation Time Stamp (pts), but leaving this out and letting PyAV/ffmpeg generate the PTS by itself does not fix the error, so an incorrect PTS does not seem the cause.

    &#xA;

    After a brief glance in av/filter/context.pyx the exception must come from a bad return value from res = lib.av_buffersrc_write_frame(self.ptr, frame.ptr)
    &#xA;Trying to dig into av_buffersrc_write_frame from the ffmpeg source it is not clear what could be causing this error. The only obvious one is a mismatch between channel layouts, but my code is setting the layout the same in the Stream and the Frame. That problem had been found by an old question pyav - cannot save stream as mono and their answer (that one parameter required is undocumented) is the only reason the code now has the layout='mono' argument when making the stream.

    &#xA;

    The program output shows layout #4 is being used, and from https://github.com/FFmpeg/FFmpeg/blob/release/4.2/libavutil/channel_layout.h you can see this is the value for symbol AV_CH_FRONT_CENTER which is the only channel in the MONO layout.

    &#xA;

    The mismatch is surely some other object property or an undocumented parameter requirement.

    &#xA;

    How do you encode mono audio to a compressed stream with PyAV ?

    &#xA;

  • VideoWriter Doesn't work using openCV, ubuntu, Qt

    25 janvier 2023, par underflow223

    My code :

    &#xA;

    cv::VideoWriter(&#xA;  strFile.toStdString(),&#xA;  cv::VideoWriter::fourcc(&#x27;m&#x27;,&#x27;p&#x27;,&#x27;4&#x27;,&#x27;v&#x27;),&#xA;  nfps,&#xA;  cv::Size(1920/nresize, 1080/nresize)&#xA;);&#xA;

    &#xA;

    Error message :

    &#xA;

    [mpeg4_v4l2m2m @ 0x7f50a43c50] arm_release_ver of this libmali is &#x27;g6p0-01eac0&#x27;, rk_so_ver is &#x27;7&#x27;.&#xA;Could not find a valid device&#xA;[mpeg4_v4l2m2m @ 0x7f50a43c50] can&#x27;t configure encoder&#xA;

    &#xA;

    If I use MJPG codec, it works fine thow.

    &#xA;

    This is OPENCV configure info :

    &#xA;

    -- General configuration for OpenCV 4.6.0 =====================================&#xA;--   Version control:               unknown&#xA;-- &#xA;--   Extra modules:&#xA;--     Location (extra):            /home/firefly/Downloads/opencv_contrib-4.6.0/modules&#xA;--     Version control (extra):     unknown&#xA;-- &#xA;--   Platform:&#xA;--     Timestamp:                   2023-01-19T02:11:26Z&#xA;--     Host:                        Linux 5.10.110 aarch64&#xA;--     CMake:                       3.16.3&#xA;--     CMake generator:             Unix Makefiles&#xA;--     CMake build tool:            /usr/bin/make&#xA;--     Configuration:               Release&#xA;-- &#xA;--   CPU/HW features:&#xA;--     Baseline:                    NEON FP16&#xA;-- &#xA;--   C/C&#x2B;&#x2B;:&#xA;--     Built as dynamic libs?:      YES&#xA;--     C&#x2B;&#x2B; standard:                11&#xA;--     C&#x2B;&#x2B; Compiler:                /usr/bin/c&#x2B;&#x2B;  (ver 9.4.0)&#xA;--     C&#x2B;&#x2B; flags (Release):         -fsigned-char -W -Wall -Wreturn-type -Wnon-virtual-dtor -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections    -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG  -DNDEBUG&#xA;--     C&#x2B;&#x2B; flags (Debug):           -fsigned-char -W -Wall -Wreturn-type -Wnon-virtual-dtor -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections    -fvisibility=hidden -fvisibility-inlines-hidden -g  -O0 -DDEBUG -D_DEBUG&#xA;--     C Compiler:                  /usr/bin/cc&#xA;--     C flags (Release):           -fsigned-char -W -Wall -Wreturn-type -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections    -fvisibility=hidden -O3 -DNDEBUG  -DNDEBUG&#xA;--     C flags (Debug):             -fsigned-char -W -Wall -Wreturn-type -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections    -fvisibility=hidden -g  -O0 -DDEBUG -D_DEBUG&#xA;--     Linker flags (Release):      -Wl,--gc-sections -Wl,--as-needed -Wl,--no-undefined  &#xA;--     Linker flags (Debug):        -Wl,--gc-sections -Wl,--as-needed -Wl,--no-undefined  &#xA;--     ccache:                      NO&#xA;--     Precompiled headers:         NO&#xA;--     Extra dependencies:          dl m pthread rt&#xA;--     3rdparty dependencies:&#xA;-- &#xA;--   OpenCV modules:&#xA;--     To be built:                 aruco barcode bgsegm bioinspired calib3d ccalib core datasets dnn dnn_objdetect dnn_superres dpm face features2d flann freetype fuzzy gapi hfs highgui img_hash imgcodecs imgproc intensity_transform line_descriptor mcc ml objdetect optflow phase_unwrapping photo plot quality rapid reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking ts video videoio videostab wechat_qrcode xfeatures2d ximgproc xobjdetect xphoto&#xA;--     Disabled:                    world&#xA;--     Disabled by dependency:      -&#xA;--     Unavailable:                 alphamat cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev cvv hdf java julia matlab ovis python2 python3 sfm viz&#xA;--     Applications:                tests perf_tests apps&#xA;--     Documentation:               NO&#xA;--     Non-free algorithms:         NO&#xA;-- &#xA;--   GUI:                           GTK3&#xA;--     GTK&#x2B;:                        YES (ver 3.24.20)&#xA;--       GThread :                  YES (ver 2.64.6)&#xA;--       GtkGlExt:                  NO&#xA;--     VTK support:                 NO&#xA;-- &#xA;--   Media I/O: &#xA;--     ZLib:                        /usr/lib/aarch64-linux-gnu/libz.so (ver 1.2.11)&#xA;--     JPEG:                        /usr/lib/aarch64-linux-gnu/libjpeg.so (ver 80)&#xA;--     WEBP:                        build (ver encoder: 0x020f)&#xA;--     PNG:                         /usr/lib/aarch64-linux-gnu/libpng.so (ver 1.6.37)&#xA;--     TIFF:                        /usr/lib/aarch64-linux-gnu/libtiff.so (ver 42 / 4.1.0)&#xA;--     JPEG 2000:                   build (ver 2.4.0)&#xA;--     OpenEXR:                     build (ver 2.3.0)&#xA;--     HDR:                         YES&#xA;--     SUNRASTER:                   YES&#xA;--     PXM:                         YES&#xA;--     PFM:                         YES&#xA;-- &#xA;--   Video I/O:&#xA;--     DC1394:                      YES (2.2.5)&#xA;--     FFMPEG:                      YES&#xA;--       avcodec:                   YES (58.54.100)&#xA;--       avformat:                  YES (58.29.100)&#xA;--       avutil:                    YES (56.31.100)&#xA;--       swscale:                   YES (5.5.100)&#xA;--       avresample:                YES (4.0.0)&#xA;--     GStreamer:                   YES (1.16.2)&#xA;--     v4l/v4l2:                    YES (linux/videodev2.h)&#xA;-- &#xA;--   Parallel framework:            pthreads&#xA;-- &#xA;--   Trace:                         YES (with Intel ITT)&#xA;-- &#xA;--   Other third-party libraries:&#xA;--     Lapack:                      NO&#xA;--     Eigen:                       NO&#xA;--     Custom HAL:                  YES (carotene (ver 0.0.1))&#xA;--     Protobuf:                    build (3.19.1)&#xA;-- &#xA;--   OpenCL:                        YES (no extra features)&#xA;--     Include path:                /home/firefly/Downloads/opencv-4.6.0/3rdparty/include/opencl/1.2&#xA;--     Link libraries:              Dynamic load&#xA;-- &#xA;--   Python (for build):            /usr/bin/python2.7&#xA;-- &#xA;--   Java:                          &#xA;--     ant:                         NO&#xA;--     JNI:                         NO&#xA;--     Java wrappers:               NO&#xA;--     Java tests:                  NO&#xA;-- &#xA;============================================================================================&#xA;

    &#xA;

    ffmpeg info :

    &#xA;

    ============================================================================================&#xA;ffmpeg&#xA;ffmpeg version 4.2.4-1ubuntu1.0firefly5 Copyright (c) 2000-2020 the FFmpeg developers&#xA;  built with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.1)&#xA;  configuration: --prefix=/usr --extra-version=1ubuntu1.0firefly5 --toolchain=hardened --libdir=/usr/lib/aarch64-linux-gnu --incdir=/usr/include/aarch64-linux-gnu --arch=arm64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-libdrm --enable-librga --enable-rkmpp --enable-version3 --disable-libopenh264 --disable-vaapi --disable-vdpau --disable-decoder=h264_v4l2m2m --disable-decoder=vp8_v4l2m2m --disable-decoder=mpeg2_v4l2m2m --disable-decoder=mpeg4_v4l2m2m --enable-shared --disable-doc&#xA;  libavutil      56. 31.100 / 56. 31.100&#xA;  libavcodec     58. 54.100 / 58. 54.100&#xA;  libavformat    58. 29.100 / 58. 29.100&#xA;  libavdevice    58.  8.100 / 58.  8.100&#xA;  libavfilter     7. 57.100 /  7. 57.100&#xA;  libavresample   4.  0.  0 /  4.  0.  0&#xA;  libswscale      5.  5.100 /  5.  5.100&#xA;  libswresample   3.  5.100 /  3.  5.100&#xA;  libpostproc    55.  5.100 / 55.  5.100&#xA;Hyper fast Audio and Video encoder&#xA;usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...&#xA;====================================================================================&#xA;

    &#xA;

  • What is a Cohort Report ? A Beginner’s Guide to Cohort Analysis

    3 janvier 2024, par Erin

    Handling your user data as a single mass of numbers is rarely conducive to figuring out meaningful patterns you can use to improve your marketing campaigns.

    A cohort report (or cohort analysis) can help you quickly break down that larger audience into sequential segments and contrast and compare based on various metrics. As such, it is a great tool for unlocking more granular trends and insights — for example, identifying patterns in engagement and conversions based on the date users first interacted with your site.

    In this guide, we explain the basics of the cohort report and the best way to set one up to get the most out of it.

    What is a cohort report ?

    In a cohort report, you divide a data set into groups based on certain criteria — typically a time-based cohort metric like first purchase date — and then analyse the data across those segments, looking for patterns.

    Date-based cohort analysis is the most common approach, often creating cohorts based on the day a user completed a particular action — signed up, purchased something or visited your website. Depending on the metric you choose to measure (like return visits), the cohort report might look something like this :

    Example of a basic cohort report

    Note that this is not a universal benchmark or anything of the sort. The above is a theoretical cohort analysis based on app users who downloaded the app, tracking and comparing the retention rates as the days go by. 

    The benchmarks will be drastically different depending on the metric you’re measuring and the basis for your cohorts. For example, if you’re measuring returning visitor rates among first-time visitors to your website, expect single-digit percentages even on the second day.

    Your industry will also greatly affect what you consider positive in a cohort report. For example, if you’re a subscription SaaS, you’d expect high continued usage rates over the first week. If you sell office supplies to companies, much less so.

    What is an example of a cohort ?

    As we just mentioned, a typical cohort analysis separates users or customers by the date they first interacted with your business — in this case, they downloaded your app. Within that larger analysis, the users who downloaded it on May 3 represent a single cohort.

    Illustration of a specific cohort

    In this case, we’ve chosen behaviour and time — the app download day — to separate the user base into cohorts. That means every specific day denotes a specific cohort within the analysis.

    Diving deeper into an individual cohort may be a good idea for important holidays or promotional events like Black Friday.

    Of course, cohorts don’t have to be based on specific behaviour within certain periods. You can also create cohorts based on other dimensions :

    • Transactional data — revenue per user
    • Churn data — date of churn
    • Behavioural cohort — based on actions taken on your website, app or e-commerce store, like the number of sessions per user or specific product pages visited
    • Acquisition cohort — which channel referred the user or customer

    For more information on different cohort types, read our in-depth guide on cohort analysis.

    How to create a cohort report (and make sense of it)

    Matomo makes it easy to view and analyse different cohorts (without the privacy and legal implications of using Google Analytics).

    Here are a few different ways to set up a cohort report in Matomo, starting with our built-in cohorts report.

    Cohort reports

    With Matomo, cohort reports are automatically compiled based on the first visit date. The default metric is the percentage of returning visitors.

    Screenshot of the cohorts report in Matomo analytics

    Changing the settings allows you to create multiple variations of cohort analysis reports.

    Break down cohorts by different metrics

    The percentage of returning visits can be valuable if you’re trying to improve early engagement in a SaaS app onboarding process. But it’s far from your only option.

    You can also compare performance by conversion, revenue, bounce rate, actions per visit, average session duration or other metrics.

    Cohort metric options in Matomo analytics

    Change the time and scope of your cohort analysis

    Splitting up cohorts by single days may be useless if you don’t have a high volume of users or visitors. If the average cohort size is only a few users, you won’t be able to identify reliable patterns. 

    Matomo lets you set any time period to create your cohort analysis report. Instead of the most recent days, you can create cohorts by week, month, year or custom date ranges. 

    Date settings in the cohorts report in Matomo analytics

    Cohort sizes will depend on your customer base. Make sure each cohort is large enough to encapsulate all the customers in that cohort and not so small that you have insignificant cohorts of only a few customers. Choose a date range that gives you that without scaling it too far so you can’t identify any seasonal trends.

    Cohort analysis can be a great tool if you’ve recently changed your marketing, product offering or onboarding. Set the data range to weekly and look for any impact in conversions and revenue after the changes.

    Using the “compare to” feature, you can also do month-over-month, quarter-over-quarter or any custom date range comparisons. This approach can help you get a rough overview of your campaign’s long-term progress without doing any in-depth analysis.

    You can also use the same approach to compare different holiday seasons against each other.

    If you want to combine time cohorts with segmentation, you can run cohort reports for different subsets of visitors instead of all visitors. This can lead to actionable insights like adjusting weekend or specific seasonal promotions to improve conversion rates.

    Try Matomo for Free

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

    No credit card required

    Easily create custom cohort reports beyond the time dimension

    If you want to split your audience into cohorts by focusing on something other than time, you will need to create a custom report and choose another dimension. In Matomo, you can choose from a wide range of cohort metrics, including referrers, e-commerce signals like viewed product or product category, form submissions and more.

    Custom report options in Matomo

    Then, you can create a simple table-based report with all the insights you need by choosing the metrics you want to see. For example, you could choose average visit duration, bounce rate and other usage metrics.

    Metrics selected in a Matomo custom report

    If you want more revenue-focused insights, add metrics like conversions, add-to-cart and other e-commerce events.

    Custom reports make it easy to create cohort reports for almost any dimension. You can use any metric within demographic and behavioural analytics to create a cohort. (You can explore the complete list of our possible segmentation metrics.)

    We cover different types of custom reports (and ideas for specific marketing campaigns) in our guide on custom segmentation.

    Create your first cohort report and gain better insights into your visitors

    Cohort reports can help you identify trends and the impact of short-term marketing efforts like events and promotions.

    With Matomo cohort reports you have the power to create complex custom reports for various cohorts and segments. 

    If you’re looking for a powerful, easy-to-use web analytics solution that gives you 100% accurate data without compromising your users’ privacy, Matomo is a great fit. Get started with a 21-day free trial today. No credit card required.