Recherche avancée

Médias (91)

Autres articles (68)

  • Personnaliser en ajoutant son logo, sa bannière ou son image de fond

    5 septembre 2013, par

    Certains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;

  • MediaSPIP v0.2

    21 juin 2013, par

    MediaSPIP 0.2 est la première version de MediaSPIP stable.
    Sa date de sortie officielle est le 21 juin 2013 et est annoncée ici.
    Le fichier zip ici présent contient uniquement les sources de MediaSPIP en version standalone.
    Comme pour la version précédente, il est nécessaire d’installer manuellement l’ensemble des dépendances logicielles sur le serveur.
    Si vous souhaitez utiliser cette archive pour une installation en mode ferme, il vous faudra également procéder à d’autres modifications (...)

  • Publier sur MédiaSpip

    13 juin 2013

    Puis-je poster des contenus à partir d’une tablette Ipad ?
    Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir

Sur d’autres sites (10097)

  • Revision 34808 : class url pour le lien et non org (site VS société, merci tetue)

    31 janvier 2010, par brunobergot@… — Log

    class url pour le lien et non org (site VS société, merci tetue)

  • FFMPEG-PHP on Windows (not Linux as prev question) error Unknown encoder 'libfaac'

    19 novembre 2020, par Jonathan

    I am doing this on a Windows server and is not already answered as per the other question on here on a Linux server.

    


    Im using FFMPEG on a project handling video uploads and I keep getting an issue with Videos with AAC audio encoding.

    


    I tried using aac and other aac encoders, but the windows version of FFMPEG says unknown encoders. I tried without setting an AudioCode so it might convert to native. But still the same.

    


    Please see the log output below :

    


    <pre>object(FFMpeg\Exception\RuntimeException)#35 (7) {&#xA;  ["message":protected]=>&#xA;  string(15) "Encoding failed"&#xA;  ["string":"Exception":private]=>&#xA;  string(0) ""&#xA;  ["code":protected]=>&#xA;  int(0)&#xA;  ["file":protected]=>&#xA;  string(108) "C:\inetpub\wwwroot\dev\ffmpeg-lib\ffmpeg-php\vendor\php-ffmpeg\php-ffmpeg\src\FFMpeg\Media\AbstractVideo.php"&#xA;  ["line":protected]=>&#xA;  int(106)&#xA;  ["trace":"Exception":private]=>&#xA;  array(1) {&#xA;    [0]=>&#xA;    array(5) {&#xA;      ["file"]=>&#xA;      string(45) "C:\inetpub\wwwroot\dev\ffmpeg-lib\process.php"&#xA;      ["line"]=>&#xA;      int(35)&#xA;      ["function"]=>&#xA;      string(4) "save"&#xA;      ["class"]=>&#xA;      string(26) "FFMpeg\Media\AbstractVideo"&#xA;      ["type"]=>&#xA;      string(2) "->"&#xA;    }&#xA;  }&#xA;  ["previous":"Exception":private]=>&#xA;  object(Alchemy\BinaryDriver\Exception\ExecutionFailureException)#43 (9) {&#xA;    ["command":protected]=>&#xA;    string(397) "C:\ffmpeg\bin\ffmpeg.exe -y -ss 00:00:17.00 -i "temp/temp_20201110-100656_1080p-220mb.mp4" -t 00:00:52.00 -threads 12 -vcodec libx264 -acodec libfaac -b:v 1000k -refs 6 -coder 1 -sc_threshold 40 -flags &#x2B;loop -me_range 16 -subq 7 -i_qfactor 0.71 -qcomp 0.6 -qdiff 4 -trellis 1 -b:a 128k -pass 1 -passlogfile "W:/TempIIS\ffmpeg-passes5fabd88bb6b0912dmm/pass-5fabd88bb6c3b" "temp/20201111-122651.mp4""&#xA;    ["errorOutput":protected]=>&#xA;    string(2301) "ffmpeg version git-2020-08-31-4a11a6f Copyright (c) 2000-2020 the FFmpeg developers&#xA;  built with gcc 10.2.1 (GCC) 20200805&#xA;  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libgsm --enable-librav1e --enable-libsvtav1 --disable-w32threads --enable-libmfx --enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf&#xA;  libavutil      56. 58.100 / 56. 58.100&#xA;  libavcodec     58.101.101 / 58.101.101&#xA;  libavformat    58. 51.101 / 58. 51.101&#xA;  libavdevice    58. 11.101 / 58. 11.101&#xA;  libavfilter     7. 87.100 /  7. 87.100&#xA;  libswscale      5.  8.100 /  5.  8.100&#xA;  libswresample   3.  8.100 /  3.  8.100&#xA;  libpostproc    55.  8.100 / 55.  8.100&#xA;Input #0, mov,mp4,m4a,3gp,3g2,mj2, from &#x27;temp/temp_20201110-100656_1080p-220mb.mp4&#x27;:&#xA;  Metadata:&#xA;    major_brand     : mp42&#xA;    minor_version   : 19529854&#xA;    compatible_brands: mp42isom&#xA;    creation_time   : 2016-04-11T06:32:53.000000Z&#xA;  Duration: 00:02:25.98, start: 0.000000, bitrate: 13772 kb/s&#xA;    Stream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)&#xA;    Metadata:&#xA;      creation_time   : 2016-04-11T06:32:53.000000Z&#xA;      handler_name    : Sound Media Handler&#xA;    Stream #0:1(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 13639 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)&#xA;    Metadata:&#xA;      creation_time   : 2016-04-11T06:32:53.000000Z&#xA;      handler_name    : Video Media Handler&#xA;      encoder         : AVC Coding&#xA;Unknown encoder &#x27;libfaac&#x27;&#xA;"&#xA;    ["message":protected]=>&#xA;    string(2750) "ffmpeg failed to execute command C:\ffmpeg\bin\ffmpeg.exe -y -ss 00:00:17.00 -i "temp/temp_20201110-100656_1080p-220mb.mp4" -t 00:00:52.00 -threads 12 -vcodec libx264 -acodec libfaac -b:v 1000k -refs 6 -coder 1 -sc_threshold 40 -flags &#x2B;loop -me_range 16 -subq 7 -i_qfactor 0.71 -qcomp 0.6 -qdiff 4 -trellis 1 -b:a 128k -pass 1 -passlogfile "W:/TempIIS\ffmpeg-passes5fabd88bb6b0912dmm/pass-5fabd88bb6c3b" "temp/20201111-122651.mp4":&#xA;&#xA;Error Output:&#xA;&#xA; ffmpeg version git-2020-08-31-4a11a6f Copyright (c) 2000-2020 the FFmpeg developers&#xA;  built with gcc 10.2.1 (GCC) 20200805&#xA;  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libgsm --enable-librav1e --enable-libsvtav1 --disable-w32threads --enable-libmfx --enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf&#xA;  libavutil      56. 58.100 / 56. 58.100&#xA;  libavcodec     58.101.101 / 58.101.101&#xA;  libavformat    58. 51.101 / 58. 51.101&#xA;  libavdevice    58. 11.101 / 58. 11.101&#xA;  libavfilter     7. 87.100 /  7. 87.100&#xA;  libswscale      5.  8.100 /  5.  8.100&#xA;  libswresample   3.  8.100 /  3.  8.100&#xA;  libpostproc    55.  8.100 / 55.  8.100&#xA;Input #0, mov,mp4,m4a,3gp,3g2,mj2, from &#x27;temp/temp_20201110-100656_1080p-220mb.mp4&#x27;:&#xA;  Metadata:&#xA;    major_brand     : mp42&#xA;    minor_version   : 19529854&#xA;    compatible_brands: mp42isom&#xA;    creation_time   : 2016-04-11T06:32:53.000000Z&#xA;  Duration: 00:02:25.98, start: 0.000000, bitrate: 13772 kb/s&#xA;    Stream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)&#xA;    Metadata:&#xA;      creation_time   : 2016-04-11T06:32:53.000000Z&#xA;      handler_name    : Sound Media Handler&#xA;    Stream #0:1(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 13639 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)&#xA;    Metadata:&#xA;      creation_time   : 2016-04-11T06:32:53.000000Z&#xA;      handler_name    : Video Media Handler&#xA;      encoder         : AVC Coding&#xA;Unknown encoder &#x27;libfaac&#x27;&#xA;"&#xA;    ["string":"Exception":private]=>&#xA;    string(0) ""&#xA;    ["code":protected]=>&#xA;    int(0)&#xA;    ["file":protected]=>&#xA;    string(116) "C:\inetpub\wwwroot\dev\ffmpeg-lib\ffmpeg-php\vendor\alchemy\binary-driver\src\Alchemy\BinaryDriver\ProcessRunner.php"&#xA;    ["line":protected]=>&#xA;    int(95)&#xA;    ["trace":"Exception":private]=>&#xA;    array(5) {&#xA;      [0]=>&#xA;      array(5) {&#xA;        ["file"]=>&#xA;        string(116) "C:\inetpub\wwwroot\dev\ffmpeg-lib\ffmpeg-php\vendor\alchemy\binary-driver\src\Alchemy\BinaryDriver\ProcessRunner.php"&#xA;        ["line"]=>&#xA;        int(73)&#xA;        ["function"]=>&#xA;        string(18) "doExecutionFailure"&#xA;        ["class"]=>&#xA;        string(34) "Alchemy\BinaryDriver\ProcessRunner"&#xA;        ["type"]=>&#xA;        string(2) "->"&#xA;      }&#xA;      [1]=>&#xA;      array(5) {&#xA;        ["file"]=>&#xA;        string(117) "C:\inetpub\wwwroot\dev\ffmpeg-lib\ffmpeg-php\vendor\alchemy\binary-driver\src\Alchemy\BinaryDriver\AbstractBinary.php"&#xA;        ["line"]=>&#xA;        int(207)&#xA;        ["function"]=>&#xA;        string(3) "run"&#xA;        ["class"]=>&#xA;        string(34) "Alchemy\BinaryDriver\ProcessRunner"&#xA;        ["type"]=>&#xA;        string(2) "->"&#xA;      }&#xA;      [2]=>&#xA;      array(5) {&#xA;        ["file"]=>&#xA;        string(117) "C:\inetpub\wwwroot\dev\ffmpeg-lib\ffmpeg-php\vendor\alchemy\binary-driver\src\Alchemy\BinaryDriver\AbstractBinary.php"&#xA;        ["line"]=>&#xA;        int(136)&#xA;        ["function"]=>&#xA;        string(3) "run"&#xA;        ["class"]=>&#xA;        string(35) "Alchemy\BinaryDriver\AbstractBinary"&#xA;        ["type"]=>&#xA;        string(2) "->"&#xA;      }&#xA;      [3]=>&#xA;      array(5) {&#xA;        ["file"]=>&#xA;        string(108) "C:\inetpub\wwwroot\dev\ffmpeg-lib\ffmpeg-php\vendor\php-ffmpeg\php-ffmpeg\src\FFMpeg\Media\AbstractVideo.php"&#xA;        ["line"]=>&#xA;        int(96)&#xA;        ["function"]=>&#xA;        string(7) "command"&#xA;        ["class"]=>&#xA;        string(35) "Alchemy\BinaryDriver\AbstractBinary"&#xA;        ["type"]=>&#xA;        string(2) "->"&#xA;      }&#xA;      [4]=>&#xA;      array(5) {&#xA;        ["file"]=>&#xA;        string(45) "C:\inetpub\wwwroot\dev\ffmpeg-lib\process.php"&#xA;        ["line"]=>&#xA;        int(35)&#xA;        ["function"]=>&#xA;        string(4) "save"&#xA;        ["class"]=>&#xA;        string(26) "FFMpeg\Media\AbstractVideo"&#xA;        ["type"]=>&#xA;        string(2) "->"&#xA;      }&#xA;    }&#xA;    ["previous":"Exception":private]=>&#xA;    NULL&#xA;  }&#xA;}&#xA;</pre>

    &#xA;

    Output of ffmpeg -encoders

    &#xA;

       V..... a64multi             Multicolor charset for Commodore 64 (codec a64_multi)&#xA; V..... a64multi5            Multicolor charset for Commodore 64, extended with 5th color (colram) (codec a64_multi5)&#xA; V..... alias_pix            Alias/Wavefront PIX image&#xA; V..... amv                  AMV Video&#xA; V..... apng                 APNG (Animated Portable Network Graphics) image&#xA; V..... asv1                 ASUS V1&#xA; V..... asv2                 ASUS V2&#xA; V..... libaom-av1           libaom AV1 (codec av1)&#xA; V..... librav1e             librav1e AV1 (codec av1)&#xA; V..... libsvtav1            SVT-AV1(Scalable Video Technology for AV1) encoder (codec av1)&#xA; V..... avrp                 Avid 1:1 10-bit RGB Packer&#xA; V..X.. avui                 Avid Meridien Uncompressed&#xA; V..... ayuv                 Uncompressed packed MS 4:4:4:4&#xA; V..... bmp                  BMP (Windows and OS/2 bitmap)&#xA; VF.... cfhd                 GoPro CineForm HD&#xA; V..... cinepak              Cinepak&#xA; V..... cljr                 Cirrus Logic AccuPak&#xA; V.S... vc2                  SMPTE VC-2 (codec dirac)&#xA; VFS... dnxhd                VC3/DNxHD&#xA; V..... dpx                  DPX (Digital Picture Exchange) image&#xA; VFS... dvvideo              DV (Digital Video)&#xA; V.S... ffv1                 FFmpeg video codec #1&#xA; VF.... ffvhuff              Huffyuv FFmpeg variant&#xA; V..... fits                 Flexible Image Transport System&#xA; V..... flashsv              Flash Screen Video&#xA; V..... flashsv2             Flash Screen Video Version 2&#xA; V..... flv                  FLV / Sorenson Spark / Sorenson H.263 (Flash Video) (codec flv1)&#xA; V..... gif                  GIF (Graphics Interchange Format)&#xA; V..... h261                 H.261&#xA; V..... h263                 H.263 / H.263-1996&#xA; V.S... h263p                H.263&#x2B; / H.263-1998 / H.263 version 2&#xA; V..... libx264              libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264)&#xA; V..... libx264rgb           libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 RGB (codec h264)&#xA; V..... h264_amf             AMD AMF H.264 Encoder (codec h264)&#xA; V..... h264_mf              H264 via MediaFoundation (codec h264)&#xA; V..... h264_nvenc           NVIDIA NVENC H.264 encoder (codec h264)&#xA; V..... h264_qsv             H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (Intel Quick Sync Video acceleration) (codec h264)&#xA; V..... nvenc                NVIDIA NVENC H.264 encoder (codec h264)&#xA; V..... nvenc_h264           NVIDIA NVENC H.264 encoder (codec h264)&#xA; V..... hap                  Vidvox Hap&#xA; V..... libx265              libx265 H.265 / HEVC (codec hevc)&#xA; V..... nvenc_hevc           NVIDIA NVENC hevc encoder (codec hevc)&#xA; V..... hevc_amf             AMD AMF HEVC encoder (codec hevc)&#xA; V..... hevc_mf              HEVC via MediaFoundation (codec hevc)&#xA; V..... hevc_nvenc           NVIDIA NVENC hevc encoder (codec hevc)&#xA; V..... hevc_qsv             HEVC (Intel Quick Sync Video acceleration) (codec hevc)&#xA; VF.... huffyuv              Huffyuv / HuffYUV&#xA; V..... jpeg2000             JPEG 2000&#xA; VF.... libopenjpeg          OpenJPEG JPEG 2000 (codec jpeg2000)&#xA; VF.... jpegls               JPEG-LS&#xA; VF.... ljpeg                Lossless JPEG&#xA; VF.... magicyuv             MagicYUV video&#xA; VFS... mjpeg                MJPEG (Motion JPEG)&#xA; V..... mjpeg_qsv            MJPEG (Intel Quick Sync Video acceleration) (codec mjpeg)&#xA; V.S... mpeg1video           MPEG-1 video&#xA; V.S... mpeg2video           MPEG-2 video&#xA; V..... mpeg2_qsv            MPEG-2 video (Intel Quick Sync Video acceleration) (codec mpeg2video)&#xA; V.S... mpeg4                MPEG-4 part 2&#xA; V..... libxvid              libxvidcore MPEG-4 part 2 (codec mpeg4)&#xA; V..... msmpeg4v2            MPEG-4 part 2 Microsoft variant version 2&#xA; V..... msmpeg4              MPEG-4 part 2 Microsoft variant version 3 (codec msmpeg4v3)&#xA; V..... msvideo1             Microsoft Video-1&#xA; V..... pam                  PAM (Portable AnyMap) image&#xA; V..... pbm                  PBM (Portable BitMap) image&#xA; V..... pcx                  PC Paintbrush PCX image&#xA; V..... pgm                  PGM (Portable GrayMap) image&#xA; V..... pgmyuv               PGMYUV (Portable GrayMap YUV) image&#xA; VF.... png                  PNG (Portable Network Graphics) image&#xA; V..... ppm                  PPM (Portable PixelMap) image&#xA; VF.... prores               Apple ProRes&#xA; VF.... prores_aw            Apple ProRes (codec prores)&#xA; VFS... prores_ks            Apple ProRes (iCodec Pro) (codec prores)&#xA; V..... qtrle                QuickTime Animation (RLE) video&#xA; V..... r10k                 AJA Kona 10-bit RGB Codec&#xA; V..... r210                 Uncompressed RGB 10-bit&#xA; V..... rawvideo             raw video&#xA; V..... roqvideo             id RoQ video (codec roq)&#xA; V..... rpza                 QuickTime video (RPZA)&#xA; V..... rv10                 RealVideo 1.0&#xA; V..... rv20                 RealVideo 2.0&#xA; V..... sgi                  SGI image&#xA; V..... snow                 Snow&#xA; V..... sunrast              Sun Rasterfile image&#xA; V..... svq1                 Sorenson Vector Quantizer 1 / Sorenson Video 1 / SVQ1&#xA; V..... targa                Truevision Targa image&#xA; V..... libtheora            libtheora Theora (codec theora)&#xA; VF.... tiff                 TIFF image&#xA; VF.... utvideo              Ut Video&#xA; V..... v210                 Uncompressed 4:2:2 10-bit&#xA; V..... v308                 Uncompressed packed 4:4:4&#xA; V..... v408                 Uncompressed packed QT 4:4:4:4&#xA; V..... v410                 Uncompressed 4:4:4 10-bit&#xA; V..... libvpx               libvpx VP8 (codec vp8)&#xA; V..... libvpx-vp9           libvpx VP9 (codec vp9)&#xA; V..... vp9_qsv              VP9 video (Intel Quick Sync Video acceleration) (codec vp9)&#xA; V..... libwebp_anim         libwebp WebP image (codec webp)&#xA; V..... libwebp              libwebp WebP image (codec webp)&#xA; V..... wmv1                 Windows Media Video 7&#xA; V..... wmv2                 Windows Media Video 8&#xA; V..... wrapped_avframe      AVFrame to AVPacket passthrough&#xA; V..... xbm                  XBM (X BitMap) image&#xA; V..... xface                X-face image&#xA; V..... xwd                  XWD (X Window Dump) image&#xA; V..... y41p                 Uncompressed YUV 4:1:1 12-bit&#xA; V..... yuv4                 Uncompressed packed 4:2:0&#xA; VF.... zlib                 LCL (LossLess Codec Library) ZLIB&#xA; V..... zmbv                 Zip Motion Blocks Video&#xA; A..... aac                  AAC (Advanced Audio Coding)&#xA; A..... aac_mf               AAC via MediaFoundation (codec aac)&#xA; A..... ac3                  ATSC A/52A (AC-3)&#xA; A..... ac3_fixed            ATSC A/52A (AC-3) (codec ac3)&#xA; A..... ac3_mf               AC3 via MediaFoundation (codec ac3)&#xA; A..... adpcm_adx            SEGA CRI ADX ADPCM&#xA; A..... adpcm_argo           ADPCM Argonaut Games&#xA; A..... g722                 G.722 ADPCM (codec adpcm_g722)&#xA; A..... g726                 G.726 ADPCM (codec adpcm_g726)&#xA; A..... g726le               G.726 little endian ADPCM ("right-justified") (codec adpcm_g726le)&#xA; A..... adpcm_ima_apm        ADPCM IMA Ubisoft APM&#xA; A..... adpcm_ima_qt         ADPCM IMA QuickTime&#xA; A..... adpcm_ima_ssi        ADPCM IMA Simon &amp; Schuster Interactive&#xA; A..... adpcm_ima_wav        ADPCM IMA WAV&#xA; A..... adpcm_ms             ADPCM Microsoft&#xA; A..... adpcm_swf            ADPCM Shockwave Flash&#xA; A..... adpcm_yamaha         ADPCM Yamaha&#xA; A..... alac                 ALAC (Apple Lossless Audio Codec)&#xA; A..... libopencore_amrnb    OpenCORE AMR-NB (Adaptive Multi-Rate Narrow-Band) (codec amr_nb)&#xA; A..... libvo_amrwbenc       Android VisualOn AMR-WB (Adaptive Multi-Rate Wide-Band) (codec amr_wb)&#xA; A..... aptx                 aptX (Audio Processing Technology for Bluetooth)&#xA; A..... aptx_hd              aptX HD (Audio Processing Technology for Bluetooth)&#xA; A..... comfortnoise         RFC 3389 comfort noise generator&#xA; A..X.. dca                  DCA (DTS Coherent Acoustics) (codec dts)&#xA; A..... eac3                 ATSC A/52 E-AC-3&#xA; A..... flac                 FLAC (Free Lossless Audio Codec)&#xA; A..... g723_1               G.723.1&#xA; A..... libgsm               libgsm GSM (codec gsm)&#xA; A..... libgsm_ms            libgsm GSM Microsoft variant (codec gsm_ms)&#xA; A..X.. mlp                  MLP (Meridian Lossless Packing)&#xA; A..... mp2                  MP2 (MPEG audio layer 2)&#xA; A..... mp2fixed             MP2 fixed point (MPEG audio layer 2) (codec mp2)&#xA; A..... libtwolame           libtwolame MP2 (MPEG audio layer 2) (codec mp2)&#xA; A..... libmp3lame           libmp3lame MP3 (MPEG audio layer 3) (codec mp3)&#xA; A..... libshine             libshine MP3 (MPEG audio layer 3) (codec mp3)&#xA; A..... mp3_mf               MP3 via MediaFoundation (codec mp3)&#xA; A..... nellymoser           Nellymoser Asao&#xA; A..X.. opus                 Opus&#xA; A..... libopus              libopus Opus (codec opus)&#xA; A..... pcm_alaw             PCM A-law / G.711 A-law&#xA; A..... pcm_dvd              PCM signed 16|20|24-bit big-endian for DVD media&#xA; A..... pcm_f32be            PCM 32-bit floating point big-endian&#xA; A..... pcm_f32le            PCM 32-bit floating point little-endian&#xA; A..... pcm_f64be            PCM 64-bit floating point big-endian&#xA; A..... pcm_f64le            PCM 64-bit floating point little-endian&#xA; A..... pcm_mulaw            PCM mu-law / G.711 mu-law&#xA; A..... pcm_s16be            PCM signed 16-bit big-endian&#xA; A..... pcm_s16be_planar     PCM signed 16-bit big-endian planar&#xA; A..... pcm_s16le            PCM signed 16-bit little-endian&#xA; A..... pcm_s16le_planar     PCM signed 16-bit little-endian planar&#xA; A..... pcm_s24be            PCM signed 24-bit big-endian&#xA; A..... pcm_s24daud          PCM D-Cinema audio signed 24-bit&#xA; A..... pcm_s24le            PCM signed 24-bit little-endian&#xA; A..... pcm_s24le_planar     PCM signed 24-bit little-endian planar&#xA; A..... pcm_s32be            PCM signed 32-bit big-endian&#xA; A..... pcm_s32le            PCM signed 32-bit little-endian&#xA; A..... pcm_s32le_planar     PCM signed 32-bit little-endian planar&#xA; A..... pcm_s64be            PCM signed 64-bit big-endian&#xA; A..... pcm_s64le            PCM signed 64-bit little-endian&#xA; A..... pcm_s8               PCM signed 8-bit&#xA; A..... pcm_s8_planar        PCM signed 8-bit planar&#xA; A..... pcm_u16be            PCM unsigned 16-bit big-endian&#xA; A..... pcm_u16le            PCM unsigned 16-bit little-endian&#xA; A..... pcm_u24be            PCM unsigned 24-bit big-endian&#xA; A..... pcm_u24le            PCM unsigned 24-bit little-endian&#xA; A..... pcm_u32be            PCM unsigned 32-bit big-endian&#xA; A..... pcm_u32le            PCM unsigned 32-bit little-endian&#xA; A..... pcm_u8               PCM unsigned 8-bit&#xA; A..... pcm_vidc             PCM Archimedes VIDC&#xA; A..... real_144             RealAudio 1.0 (14.4K) (codec ra_144)&#xA; A..... roq_dpcm             id RoQ DPCM&#xA; A..X.. s302m                SMPTE 302M&#xA; A..... sbc                  SBC (low-complexity subband codec)&#xA; A..X.. sonic                Sonic&#xA; A..X.. sonicls              Sonic lossless&#xA; A..... libspeex             libspeex Speex (codec speex)&#xA; A..X.. truehd               TrueHD&#xA; A..... tta                  TTA (True Audio)&#xA; A..X.. vorbis               Vorbis&#xA; A..... libvorbis            libvorbis (codec vorbis)&#xA; A..... wavpack              WavPack&#xA; A..... libwavpack            (codec wavpack)&#xA; A..... wmav1                Windows Media Audio 1&#xA; A..... wmav2                Windows Media Audio 2&#xA; S..... ssa                  ASS (Advanced SubStation Alpha) subtitle (codec ass)&#xA; S..... ass                  ASS (Advanced SubStation Alpha) subtitle&#xA; S..... dvbsub               DVB subtitles (codec dvb_subtitle)&#xA; S..... dvdsub               DVD subtitles (codec dvd_subtitle)&#xA; S..... mov_text             3GPP Timed Text subtitle&#xA; S..... srt                  SubRip subtitle (codec subrip)&#xA; S..... subrip               SubRip subtitle&#xA; S..... text                 Raw text subtitle&#xA; S..... webvtt               WebVTT subtitle&#xA; S..... xsub                 DivX subtitles (XSUB)&#xA;

    &#xA;

    Log output if i try using AAC encoder

    &#xA;

    <pre>object(FFMpeg\Exception\RuntimeException)#35 (7) {&#xA;  ["message":protected]=>&#xA;  string(15) "Encoding failed"&#xA;  ["string":"Exception":private]=>&#xA;  string(0) ""&#xA;  ["code":protected]=>&#xA;  int(0)&#xA;  ["file":protected]=>&#xA;  string(108) "C:\inetpub\wwwroot\dev\ffmpeg-lib\ffmpeg-php\vendor\php-ffmpeg\php-ffmpeg\src\FFMpeg\Media\AbstractVideo.php"&#xA;  ["line":protected]=>&#xA;  int(106)&#xA;  ["trace":"Exception":private]=>&#xA;  array(1) {&#xA;    [0]=>&#xA;    array(5) {&#xA;      ["file"]=>&#xA;      string(45) "C:\inetpub\wwwroot\dev\ffmpeg-lib\process.php"&#xA;      ["line"]=>&#xA;      int(35)&#xA;      ["function"]=>&#xA;      string(4) "save"&#xA;      ["class"]=>&#xA;      string(26) "FFMpeg\Media\AbstractVideo"&#xA;      ["type"]=>&#xA;      string(2) "->"&#xA;    }&#xA;  }&#xA;  ["previous":"Exception":private]=>&#xA;  object(Alchemy\BinaryDriver\Exception\ExecutionFailureException)#43 (9) {&#xA;    ["command":protected]=>&#xA;    string(393) "C:\ffmpeg\bin\ffmpeg.exe -y -ss 00:00:17.00 -i "temp/temp_20201110-100656_1080p-220mb.mp4" -t 00:00:52.00 -threads 12 -vcodec libx264 -acodec aac -b:v 1000k -refs 6 -coder 1 -sc_threshold 40 -flags &#x2B;loop -me_range 16 -subq 7 -i_qfactor 0.71 -qcomp 0.6 -qdiff 4 -trellis 1 -b:a 128k -pass 1 -passlogfile "W:/TempIIS\ffmpeg-passes5fabd8bdf3612uvd6b/pass-5fabd8bdf378b" "temp/20201111-122741.mp4""&#xA;    ["errorOutput":protected]=>&#xA;    string(830102) "ffmpeg version git-2020-08-31-4a11a6f Copyright (c) 2000-2020 the FFmpeg developers&#xA;  built with gcc 10.2.1 (GCC) 20200805&#xA;  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libgsm --enable-librav1e --enable-libsvtav1 --disable-w32threads --enable-libmfx --enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf&#xA;  libavutil      56. 58.100 / 56. 58.100&#xA;  libavcodec     58.101.101 / 58.101.101&#xA;  libavformat    58. 51.101 / 58. 51.101&#xA;  libavdevice    58. 11.101 / 58. 11.101&#xA;  libavfilter     7. 87.100 /  7. 87.100&#xA;  libswscale      5.  8.100 /  5.  8.100&#xA;  libswresample   3.  8.100 /  3.  8.100&#xA;  libpostproc    55.  8.100 / 55.  8.100&#xA;Input #0, mov,mp4,m4a,3gp,3g2,mj2, from &#x27;temp/temp_20201110-100656_1080p-220mb.mp4&#x27;:&#xA;  Metadata:&#xA;    major_brand     : mp42&#xA;    minor_version   : 19529854&#xA;    compatible_brands: mp42isom&#xA;    creation_time   : 2016-04-11T06:32:53.000000Z&#xA;  Duration: 00:02:25.98, start: 0.000000, bitrate: 13772 kb/s&#xA;    Stream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)&#xA;    Metadata:&#xA;      creation_time   : 2016-04-11T06:32:53.000000Z&#xA;      handler_name    : Sound Media Handler&#xA;    Stream #0:1(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 13639 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)&#xA;    Metadata:&#xA;      creation_time   : 2016-04-11T06:32:53.000000Z&#xA;      handler_name    : Video Media Handler&#xA;      encoder         : AVC Coding&#xA;Stream mapping:&#xA;  Stream #0:1 -> #0:0 (h264 (native) -> h264 (libx264))&#xA;  Stream #0:0 -> #0:1 (aac (native) -> aac (native))&#xA;Press [q] to stop, [?] for help&#xA;[aac @ 000001fc5a9ce8c0] Sample rate index in program config element does not match the sample rate index configured by the container.&#xA;[h264 @ 000001fc5a3dac80] Invalid NAL unit size (-360624822 > 108076).&#xA;[h264 @ 000001fc5a3dac80] Error splitting the input into NAL units.&#xA;[aac @ 000001fc5a9ce8c0] Inconsistent channel configuration.&#xA;[aac @ 000001fc5a9ce8c0] get_buffer() failed&#xA;Error while decoding stream #0:0: Invalid argument&#xA;[aac @ 000001fc5a9ce8c0] Sample rate index in program config element does not match the sample rate index configured by the container.&#xA;[aac @ 000001fc5a9ce8c0] Inconsistent channel configuration.&#xA;[aac @ 000001fc5a9ce8c0] get_buffer() failed&#xA;Error while decoding stream #0:0: Invalid argument&#xA;[aac @ 000001fc5a9ce8c0] channel element 2.15 is not allocated&#xA;Error while decoding stream #0:0: Invalid data found when processing input&#xA;[aac @ 000001fc5a9ce8c0] Sample rate index in program config element does not match the sample rate index configured by the container.&#xA;[aac @ 000001fc5a9ce8c0] Inconsistent channel configuration.&#xA;[aac @ 000001fc5a9ce8c0] get_buffer() failed&#xA;Error while decoding stream #0:0: Invalid argument&#xA;[h264 @ 000001fc5a3be480] Invalid NAL unit size (1926587749 > 39711).&#xA;[h264 @ 000001fc5a3be480] Error splitting the input into NAL units.&#xA;[h264 @ 000001fc5a3e4540] Invalid NAL unit size (-1483385910 > 21666).&#xA;[h264 @ 000001fc5a3e4540] Error splitting the input into NAL units.&#xA;[h264 @ 000001fc5ad06500] Invalid NAL unit size (1060193647 > 41388).&#xA;[h264 @ 000001fc5ad06500] Error splitting the input into NAL units.&#xA;Error while decoding stream #0:1: Invalid data found when processing input&#xA;[h264 @ 000001fc5ad22e80] Invalid NAL unit size (1499431567 > 26513).&#xA;</pre>

    &#xA;

  • 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;