Recherche avancée

Médias (1)

Mot : - Tags -/biomaping

Autres articles (50)

  • Librairies et logiciels spécifiques aux médias

    10 décembre 2010, par

    Pour un fonctionnement correct et optimal, plusieurs choses sont à prendre en considération.
    Il est important, après avoir installé apache2, mysql et php5, d’installer d’autres logiciels nécessaires dont les installations sont décrites dans les liens afférants. Un ensemble de librairies multimedias (x264, libtheora, libvpx) utilisées pour l’encodage et le décodage des vidéos et sons afin de supporter le plus grand nombre de fichiers possibles. Cf. : ce tutoriel ; FFMpeg avec le maximum de décodeurs et (...)

  • Les autorisations surchargées par les plugins

    27 avril 2010, par

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

  • Encoding and processing into web-friendly formats

    13 avril 2011, par

    MediaSPIP automatically converts uploaded files to internet-compatible formats.
    Video files are encoded in MP4, Ogv and WebM (supported by HTML5) and MP4 (supported by Flash).
    Audio files are encoded in MP3 and Ogg (supported by HTML5) and MP3 (supported by Flash).
    Where possible, text is analyzed in order to retrieve the data needed for search engine detection, and then exported as a series of image files.
    All uploaded files are stored online in their original format, so you can (...)

Sur d’autres sites (7528)

  • cannot convert FLV to MP4 despite compiling ffmpeg with all codecs

    1er novembre 2013, par Rubytastic

    Try to convert FLV to MP4 with below params, but it always fails. I included also list of codeces that are compiled in. Why It will not convert the FLV to MP4, who knows ?

    ffmpeg -y -i stream2.flv -acodec libmp3lame -ar 44100 -ac 1 -vcodec libx264 stream2.mp4;
    ffmpeg version git-2013-11-01-64a0ed1 Copyright (c) 2000-2013 the FFmpeg developers
     built on Nov  1 2013 14:44:29 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-3)
     configuration: --prefix=/root/ffmpeg_build --extra-cflags=-I/root/ffmpeg_build/include --extra-ldflags=-L/root/ffmpeg_build/lib --bindir=/root/bin --extra-libs=-ldl --enable-gpl --enable-nonfree --enable-libfdk_aac --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264
     libavutil      52. 49.100 / 52. 49.100
     libavcodec     55. 40.100 / 55. 40.100
     libavformat    55. 20.100 / 55. 20.100
     libavdevice    55.  5.100 / 55.  5.100
     libavfilter     3. 90.100 /  3. 90.100
     libswscale      2.  5.101 /  2.  5.101
     libswresample   0. 17.104 /  0. 17.104
     libpostproc    52.  3.100 / 52.  3.100
    Input #0, flv, from 'stream2.flv':
     Duration: 00:00:01.60, start: 0.000000, bitrate: 636 kb/s
       Stream #0:0: Video: h264 (Baseline), yuv420p(tv), 640x480 [SAR 1:1 DAR 4:3], 11.92 tbr, 1k tbn, 60 tbc
       Stream #0:1: Audio: speex, 16000 Hz, mono
    [graph 1 input from stream 0:1 @ 0xb000d40] Invalid sample format (null)
    Error opening filters!

    i followed the official compile documentation with all the codes, this is my full codec list :

    ffmpeg version git-2013-11-01-64a0ed1 Copyright (c) 2000-2013 the FFmpeg developers
     built on Nov  1 2013 14:44:29 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-3)
     configuration: --prefix=/root/ffmpeg_build --extra-cflags=-I/root/ffmpeg_build/include --extra-ldflags=-L/root/ffmpeg_build/lib --bindir=/root/bin --extra-libs=-ldl --enable-gpl --enable-nonfree --enable-libfdk_aac --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264
     libavutil      52. 49.100 / 52. 49.100
     libavcodec     55. 40.100 / 55. 40.100
     libavformat    55. 20.100 / 55. 20.100
     libavdevice    55.  5.100 / 55.  5.100
     libavfilter     3. 90.100 /  3. 90.100
     libswscale      2.  5.101 /  2.  5.101
     libswresample   0. 17.104 /  0. 17.104
     libpostproc    52.  3.100 / 52.  3.100
    Codecs:
    D..... = Decoding supported
    .E.... = Encoding supported
    ..V... = Video codec
    ..A... = Audio codec
    ..S... = Subtitle codec
    ...I.. = Intra frame-only codec
    ....L. = Lossy compression
    .....S = Lossless compression
    -------
    D.VI.. 012v                 Uncompressed 4:2:2 10-bit
    D.V.L. 4xm                  4X Movie
    D.VI.S 8bps                 QuickTime 8BPS video
    .EVIL. a64_multi            Multicolor charset for Commodore 64 (encoders: a64multi )
    .EVIL. a64_multi5           Multicolor charset for Commodore 64, extended with 5th color (colram) (encoders: a64multi5 )
    D.V..S aasc                 Autodesk RLE
    D.VIL. aic                  Apple Intermediate Codec
    DEVIL. amv                  AMV Video
    D.V.L. anm                  Deluxe Paint Animation
    D.V.L. ansi                 ASCII/ANSI art
    DEVIL. asv1                 ASUS V1
    DEVIL. asv2                 ASUS V2
    D.VIL. aura                 Auravision AURA
    D.VIL. aura2                Auravision Aura 2
    D.V... avrn                 Avid AVI Codec
    DEVI.. avrp                 Avid 1:1 10-bit RGB Packer
    D.V.L. avs                  AVS (Audio Video Standard) video
    DEVI.. avui                 Avid Meridien Uncompressed
    DEVI.. ayuv                 Uncompressed packed MS 4:4:4:4
    D.V.L. bethsoftvid          Bethesda VID video
    D.V.L. bfi                  Brute Force & Ignorance
    D.V.L. binkvideo            Bink video
    D.VI.. bintext              Binary text
    DEVI.S bmp                  BMP (Windows and OS/2 bitmap)
    D.V..S bmv_video            Discworld II BMV video
    D.VI.S brender_pix          BRender PIX image
    D.V.L. c93                  Interplay C93
    D.V.L. cavs                 Chinese AVS (Audio Video Standard) (AVS1-P2, JiZhun profile)
    D.V.L. cdgraphics           CD Graphics video
    D.VIL. cdxl                 Commodore CDXL video
    D.V.L. cinepak              Cinepak
    DEVIL. cljr                 Cirrus Logic AccuPak
    D.VI.S cllc                 Canopus Lossless Codec
    D.V.L. cmv                  Electronic Arts CMV video (decoders: eacmv )
    D.V... cpia                 CPiA video format
    D.V..S cscd                 CamStudio (decoders: camstudio )
    D.VIL. cyuv                 Creative YUV (CYUV)
    D.V.L. dfa                  Chronomaster DFA
    D.V.LS dirac                Dirac
    DEVIL. dnxhd                VC3/DNxHD
    DEVI.S dpx                  DPX (Digital Picture Exchange) image
    D.V.L. dsicinvideo          Delphine Software International CIN video
    DEVIL. dvvideo              DV (Digital Video)
    D.V..S dxa                  Feeble Files/ScummVM DXA
    D.VI.S dxtory               Dxtory
    D.V.L. escape124            Escape 124
    D.V.L. escape130            Escape 130
    D.VILS exr                  OpenEXR image
    DEV..S ffv1                 FFmpeg video codec #1
    DEVI.S ffvhuff              Huffyuv FFmpeg variant
    DEV..S flashsv              Flash Screen Video v1
    DEV.L. flashsv2             Flash Screen Video v2
    D.V..S flic                 Autodesk Animator Flic video
    DEV.L. flv1                 FLV / Sorenson Spark / Sorenson H.263 (Flash Video) (decoders: flv ) (encoders: flv )
    D.V..S fraps                Fraps
    D.VI.S frwu                 Forward Uncompressed
    D.V.L. g2m                  Go2Meeting
    DEV..S gif                  GIF (Graphics Interchange Format)
    DEV.L. h261                 H.261
    DEV.L. h263                 H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2
    D.V.L. h263i                Intel H.263
    DEV.L. h263p                H.263+ / H.263-1998 / H.263 version 2
    DEV.LS h264                 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (encoders: libx264 libx264rgb )
    D.V.LS hevc                 H.265 / HEVC
    D.V.L. hnm4video            HNM 4 video
    DEVI.S huffyuv              HuffYUV
    D.V.L. idcin                id Quake II CIN video (decoders: idcinvideo )
    D.VI.. idf                  iCEDraw text
    D.V.L. iff_byterun1         IFF ByteRun1 (decoders: iff )
    D.V.L. iff_ilbm             IFF ILBM (decoders: iff )
    D.V.L. indeo2               Intel Indeo 2
    D.V.L. indeo3               Intel Indeo 3
    D.V.L. indeo4               Intel Indeo Video Interactive 4
    D.V.L. indeo5               Intel Indeo Video Interactive 5
    D.V.L. interplayvideo       Interplay MVE video
    DEVILS jpeg2000             JPEG 2000
    DEVILS jpegls               JPEG-LS
    D.VIL. jv                   Bitmap Brothers JV video
    D.V.L. kgv1                 Kega Game Video
    D.V.L. kmvc                 Karl Morton's video codec
    D.VI.S lagarith             Lagarith lossless
    .EVI.S ljpeg                Lossless JPEG
    D.VI.S loco                 LOCO
    D.V.L. mad                  Electronic Arts Madcow Video (decoders: eamad )
    D.VIL. mdec                 Sony PlayStation MDEC (Motion DECoder)
    D.V.L. mimic                Mimic
    DEVIL. mjpeg                Motion JPEG
    D.VIL. mjpegb               Apple MJPEG-B
    D.V.L. mmvideo              American Laser Games MM Video
    D.V.L. motionpixels         Motion Pixels video
    DEV.L. mpeg1video           MPEG-1 video
    DEV.L. mpeg2video           MPEG-2 video (decoders: mpeg2video mpegvideo )
    DEV.L. mpeg4                MPEG-4 part 2
    ..V.L. mpegvideo_xvmc       MPEG-1/2 video XvMC (X-Video Motion Compensation)
    D.V.L. msa1                 MS ATC Screen
    D.V.L. msmpeg4v1            MPEG-4 part 2 Microsoft variant version 1
    DEV.L. msmpeg4v2            MPEG-4 part 2 Microsoft variant version 2
    DEV.L. msmpeg4v3            MPEG-4 part 2 Microsoft variant version 3 (decoders: msmpeg4 ) (encoders: msmpeg4 )
    D.V..S msrle                Microsoft RLE
    D.V.L. mss1                 MS Screen 1
    D.VIL. mss2                 MS Windows Media Video V9 Screen
    DEV.L. msvideo1             Microsoft Video 1
    D.VI.S mszh                 LCL (LossLess Codec Library) MSZH
    D.V.L. mts2                 MS Expression Encoder Screen
    D.VIL. mvc1                 Silicon Graphics Motion Video Compressor 1
    D.VIL. mvc2                 Silicon Graphics Motion Video Compressor 2
    D.V.L. mxpeg                Mobotix MxPEG video
    D.V.L. nuv                  NuppelVideo/RTJPEG
    D.V.L. paf_video            Amazing Studio Packed Animation File Video
    DEVI.S pam                  PAM (Portable AnyMap) image
    DEVI.S pbm                  PBM (Portable BitMap) image
    DEVI.S pcx                  PC Paintbrush PCX image
    DEVI.S pgm                  PGM (Portable GrayMap) image
    DEVI.S pgmyuv               PGMYUV (Portable GrayMap YUV) image
    D.VIL. pictor               Pictor/PC Paint
    DEV..S png                  PNG (Portable Network Graphics) image
    DEVI.S ppm                  PPM (Portable PixelMap) image
    DEVIL. prores               Apple ProRes (iCodec Pro) (decoders: prores prores_lgpl ) (encoders: prores prores_aw prores_ks )
    D.VIL. ptx                  V.Flash PTX image
    D.VI.S qdraw                Apple QuickDraw
    D.V.L. qpeg                 Q-team QPEG
    DEV..S qtrle                QuickTime Animation (RLE) video
    DEVI.S r10k                 AJA Kona 10-bit RGB Codec
    DEVI.S r210                 Uncompressed RGB 10-bit
    DEVI.S rawvideo             raw video
    D.VIL. rl2                  RL2 video
    DEV.L. roq                  id RoQ video (decoders: roqvideo ) (encoders: roqvideo )
    D.V.L. rpza                 QuickTime video (RPZA)
    DEV.L. rv10                 RealVideo 1.0
    DEV.L. rv20                 RealVideo 2.0
    D.V.L. rv30                 RealVideo 3.0
    D.V.L. rv40                 RealVideo 4.0
    D.V.L. sanm                 LucasArts SMUSH video
    DEVI.S sgi                  SGI image
    D.VI.S sgirle               SGI RLE 8-bit
    D.V.L. smackvideo           Smacker video (decoders: smackvid )
    D.V.L. smc                  QuickTime Graphics (SMC)
    D.V... smv                  Sigmatel Motion Video (decoders: smvjpeg )
    DEV.LS snow                 Snow
    D.VIL. sp5x                 Sunplus JPEG (SP5X)
    DEVI.S sunrast              Sun Rasterfile image
    DEV.L. svq1                 Sorenson Vector Quantizer 1 / Sorenson Video 1 / SVQ1
    D.V.L. svq3                 Sorenson Vector Quantizer 3 / Sorenson Video 3 / SVQ3
    DEVI.S targa                Truevision Targa image
    D.VI.. targa_y216           Pinnacle TARGA CineWave YUV16
    D.V.L. tgq                  Electronic Arts TGQ video (decoders: eatgq )
    D.V.L. tgv                  Electronic Arts TGV video (decoders: eatgv )
    D.V.L. theora               Theora
    D.VIL. thp                  Nintendo Gamecube THP video
    D.V.L. tiertexseqvideo      Tiertex Limited SEQ video
    DEVI.S tiff                 TIFF image
    D.VIL. tmv                  8088flex TMV
    D.V.L. tqi                  Electronic Arts TQI video (decoders: eatqi )
    D.V.L. truemotion1          Duck TrueMotion 1.0
    D.V.L. truemotion2          Duck TrueMotion 2.0
    D.V..S tscc                 TechSmith Screen Capture Codec (decoders: camtasia )
    D.V.L. tscc2                TechSmith Screen Codec 2
    D.VIL. txd                  Renderware TXD (TeXture Dictionary) image
    D.V.L. ulti                 IBM UltiMotion (decoders: ultimotion )
    DEVI.S utvideo              Ut Video
    DEVI.S v210                 Uncompressed 4:2:2 10-bit
    D.VI.S v210x                
    DEVI.. v308                 Uncompressed packed 4:4:4
    DEVI.. v408                 Uncompressed packed QT 4:4:4:4
    DEVI.S v410                 Uncompressed 4:4:4 10-bit
    D.V.L. vb                   Beam Software VB
    D.VI.S vble                 VBLE Lossless Codec
    D.V.L. vc1                  SMPTE VC-1
    D.V.L. vc1image             Windows Media Video 9 Image v2
    D.VIL. vcr1                 ATI VCR1
    D.VIL. vixl                 Miro VideoXL (decoders: xl )
    D.V.L. vmdvideo             Sierra VMD video
    D.V..S vmnc                 VMware Screen Codec / VMware Video
    D.V.L. vp3                  On2 VP3
    D.V.L. vp5                  On2 VP5
    D.V.L. vp6                  On2 VP6
    D.V.L. vp6a                 On2 VP6 (Flash version, with alpha channel)
    D.V.L. vp6f                 On2 VP6 (Flash version)
    DEV.L. vp8                  On2 VP8 (decoders: vp8 libvpx ) (encoders: libvpx )
    DEV.L. vp9                  Google VP9 (decoders: vp9 libvpx-vp9 ) (encoders: libvpx-vp9 )
    D.VILS webp                 WebP
    DEV.L. wmv1                 Windows Media Video 7
    DEV.L. wmv2                 Windows Media Video 8
    D.V.L. wmv3                 Windows Media Video 9
    D.V.L. wmv3image            Windows Media Video 9 Image
    D.VIL. wnv1                 Winnov WNV1
    D.V.L. ws_vqa               Westwood Studios VQA (Vector Quantized Animation) video (decoders: vqavideo )
    D.V.L. xan_wc3              Wing Commander III / Xan
    D.V.L. xan_wc4              Wing Commander IV / Xxan
    D.VI.. xbin                 eXtended BINary text
    DEVI.S xbm                  XBM (X BitMap) image
    DEVIL. xface                X-face image
    DEVI.S xwd                  XWD (X Window Dump) image
    DEVI.. y41p                 Uncompressed YUV 4:1:1 12-bit
    D.V.L. yop                  Psygnosis YOP Video
    DEVI.. yuv4                 Uncompressed packed 4:2:0
    D.V..S zerocodec            ZeroCodec Lossless Video
    DEVI.S zlib                 LCL (LossLess Codec Library) ZLIB
    DEV..S zmbv                 Zip Motion Blocks Video
    D.A.L. 8svx_exp             8SVX exponential
    D.A.L. 8svx_fib             8SVX fibonacci
    DEA.L. aac                  AAC (Advanced Audio Coding) (decoders: aac libfdk_aac ) (encoders: aac libfdk_aac )
    D.A.L. aac_latm             AAC LATM (Advanced Audio Coding LATM syntax)
    DEA.L. ac3                  ATSC A/52A (AC-3) (encoders: ac3 ac3_fixed )
    D.A.L. adpcm_4xm            ADPCM 4X Movie
    DEA.L. adpcm_adx            SEGA CRI ADX ADPCM
    D.A.L. adpcm_afc            ADPCM Nintendo Gamecube AFC
    D.A.L. adpcm_ct             ADPCM Creative Technology
    D.A.L. adpcm_dtk            ADPCM Nintendo Gamecube DTK
    D.A.L. adpcm_ea             ADPCM Electronic Arts
    D.A.L. adpcm_ea_maxis_xa    ADPCM Electronic Arts Maxis CDROM XA
    D.A.L. adpcm_ea_r1          ADPCM Electronic Arts R1
    D.A.L. adpcm_ea_r2          ADPCM Electronic Arts R2
    D.A.L. adpcm_ea_r3          ADPCM Electronic Arts R3
    D.A.L. adpcm_ea_xas         ADPCM Electronic Arts XAS
    DEA.L. adpcm_g722           G.722 ADPCM (decoders: g722 ) (encoders: g722 )
    DEA.L. adpcm_g726           G.726 ADPCM (decoders: g726 ) (encoders: g726 )
    D.A.L. adpcm_g726le         G.726 ADPCM little-endian (decoders: g726le )
    D.A.L. adpcm_ima_amv        ADPCM IMA AMV
    D.A.L. adpcm_ima_apc        ADPCM IMA CRYO APC
    D.A.L. adpcm_ima_dk3        ADPCM IMA Duck DK3
    D.A.L. adpcm_ima_dk4        ADPCM IMA Duck DK4
    D.A.L. adpcm_ima_ea_eacs    ADPCM IMA Electronic Arts EACS
    D.A.L. adpcm_ima_ea_sead    ADPCM IMA Electronic Arts SEAD
    D.A.L. adpcm_ima_iss        ADPCM IMA Funcom ISS
    D.A.L. adpcm_ima_oki        ADPCM IMA Dialogic OKI
    DEA.L. adpcm_ima_qt         ADPCM IMA QuickTime
    D.A.L. adpcm_ima_rad        ADPCM IMA Radical
    D.A.L. adpcm_ima_smjpeg     ADPCM IMA Loki SDL MJPEG
    DEA.L. adpcm_ima_wav        ADPCM IMA WAV
    D.A.L. adpcm_ima_ws         ADPCM IMA Westwood
    DEA.L. adpcm_ms             ADPCM Microsoft
    D.A.L. adpcm_sbpro_2        ADPCM Sound Blaster Pro 2-bit
    D.A.L. adpcm_sbpro_3        ADPCM Sound Blaster Pro 2.6-bit
    D.A.L. adpcm_sbpro_4        ADPCM Sound Blaster Pro 4-bit
    DEA.L. adpcm_swf            ADPCM Shockwave Flash
    D.A.L. adpcm_thp            ADPCM Nintendo Gamecube THP
    D.A.L. adpcm_xa             ADPCM CDROM XA
    DEA.L. adpcm_yamaha         ADPCM Yamaha
    DEA..S alac                 ALAC (Apple Lossless Audio Codec)
    D.A.L. amr_nb               AMR-NB (Adaptive Multi-Rate NarrowBand) (decoders: amrnb )
    D.A.L. amr_wb               AMR-WB (Adaptive Multi-Rate WideBand) (decoders: amrwb )
    D.A..S ape                  Monkey's Audio
    D.A.L. atrac1               ATRAC1 (Adaptive TRansform Acoustic Coding)
    D.A.L. atrac3               ATRAC3 (Adaptive TRansform Acoustic Coding 3)
    ..A.L. atrac3p              ATRAC3+ (Adaptive TRansform Acoustic Coding 3+)
    D.A.L. binkaudio_dct        Bink Audio (DCT)
    D.A.L. binkaudio_rdft       Bink Audio (RDFT)
    D.A.L. bmv_audio            Discworld II BMV audio
    ..A.L. celt                 Constrained Energy Lapped Transform (CELT)
    DEA.L. comfortnoise         RFC 3389 Comfort Noise
    D.A.L. cook                 Cook / Cooker / Gecko (RealAudio G2)
    D.A.L. dsicinaudio          Delphine Software International CIN audio
    DEA.LS dts                  DCA (DTS Coherent Acoustics) (decoders: dca ) (encoders: dca )
    ..A.L. dvaudio              
    DEA.L. eac3                 ATSC A/52B (AC-3, E-AC-3)
    D.A.L. evrc                 EVRC (Enhanced Variable Rate Codec)
    DEA..S flac                 FLAC (Free Lossless Audio Codec)
    DEA.L. g723_1               G.723.1
    D.A.L. g729                 G.729
    D.A.L. gsm                  GSM
    D.A.L. gsm_ms               GSM Microsoft variant
    D.A.L. iac                  IAC (Indeo Audio Coder)
    ..A.L. ilbc                 iLBC (Internet Low Bitrate Codec)
    D.A.L. imc                  IMC (Intel Music Coder)
    D.A.L. interplay_dpcm       DPCM Interplay
    D.A.L. mace3                MACE (Macintosh Audio Compression/Expansion) 3:1
    D.A.L. mace6                MACE (Macintosh Audio Compression/Expansion) 6:1
    D.A.L. metasound            Voxware MetaSound
    D.A..S mlp                  MLP (Meridian Lossless Packing)
    D.A.L. mp1                  MP1 (MPEG audio layer 1) (decoders: mp1 mp1float )
    DEA.L. mp2                  MP2 (MPEG audio layer 2) (decoders: mp2 mp2float )
    DEA.L. mp3                  MP3 (MPEG audio layer 3) (decoders: mp3 mp3float ) (encoders: libmp3lame )
    D.A.L. mp3adu               ADU (Application Data Unit) MP3 (MPEG audio layer 3) (decoders: mp3adu mp3adufloat )
    D.A.L. mp3on4               MP3onMP4 (decoders: mp3on4 mp3on4float )
    D.A..S mp4als               MPEG-4 Audio Lossless Coding (ALS) (decoders: als )
    D.A.L. musepack7            Musepack SV7 (decoders: mpc7 )
    D.A.L. musepack8            Musepack SV8 (decoders: mpc8 )
    DEA.L. nellymoser           Nellymoser Asao
    DEA.L. opus                 Opus (Opus Interactive Audio Codec) (decoders: libopus ) (encoders: libopus )
    D.A.L. paf_audio            Amazing Studio Packed Animation File Audio
    DEA.L. pcm_alaw             PCM A-law / G.711 A-law
    D.A..S pcm_bluray           PCM signed 16|20|24-bit big-endian for Blu-ray media
    D.A..S pcm_dvd              PCM signed 20|24-bit big-endian
    DEA..S pcm_f32be            PCM 32-bit floating point big-endian
    DEA..S pcm_f32le            PCM 32-bit floating point little-endian
    DEA..S pcm_f64be            PCM 64-bit floating point big-endian
    DEA..S pcm_f64le            PCM 64-bit floating point little-endian
    D.A..S pcm_lxf              PCM signed 20-bit little-endian planar
    DEA.L. pcm_mulaw            PCM mu-law / G.711 mu-law
    DEA..S pcm_s16be            PCM signed 16-bit big-endian
    DEA..S pcm_s16be_planar     PCM signed 16-bit big-endian planar
    DEA..S pcm_s16le            PCM signed 16-bit little-endian
    DEA..S pcm_s16le_planar     PCM signed 16-bit little-endian planar
    DEA..S pcm_s24be            PCM signed 24-bit big-endian
    DEA..S pcm_s24daud          PCM D-Cinema audio signed 24-bit
    DEA..S pcm_s24le            PCM signed 24-bit little-endian
    DEA..S pcm_s24le_planar     PCM signed 24-bit little-endian planar
    DEA..S pcm_s32be            PCM signed 32-bit big-endian
    DEA..S pcm_s32le            PCM signed 32-bit little-endian
    DEA..S pcm_s32le_planar     PCM signed 32-bit little-endian planar
    DEA..S pcm_s8               PCM signed 8-bit
    DEA..S pcm_s8_planar        PCM signed 8-bit planar
    DEA..S pcm_u16be            PCM unsigned 16-bit big-endian
    DEA..S pcm_u16le            PCM unsigned 16-bit little-endian
    DEA..S pcm_u24be            PCM unsigned 24-bit big-endian
    DEA..S pcm_u24le            PCM unsigned 24-bit little-endian
    DEA..S pcm_u32be            PCM unsigned 32-bit big-endian
    DEA..S pcm_u32le            PCM unsigned 32-bit little-endian
    DEA..S pcm_u8               PCM unsigned 8-bit
    D.A.L. pcm_zork             PCM Zork
    D.A.L. qcelp                QCELP / PureVoice
    D.A.L. qdm2                 QDesign Music Codec 2
    ..A.L. qdmc                 QDesign Music
    DEA.L. ra_144               RealAudio 1.0 (14.4K) (decoders: real_144 ) (encoders: real_144 )
    D.A.L. ra_288               RealAudio 2.0 (28.8K) (decoders: real_288 )
    D.A..S ralf                 RealAudio Lossless
    DEA.L. roq_dpcm             DPCM id RoQ
    DEA..S s302m                SMPTE 302M
    D.A..S shorten              Shorten
    D.A.L. sipr                 RealAudio SIPR / ACELP.NET
    D.A.L. smackaudio           Smacker audio (decoders: smackaud )
    ..A.L. smv                  SMV (Selectable Mode Vocoder)
    D.A.L. sol_dpcm             DPCM Sol
    DEA... sonic                Sonic
    .EA... sonicls              Sonic lossless
    ..A.L. speex                Speex
    D.A..S tak                  TAK (Tom's lossless Audio Kompressor)
    D.A..S truehd               TrueHD
    D.A.L. truespeech           DSP Group TrueSpeech
    DEA..S tta                  TTA (True Audio)
    D.A.L. twinvq               VQF TwinVQ
    D.A.L. vima                 LucasArts VIMA audio
    D.A.L. vmdaudio             Sierra VMD audio
    DEA.L. vorbis               Vorbis (decoders: vorbis libvorbis ) (encoders: vorbis libvorbis )
    ..A.L. voxware              Voxware RT29 Metasound
    D.A... wavesynth            Wave synthesis pseudo-codec
    DEA.LS wavpack              WavPack
    D.A.L. westwood_snd1        Westwood Audio (SND1) (decoders: ws_snd1 )
    D.A..S wmalossless          Windows Media Audio Lossless
    D.A.L. wmapro               Windows Media Audio 9 Professional
    DEA.L. wmav1                Windows Media Audio 1
    DEA.L. wmav2                Windows Media Audio 2
    D.A.L. wmavoice             Windows Media Audio Voice
    D.A.L. xan_dpcm             DPCM Xan
    ..D... dvd_nav_packet       DVD Nav packet
    ..D... klv                  SMPTE 336M Key-Length-Value (KLV) metadata
    DES... ass                  ASS (Advanced SSA) subtitle
    DES... dvb_subtitle         DVB subtitles (decoders: dvbsub ) (encoders: dvbsub )
    ..S... dvb_teletext         DVB teletext
    DES... dvd_subtitle         DVD subtitles (decoders: dvdsub ) (encoders: dvdsub )
    ..S... eia_608              EIA-608 closed captions
    D.S... hdmv_pgs_subtitle    HDMV Presentation Graphic Stream subtitles (decoders: pgssub )
    D.S... jacosub              JACOsub subtitle
    D.S... microdvd             MicroDVD subtitle
    DES... mov_text             MOV text
    D.S... mpl2                 MPL2 subtitle
    D.S... pjs                  PJS (Phoenix Japanimation Society) subtitle
    D.S... realtext             RealText subtitle
    D.S... sami                 SAMI subtitle
    DES... srt                  SubRip subtitle with embedded timing
    DES... ssa                  SSA (SubStation Alpha) subtitle
    DES... subrip               SubRip subtitle
    D.S... subviewer            SubViewer subtitle
    D.S... subviewer1           SubViewer v1 subtitle
    D.S... text                 raw UTF-8 text
    D.S... vplayer              VPlayer subtitle
    D.S... webvtt               WebVTT subtitle
    DES... xsub                 XSUB
  • Matomo analytics for wordpress

    15 octobre 2019, par Matomo Core Team — Community

    Self-hosting web analytics got a whole lot easier ! Introducing Matomo for WordPress

    Be the first to try it out ! Your feedback is much needed and appreciated

    Get a fully functioning Matomo (which is comparable to Google Analytics) in seconds ! How ? With the new Matomo Analytics for WordPress plugin. 

    Web analytics in WordPress has never been easier to get, or more powerful. Matomo Analytics for WordPress is the one-stop problem solver. It’ll save you time, money and give you the insights to help your website or business succeed. 

    Best of all, we get to further the goal of decentralising the internet. Our hope is for Matomo Analytics for WordPress to spread far and wide. We’re so excited that more and more people can now get their hands on this powerful, free, open-source analytics platform, in a few clicks !

    Download now and check it out !

    What do you get ?

    • No more signing up to third party analytics service (like Google)
    • No more sending away your valuable data to a third party service (like Google)
    • Easy setup – install with a few clicks, no tracking code installation or developer knowledge needed
    • 100% accurate data – no data sampling and no data limits 
    • Full data ownership – all data is stored on your servers and no one else can see your data
    • Privacy protection / GDPR compliance
    • Ecommerce tracking out-of-the-box (Woocommerce, Easy Digital Downloads, and MemberPress) and we’re keen to add many more over time
    • Powerful features – segmenting, comparing reports, different visualisations, real-time reports, visit logs and visitor profiles, Matomo Tag Manager, dashboards, data export, APIs, and many more
    • Compared to other WordPress solutions we don’t charge you extra for basic features that should work out-of-the-box
    • Just like Matomo On-Premise, Matomo Analytics for WordPress is free

    We need your feedback !

    We all know and love the versatility of WordPress – with over 55,000 plugins and all the different ways of hosting it. However, with this great versatility comes the potential for things to be missed, so we’re keen to hear your feedback.

    Thank you ! We really appreciate your help on this ❤️

    How do you get Matomo Analytics for WordPress ?

    Log in to your WordPress and go to “Plugins => Add New”, search for “Matomo Analytics – Ethical Stats. Powerful Insights”, click on “Install” and then “Activate”.

    All you need is at least WordPress 4.8 and PHP 7.0 or later. MySQL 5.1+ is recommended. 

    The source code is available at : https://github.com/matomo-org/wp-matomo/

    In perfect harmony : Matomo and WordPress

    Matomo Analytics for WordPress

    The idea for this started two years ago when we realised the similarities between the Matomo and WordPress project. 

    Not only from a technological point of view – where both are based on PHP and MySQL and can be extended using plugins – but also from a philosophical, license and values point of view. We both believe in privacy, security, data ownership, openness, transparency, having things working out-of-the-box, simplicity etc. 

    WordPress is currently used on approximately 30% of all websites. Many of them use the self-hosted open-source WordPress version. Giving everyone in this market the opportunity to easily get a powerful web analytics platform for free, means a lot to us. We believe WordPress users get a real choice besides the standard solution of Google Analytics, and it furthers our effort and goal of decentralising the internet. 

    We’re hoping more people will be empowered to protect user privacy, have access to a great free and open-source tool, and keep control of data in their own hands.

    We hope you feel the same. Help us spread the word to your friends and get them in on this awesome new project !

    Share on facebook
    Share on twitter
    Share on linkedin

    FAQs

    Isn’t there already a WP-Matomo plugin for WordPress available ?

    Yes, the existing WP-Matomo (WP-Piwik) plugin is an awesome plugin to connect your existing Matomo On-Premise or Matomo Cloud account with WordPress. The difference is that this new plugin installs Matomo Analytics fully in your WordPress. So you get the convenience of having a powerful analytics platform within your WordPress.

    We highly recommend you install this new plugin if you use WordPress and are not running Matomo yet. 

    If you are already using Matomo on our Cloud or On-Premise, we’d still highly recommend you use WP-Matomo (WP-Piwik). So that you get an easier way of inserting the tracking code into your WordPress site and get insights faster.

    I have a high traffic website, will it be an issue ?

    If you have a lot of traffic, we’d advise you to install Matomo On-Premise separately. There’s no specific traffic threshold we can give you on when it’s better to use Matomo On-Premise. It really depends on your server. 

    We reckon if you have more than 500,000 page views a month, you may want to think about using Matomo On-Premise with WP-Matomo instead, but this is just an estimate. In general, if the load on your server is already quite high, then it might be better to install Matomo on a separate server. See also recommended server sizing for running Matomo.

    How do I report a bug or request a new feature in Matomo for WordPress ?

    Please create an issue, on our repository whenever you find a bug or if you have any suggestion or ideas of improvement. We want to build an outstanding analytics experience for WordPress !

    Have another question you’re dying to ask ? The Matomo for WordPress FAQ page might have the answer you need. 

    Matomo Analytics for WordPress newsletter

    Get ahead of the crowd – signup to our exclusive Matomo for WordPress newsletter to get the latest updates on this exciting new project.

    &lt;script type=&quot;text/javascript&quot;&gt;<br />
    (function(global) {<br />
     function serialize(form){if(!form||form.nodeName!==&quot;FORM&quot;){return }var i,j,q=[];for(i=form.elements.length-1;i&gt;=0;i=i-1){if(form.elements[i].name===&quot;&quot;){continue}switch(form.elements[i].nodeName){case&quot;INPUT&quot;:switch(form.elements[i].type){case&quot;text&quot;:case&quot;hidden&quot;:case&quot;password&quot;:case&quot;button&quot;:case&quot;reset&quot;:case&quot;submit&quot;:q.push(form.elements[i].name+&quot;=&quot;+encodeURIComponent(form.elements[i].value));break;case&quot;checkbox&quot;:case&quot;radio&quot;:if(form.elements[i].checked){q.push(form.elements[i].name+&quot;=&quot;+encodeURIComponent(form.elements[i].value))}break;case&quot;file&quot;:break}break;case&quot;TEXTAREA&quot;:q.push(form.elements[i].name+&quot;=&quot;+encodeURIComponent(form.elements[i].value));break;case&quot;SELECT&quot;:switch(form.elements[i].type){case&quot;select-one&quot;:q.push(form.elements[i].name+&quot;=&quot;+encodeURIComponent(form.elements[i].value));break;case&quot;select-multiple&quot;:for(j=form.elements[i].options.length-1;j&gt;=0;j=j-1){if(form.elements[i].options[j].selected){q.push(form.elements[i].name+&quot;=&quot;+encodeURIComponent(form.elements[i].options[j].value))}}break}break;case&quot;BUTTON&quot;:switch(form.elements[i].type){case&quot;reset&quot;:case&quot;submit&quot;:case&quot;button&quot;:q.push(form.elements[i].name+&quot;=&quot;+encodeURIComponent(form.elements[i].value));break}break}}return q.join(&quot;&amp;&quot;)};<br />
    <br />
    <br />
     function extend(destination, source) {<br />
       for (var prop in source) {<br />
         destination[prop] = source[prop];<br />
       }<br />
     }<br />
    <br />
     if (!Mimi) var Mimi = {};<br />
     if (!Mimi.Signups) Mimi.Signups = {};<br />
    <br />
     Mimi.Signups.EmbedValidation = function() {<br />
       this.initialize();<br />
    <br />
       var _this = this;<br />
       if (document.addEventListener) {<br />
         this.form.addEventListener('submit', function(e){<br />
           _this.onFormSubmit(e);<br />
         });<br />
       } else {<br />
         this.form.attachEvent('onsubmit', function(e){<br />
           _this.onFormSubmit(e);<br />
         });<br />
       }<br />
     };<br />
    <br />
     extend(Mimi.Signups.EmbedValidation.prototype, {<br />
       initialize: function() {<br />
         this.form         = document.getElementById('ema_signup_form');<br />
         this.submit       = document.getElementById('webform_submit_button');<br />
         this.callbackName = 'jsonp_callback_' + Math.round(100000 * Math.random());<br />
         this.validEmail   = /.+@.+\..+/<br />
       },<br />
    <br />
       onFormSubmit: function(e) {<br />
         e.preventDefault();<br />
    <br />
         this.validate();<br />
         if (this.isValid) {<br />
           this.submitForm();<br />
         } else {<br />
           this.revalidateOnChange();<br />
         }<br />
       },<br />
    <br />
       validate: function() {<br />
         this.isValid = true;<br />
         this.emailValidation();<br />
         this.fieldAndListValidation();<br />
         this.updateFormAfterValidation();<br />
       },<br />
    <br />
       emailValidation: function() {<br />
         var email = document.getElementById('signup_email');<br />
    <br />
         if (this.validEmail.test(email.value)) {<br />
           this.removeTextFieldError(email);<br />
         } else {<br />
           this.textFieldError(email);<br />
           this.isValid = false;<br />
         }<br />
       },<br />
    <br />
       fieldAndListValidation: function() {<br />
         var fields = this.form.querySelectorAll('.mimi_field.required');<br />
    <br />
         for (var i = 0; i &lt; fields.length; ++i) {<br />
           var field = fields[i],<br />
               type  = this.fieldType(field);<br />
           if (type === 'checkboxes' || type === 'radio_buttons' || type === 'age_check') {<br />
             this.checkboxAndRadioValidation(field);<br />
           } else {<br />
             this.textAndDropdownValidation(field, type);<br />
           }<br />
         }<br />
       },<br />
    <br />
       fieldType: function(field) {<br />
         var type = field.querySelectorAll('.field_type');<br />
    <br />
         if (type.length) {<br />
           return type[0].getAttribute('data-field-type');<br />
         } else if (field.className.indexOf('checkgroup') &gt;= 0) {<br />
           return 'checkboxes';<br />
         } else {<br />
           return 'text_field';<br />
         }<br />
       },<br />
    <br />
       checkboxAndRadioValidation: function(field) {<br />
         var inputs   = field.getElementsByTagName('input'),<br />
             selected = false;<br />
    <br />
         for (var i = 0; i &lt; inputs.length; ++i) {<br />
           var input = inputs[i];<br />
           if((input.type === 'checkbox' || input.type === 'radio') &amp;&amp; input.checked) {<br />
             selected = true;<br />
           }<br />
         }<br />
    <br />
         if (selected) {<br />
           field.className = field.className.replace(/ invalid/g, '');<br />
         } else {<br />
           if (field.className.indexOf('invalid') === -1) {<br />
             field.className += ' invalid';<br />
           }<br />
    <br />
           this.isValid = false;<br />
         }<br />
       },<br />
    <br />
       textAndDropdownValidation: function(field, type) {<br />
         var inputs = field.getElementsByTagName('input');<br />
    <br />
         for (var i = 0; i &lt; inputs.length; ++i) {<br />
           var input = inputs[i];<br />
           if (input.name.indexOf('signup') &gt;= 0) {<br />
             if (type === 'text_field') {<br />
               this.textValidation(input);<br />
             } else {<br />
               this.dropdownValidation(field, input);<br />
             }<br />
           }<br />
         }<br />
         this.htmlEmbedDropdownValidation(field);<br />
       },<br />
    <br />
       textValidation: function(input) {<br />
         if (input.id === 'signup_email') return;<br />
    <br />
         if (input.value) {<br />
           this.removeTextFieldError(input);<br />
         } else {<br />
           this.textFieldError(input);<br />
           this.isValid = false;<br />
         }<br />
       },<br />
    <br />
       dropdownValidation: function(field, input) {<br />
         if (input.value) {<br />
           field.className = field.className.replace(/ invalid/g, '');<br />
         } else {<br />
           if (field.className.indexOf('invalid') === -1) field.className += ' invalid';<br />
           this.onSelectCallback(input);<br />
           this.isValid = false;<br />
         }<br />
       },<br />
    <br />
       htmlEmbedDropdownValidation: function(field) {<br />
         var dropdowns = field.querySelectorAll('.mimi_html_dropdown');<br />
         var _this = this;<br />
    <br />
         for (var i = 0; i &lt; dropdowns.length; ++i) {<br />
           var dropdown = dropdowns[i];<br />
    <br />
           if (dropdown.value) {<br />
             field.className = field.className.replace(/ invalid/g, '');<br />
           } else {<br />
             if (field.className.indexOf('invalid') === -1) field.className += ' invalid';<br />
             this.isValid = false;<br />
             dropdown.onchange = (function(){ _this.validate(); });<br />
           }<br />
         }<br />
       },<br />
    <br />
       textFieldError: function(input) {<br />
         input.className   = 'required invalid';<br />
         input.placeholder = input.getAttribute('data-required-field');<br />
       },<br />
    <br />
       removeTextFieldError: function(input) {<br />
         input.className   = 'required';<br />
         input.placeholder = '';<br />
       },<br />
    <br />
       onSelectCallback: function(input) {<br />
         if (typeof Widget === 'undefined' || !Widget.BasicDropdown) return;<br />
    <br />
         var dropdownEl = input.parentNode,<br />
             instances  = Widget.BasicDropdown.instances,<br />
             _this = this;<br />
    <br />
         for (var i = 0; i &lt; instances.length; ++i) {<br />
           var instance = instances[i];<br />
           if (instance.wrapperEl === dropdownEl) {<br />
             instance.onSelect = function(){ _this.validate() };<br />
           }<br />
         }<br />
       },<br />
    <br />
       updateFormAfterValidation: function() {<br />
         this.form.className   = this.setFormClassName();<br />
         this.submit.value     = this.submitButtonText();<br />
         this.submit.disabled  = !this.isValid;<br />
         this.submit.className = this.isValid ? 'submit' : 'disabled';<br />
       },<br />
    <br />
       setFormClassName: function() {<br />
         var name = this.form.className;<br />
    <br />
         if (this.isValid) {<br />
           return name.replace(/\s?mimi_invalid/, '');<br />
         } else {<br />
           if (name.indexOf('mimi_invalid') === -1) {<br />
             return name += ' mimi_invalid';<br />
           } else {<br />
             return name;<br />
           }<br />
         }<br />
       },<br />
    <br />
       submitButtonText: function() {<br />
         var invalidFields = document.querySelectorAll('.invalid'),<br />
             text;<br />
    <br />
         if (this.isValid || !invalidFields) {<br />
           text = this.submit.getAttribute('data-default-text');<br />
         } else {<br />
           if (invalidFields.length || invalidFields[0].className.indexOf('checkgroup') === -1) {<br />
             text = this.submit.getAttribute('data-invalid-text');<br />
           } else {<br />
             text = this.submit.getAttribute('data-choose-list');<br />
           }<br />
         }<br />
         return text;<br />
       },<br />
    <br />
       submitForm: function() {<br />
         this.formSubmitting();<br />
    <br />
         var _this = this;<br />
         window[this.callbackName] = function(response) {<br />
           delete window[this.callbackName];<br />
           document.body.removeChild(script);<br />
           _this.onSubmitCallback(response);<br />
         };<br />
    <br />
         var script = document.createElement('script');<br />
         script.src = this.formUrl('json');<br />
         document.body.appendChild(script);<br />
       },<br />
    <br />
       formUrl: function(format) {<br />
         var action  = this.form.action;<br />
         if (format === 'json') action += '.json';<br />
         return action + '?callback=' + this.callbackName + '&amp;' + serialize(this.form);<br />
       },<br />
    <br />
       formSubmitting: function() {<br />
         this.form.className  += ' mimi_submitting';<br />
         this.submit.value     = this.submit.getAttribute('data-submitting-text');<br />
         this.submit.disabled  = true;<br />
         this.submit.className = 'disabled';<br />
       },<br />
    <br />
       onSubmitCallback: function(response) {<br />
         if (response.success) {<br />
           this.onSubmitSuccess(response.result);<br />
         } else {<br />
           top.location.href = this.formUrl('html');<br />
         }<br />
       },<br />
    <br />
       onSubmitSuccess: function(result) {<br />
         if (result.has_redirect) {<br />
           top.location.href = result.redirect;<br />
         } else if(result.single_opt_in || !result.confirmation_html) {<br />
           this.disableForm();<br />
           this.updateSubmitButtonText(this.submit.getAttribute('data-thanks'));<br />
         } else {<br />
           this.showConfirmationText(result.confirmation_html);<br />
         }<br />
       },<br />
    <br />
       showConfirmationText: function(html) {<br />
         var fields = this.form.querySelectorAll('.mimi_field');<br />
    <br />
         for (var i = 0; i &lt; fields.length; ++i) {<br />
           fields[i].style['display'] = 'none';<br />
         }<br />
    <br />
         (this.form.querySelectorAll('fieldset')[0] || this.form).innerHTML = html;<br />
       },<br />
    <br />
       disableForm: function() {<br />
         var elements = this.form.elements;<br />
         for (var i = 0; i &lt; elements.length; ++i) {<br />
           elements[i].disabled = true;<br />
         }<br />
       },<br />
    <br />
       updateSubmitButtonText: function(text) {<br />
         this.submit.value = text;<br />
       },<br />
    <br />
       revalidateOnChange: function() {<br />
         var fields = this.form.querySelectorAll(&quot;.mimi_field.required&quot;),<br />
             _this = this;<br />
    <br />
         var onTextFieldChange = function() {<br />
           if (this.getAttribute('name') === 'signup[email]') {<br />
             if (_this.validEmail.test(this.value)) _this.validate();<br />
           } else {<br />
             if (this.value.length === 1) _this.validate();<br />
           }<br />
         }<br />
    <br />
         for (var i = 0; i &lt; fields.length; ++i) {<br />
           var inputs = fields[i].getElementsByTagName('input');<br />
           for (var j = 0; j &lt; inputs.length; ++j) {<br />
             if (this.fieldType(fields[i]) === 'text_field') {<br />
               inputs[j].onkeyup = onTextFieldChange;<br />
               inputs[j].onchange = onTextFieldChange; <br />
             } else {<br />
               inputs[j].onchange = function(){ _this.validate() };<br />
             }<br />
           }<br />
         }<br />
       }<br />
     });<br />
    <br />
     if (document.addEventListener) {<br />
       document.addEventListener(&quot;DOMContentLoaded&quot;, function() {<br />
         new Mimi.Signups.EmbedValidation();<br />
       });<br />
     }<br />
     else {<br />
       window.attachEvent('onload', function() {<br />
         new Mimi.Signups.EmbedValidation();<br />
       });<br />
     }<br />
    })(this);<br />
    &lt;/script&gt;
  • Matomo analytics for wordpress

    15 octobre 2019, par Matomo Core Team — Community

    Self-hosting web analytics got a whole lot easier ! Introducing Matomo for WordPress

    Be the first to try it out ! Your feedback is much needed and appreciated

    Get a fully functioning Matomo (which is comparable to Google Analytics) in seconds ! How ? With the new Matomo Analytics for WordPress plugin. 

    Web analytics in WordPress has never been easier to get, or more powerful. Matomo Analytics for WordPress is the one-stop problem solver. It’ll save you time, money and give you the insights to help your website or business succeed. 

    Best of all, we get to further the goal of decentralising the internet. Our hope is for Matomo Analytics for WordPress to spread far and wide. We’re so excited that more and more people can now get their hands on this powerful, free, open-source analytics platform, in a few clicks !

    Download now and check it out !

    What do you get ?

    • No more signing up to third party analytics service (like Google)
    • No more sending away your valuable data to a third party service (like Google)
    • Easy setup – install with a few clicks, no tracking code installation or developer knowledge needed
    • 100% accurate data – no data sampling and no data limits 
    • Full data ownership – all data is stored on your servers and no one else can see your data
    • Privacy protection / GDPR compliance
    • Ecommerce tracking out-of-the-box (Woocommerce, Easy Digital Downloads, and MemberPress) and we’re keen to add many more over time
    • Powerful features – segmenting, comparing reports, different visualisations, real-time reports, visit logs and visitor profiles, Matomo Tag Manager, dashboards, data export, APIs, and many more
    • Compared to other WordPress solutions we don’t charge you extra for basic features that should work out-of-the-box
    • Just like Matomo On-Premise, Matomo Analytics for WordPress is free

    We need your feedback !

    We all know and love the versatility of WordPress – with over 55,000 plugins and all the different ways of hosting it. However, with this great versatility comes the potential for things to be missed, so we’re keen to hear your feedback.

    Thank you ! We really appreciate your help on this ❤️

    How do you get Matomo Analytics for WordPress ?

    You can then upload it in your WordPress by going to “Plugins => Add New”. During the upload, if you get an error like “Are you sure you want to do this ?”, we recommend you upload the extracted zip file on to your server and into your ‘wp-content/plugins’ folder manually using ftp or ssh. Make sure the plugin name is ‘matomo’.

    All you need is at least WordPress 4.8 and PHP 7.0 or later. MySQL 5.1+ is recommended. 

    The source code is available at : https://github.com/matomo-org/wp-matomo/

    In perfect harmony : Matomo and WordPress

    Matomo Analytics for WordPress

    The idea for this started two years ago when we realised the similarities between the Matomo and WordPress project. 

    Not only from a technological point of view – where both are based on PHP and MySQL and can be extended using plugins – but also from a philosophical, license and values point of view. We both believe in privacy, security, data ownership, openness, transparency, having things working out-of-the-box, simplicity etc. 

    WordPress is currently used on approximately 30% of all websites. Many of them use the self-hosted open-source WordPress version. Giving everyone in this market the opportunity to easily get a powerful web analytics platform for free, means a lot to us. We believe WordPress users get a real choice besides the standard solution of Google Analytics, and it furthers our effort and goal of decentralising the internet. 

    We’re hoping more people will be empowered to protect user privacy, have access to a great free and open-source tool, and keep control of data in their own hands.

    We hope you feel the same. Help us spread the word to your friends and get them in on this awesome new project !

    Share on facebook
    Share on twitter
    Share on linkedin

    FAQs

    Isn’t there already a WP-Matomo plugin for WordPress available ?

    Yes, the existing WP-Matomo (WP-Piwik) plugin is an awesome plugin to connect your existing Matomo On-Premise or Matomo Cloud account with WordPress. The difference is that this new plugin installs Matomo Analytics fully in your WordPress. So you get the convenience of having a powerful analytics platform within your WordPress.

    We highly recommend you install this new plugin if you use WordPress and are not running Matomo yet. 

    If you are already using Matomo on our Cloud or On-Premise, we’d still highly recommend you use WP-Matomo (WP-Piwik). So that you get an easier way of inserting the tracking code into your WordPress site and get insights faster.

    I have a high traffic website, will it be an issue ?

    If you have a lot of traffic, we’d advise you to install Matomo On-Premise separately. There’s no specific traffic threshold we can give you on when it’s better to use Matomo On-Premise. It really depends on your server. 

    We reckon if you have more than 500,000 page views a month, you may want to think about using Matomo On-Premise with WP-Matomo instead, but this is just an estimate. In general, if the load on your server is already quite high, then it might be better to install Matomo on a separate server. See also recommended server sizing for running Matomo.

    How do I report a bug or request a new feature in Matomo for WordPress ?

    Please create an issue, on our repository whenever you find a bug or if you have any suggestion or ideas of improvement. We want to build an outstanding analytics experience for WordPress !

    Have another question you’re dying to ask ? The Matomo for WordPress FAQ page might have the answer you need. 

    Matomo Analytics for WordPress newsletter

    Get ahead of the crowd – signup to our exclusive Matomo for WordPress newsletter to get the latest updates on this exciting new project.

    &lt;script type=&quot;text/javascript&quot;&gt;<br />
    (function(global) {<br />
     function serialize(form){if(!form||form.nodeName!==&quot;FORM&quot;){return }var i,j,q=[];for(i=form.elements.length-1;i&gt;=0;i=i-1){if(form.elements[i].name===&quot;&quot;){continue}switch(form.elements[i].nodeName){case&quot;INPUT&quot;:switch(form.elements[i].type){case&quot;text&quot;:case&quot;hidden&quot;:case&quot;password&quot;:case&quot;button&quot;:case&quot;reset&quot;:case&quot;submit&quot;:q.push(form.elements[i].name+&quot;=&quot;+encodeURIComponent(form.elements[i].value));break;case&quot;checkbox&quot;:case&quot;radio&quot;:if(form.elements[i].checked){q.push(form.elements[i].name+&quot;=&quot;+encodeURIComponent(form.elements[i].value))}break;case&quot;file&quot;:break}break;case&quot;TEXTAREA&quot;:q.push(form.elements[i].name+&quot;=&quot;+encodeURIComponent(form.elements[i].value));break;case&quot;SELECT&quot;:switch(form.elements[i].type){case&quot;select-one&quot;:q.push(form.elements[i].name+&quot;=&quot;+encodeURIComponent(form.elements[i].value));break;case&quot;select-multiple&quot;:for(j=form.elements[i].options.length-1;j&gt;=0;j=j-1){if(form.elements[i].options[j].selected){q.push(form.elements[i].name+&quot;=&quot;+encodeURIComponent(form.elements[i].options[j].value))}}break}break;case&quot;BUTTON&quot;:switch(form.elements[i].type){case&quot;reset&quot;:case&quot;submit&quot;:case&quot;button&quot;:q.push(form.elements[i].name+&quot;=&quot;+encodeURIComponent(form.elements[i].value));break}break}}return q.join(&quot;&amp;&quot;)};<br />
    <br />
    <br />
     function extend(destination, source) {<br />
       for (var prop in source) {<br />
         destination[prop] = source[prop];<br />
       }<br />
     }<br />
    <br />
     if (!Mimi) var Mimi = {};<br />
     if (!Mimi.Signups) Mimi.Signups = {};<br />
    <br />
     Mimi.Signups.EmbedValidation = function() {<br />
       this.initialize();<br />
    <br />
       var _this = this;<br />
       if (document.addEventListener) {<br />
         this.form.addEventListener('submit', function(e){<br />
           _this.onFormSubmit(e);<br />
         });<br />
       } else {<br />
         this.form.attachEvent('onsubmit', function(e){<br />
           _this.onFormSubmit(e);<br />
         });<br />
       }<br />
     };<br />
    <br />
     extend(Mimi.Signups.EmbedValidation.prototype, {<br />
       initialize: function() {<br />
         this.form         = document.getElementById('ema_signup_form');<br />
         this.submit       = document.getElementById('webform_submit_button');<br />
         this.callbackName = 'jsonp_callback_' + Math.round(100000 * Math.random());<br />
         this.validEmail   = /.+@.+\..+/<br />
       },<br />
    <br />
       onFormSubmit: function(e) {<br />
         e.preventDefault();<br />
    <br />
         this.validate();<br />
         if (this.isValid) {<br />
           this.submitForm();<br />
         } else {<br />
           this.revalidateOnChange();<br />
         }<br />
       },<br />
    <br />
       validate: function() {<br />
         this.isValid = true;<br />
         this.emailValidation();<br />
         this.fieldAndListValidation();<br />
         this.updateFormAfterValidation();<br />
       },<br />
    <br />
       emailValidation: function() {<br />
         var email = document.getElementById('signup_email');<br />
    <br />
         if (this.validEmail.test(email.value)) {<br />
           this.removeTextFieldError(email);<br />
         } else {<br />
           this.textFieldError(email);<br />
           this.isValid = false;<br />
         }<br />
       },<br />
    <br />
       fieldAndListValidation: function() {<br />
         var fields = this.form.querySelectorAll('.mimi_field.required');<br />
    <br />
         for (var i = 0; i &lt; fields.length; ++i) {<br />
           var field = fields[i],<br />
               type  = this.fieldType(field);<br />
           if (type === 'checkboxes' || type === 'radio_buttons' || type === 'age_check') {<br />
             this.checkboxAndRadioValidation(field);<br />
           } else {<br />
             this.textAndDropdownValidation(field, type);<br />
           }<br />
         }<br />
       },<br />
    <br />
       fieldType: function(field) {<br />
         var type = field.querySelectorAll('.field_type');<br />
    <br />
         if (type.length) {<br />
           return type[0].getAttribute('data-field-type');<br />
         } else if (field.className.indexOf('checkgroup') &gt;= 0) {<br />
           return 'checkboxes';<br />
         } else {<br />
           return 'text_field';<br />
         }<br />
       },<br />
    <br />
       checkboxAndRadioValidation: function(field) {<br />
         var inputs   = field.getElementsByTagName('input'),<br />
             selected = false;<br />
    <br />
         for (var i = 0; i &lt; inputs.length; ++i) {<br />
           var input = inputs[i];<br />
           if((input.type === 'checkbox' || input.type === 'radio') &amp;&amp; input.checked) {<br />
             selected = true;<br />
           }<br />
         }<br />
    <br />
         if (selected) {<br />
           field.className = field.className.replace(/ invalid/g, '');<br />
         } else {<br />
           if (field.className.indexOf('invalid') === -1) {<br />
             field.className += ' invalid';<br />
           }<br />
    <br />
           this.isValid = false;<br />
         }<br />
       },<br />
    <br />
       textAndDropdownValidation: function(field, type) {<br />
         var inputs = field.getElementsByTagName('input');<br />
    <br />
         for (var i = 0; i &lt; inputs.length; ++i) {<br />
           var input = inputs[i];<br />
           if (input.name.indexOf('signup') &gt;= 0) {<br />
             if (type === 'text_field') {<br />
               this.textValidation(input);<br />
             } else {<br />
               this.dropdownValidation(field, input);<br />
             }<br />
           }<br />
         }<br />
         this.htmlEmbedDropdownValidation(field);<br />
       },<br />
    <br />
       textValidation: function(input) {<br />
         if (input.id === 'signup_email') return;<br />
    <br />
         if (input.value) {<br />
           this.removeTextFieldError(input);<br />
         } else {<br />
           this.textFieldError(input);<br />
           this.isValid = false;<br />
         }<br />
       },<br />
    <br />
       dropdownValidation: function(field, input) {<br />
         if (input.value) {<br />
           field.className = field.className.replace(/ invalid/g, '');<br />
         } else {<br />
           if (field.className.indexOf('invalid') === -1) field.className += ' invalid';<br />
           this.onSelectCallback(input);<br />
           this.isValid = false;<br />
         }<br />
       },<br />
    <br />
       htmlEmbedDropdownValidation: function(field) {<br />
         var dropdowns = field.querySelectorAll('.mimi_html_dropdown');<br />
         var _this = this;<br />
    <br />
         for (var i = 0; i &lt; dropdowns.length; ++i) {<br />
           var dropdown = dropdowns[i];<br />
    <br />
           if (dropdown.value) {<br />
             field.className = field.className.replace(/ invalid/g, '');<br />
           } else {<br />
             if (field.className.indexOf('invalid') === -1) field.className += ' invalid';<br />
             this.isValid = false;<br />
             dropdown.onchange = (function(){ _this.validate(); });<br />
           }<br />
         }<br />
       },<br />
    <br />
       textFieldError: function(input) {<br />
         input.className   = 'required invalid';<br />
         input.placeholder = input.getAttribute('data-required-field');<br />
       },<br />
    <br />
       removeTextFieldError: function(input) {<br />
         input.className   = 'required';<br />
         input.placeholder = '';<br />
       },<br />
    <br />
       onSelectCallback: function(input) {<br />
         if (typeof Widget === 'undefined' || !Widget.BasicDropdown) return;<br />
    <br />
         var dropdownEl = input.parentNode,<br />
             instances  = Widget.BasicDropdown.instances,<br />
             _this = this;<br />
    <br />
         for (var i = 0; i &lt; instances.length; ++i) {<br />
           var instance = instances[i];<br />
           if (instance.wrapperEl === dropdownEl) {<br />
             instance.onSelect = function(){ _this.validate() };<br />
           }<br />
         }<br />
       },<br />
    <br />
       updateFormAfterValidation: function() {<br />
         this.form.className   = this.setFormClassName();<br />
         this.submit.value     = this.submitButtonText();<br />
         this.submit.disabled  = !this.isValid;<br />
         this.submit.className = this.isValid ? 'submit' : 'disabled';<br />
       },<br />
    <br />
       setFormClassName: function() {<br />
         var name = this.form.className;<br />
    <br />
         if (this.isValid) {<br />
           return name.replace(/\s?mimi_invalid/, '');<br />
         } else {<br />
           if (name.indexOf('mimi_invalid') === -1) {<br />
             return name += ' mimi_invalid';<br />
           } else {<br />
             return name;<br />
           }<br />
         }<br />
       },<br />
    <br />
       submitButtonText: function() {<br />
         var invalidFields = document.querySelectorAll('.invalid'),<br />
             text;<br />
    <br />
         if (this.isValid || !invalidFields) {<br />
           text = this.submit.getAttribute('data-default-text');<br />
         } else {<br />
           if (invalidFields.length || invalidFields[0].className.indexOf('checkgroup') === -1) {<br />
             text = this.submit.getAttribute('data-invalid-text');<br />
           } else {<br />
             text = this.submit.getAttribute('data-choose-list');<br />
           }<br />
         }<br />
         return text;<br />
       },<br />
    <br />
       submitForm: function() {<br />
         this.formSubmitting();<br />
    <br />
         var _this = this;<br />
         window[this.callbackName] = function(response) {<br />
           delete window[this.callbackName];<br />
           document.body.removeChild(script);<br />
           _this.onSubmitCallback(response);<br />
         };<br />
    <br />
         var script = document.createElement('script');<br />
         script.src = this.formUrl('json');<br />
         document.body.appendChild(script);<br />
       },<br />
    <br />
       formUrl: function(format) {<br />
         var action  = this.form.action;<br />
         if (format === 'json') action += '.json';<br />
         return action + '?callback=' + this.callbackName + '&amp;' + serialize(this.form);<br />
       },<br />
    <br />
       formSubmitting: function() {<br />
         this.form.className  += ' mimi_submitting';<br />
         this.submit.value     = this.submit.getAttribute('data-submitting-text');<br />
         this.submit.disabled  = true;<br />
         this.submit.className = 'disabled';<br />
       },<br />
    <br />
       onSubmitCallback: function(response) {<br />
         if (response.success) {<br />
           this.onSubmitSuccess(response.result);<br />
         } else {<br />
           top.location.href = this.formUrl('html');<br />
         }<br />
       },<br />
    <br />
       onSubmitSuccess: function(result) {<br />
         if (result.has_redirect) {<br />
           top.location.href = result.redirect;<br />
         } else if(result.single_opt_in || !result.confirmation_html) {<br />
           this.disableForm();<br />
           this.updateSubmitButtonText(this.submit.getAttribute('data-thanks'));<br />
         } else {<br />
           this.showConfirmationText(result.confirmation_html);<br />
         }<br />
       },<br />
    <br />
       showConfirmationText: function(html) {<br />
         var fields = this.form.querySelectorAll('.mimi_field');<br />
    <br />
         for (var i = 0; i &lt; fields.length; ++i) {<br />
           fields[i].style['display'] = 'none';<br />
         }<br />
    <br />
         (this.form.querySelectorAll('fieldset')[0] || this.form).innerHTML = html;<br />
       },<br />
    <br />
       disableForm: function() {<br />
         var elements = this.form.elements;<br />
         for (var i = 0; i &lt; elements.length; ++i) {<br />
           elements[i].disabled = true;<br />
         }<br />
       },<br />
    <br />
       updateSubmitButtonText: function(text) {<br />
         this.submit.value = text;<br />
       },<br />
    <br />
       revalidateOnChange: function() {<br />
         var fields = this.form.querySelectorAll(&quot;.mimi_field.required&quot;),<br />
             _this = this;<br />
    <br />
         var onTextFieldChange = function() {<br />
           if (this.getAttribute('name') === 'signup[email]') {<br />
             if (_this.validEmail.test(this.value)) _this.validate();<br />
           } else {<br />
             if (this.value.length === 1) _this.validate();<br />
           }<br />
         }<br />
    <br />
         for (var i = 0; i &lt; fields.length; ++i) {<br />
           var inputs = fields[i].getElementsByTagName('input');<br />
           for (var j = 0; j &lt; inputs.length; ++j) {<br />
             if (this.fieldType(fields[i]) === 'text_field') {<br />
               inputs[j].onkeyup = onTextFieldChange;<br />
               inputs[j].onchange = onTextFieldChange; <br />
             } else {<br />
               inputs[j].onchange = function(){ _this.validate() };<br />
             }<br />
           }<br />
         }<br />
       }<br />
     });<br />
    <br />
     if (document.addEventListener) {<br />
       document.addEventListener(&quot;DOMContentLoaded&quot;, function() {<br />
         new Mimi.Signups.EmbedValidation();<br />
       });<br />
     }<br />
     else {<br />
       window.attachEvent('onload', function() {<br />
         new Mimi.Signups.EmbedValidation();<br />
       });<br />
     }<br />
    })(this);<br />
    &lt;/script&gt;