Recherche avancée

Médias (1)

Mot : - Tags -/censure

Autres articles (65)

  • 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 (...)

  • Mise à disposition des fichiers

    14 avril 2011, par

    Par défaut, lors de son initialisation, MediaSPIP ne permet pas aux visiteurs de télécharger les fichiers qu’ils soient originaux ou le résultat de leur transformation ou encodage. Il permet uniquement de les visualiser.
    Cependant, il est possible et facile d’autoriser les visiteurs à avoir accès à ces documents et ce sous différentes formes.
    Tout cela se passe dans la page de configuration du squelette. Il vous faut aller dans l’espace d’administration du canal, et choisir dans la navigation (...)

  • Des sites réalisés avec MediaSPIP

    2 mai 2011, par

    Cette page présente quelques-uns des sites fonctionnant sous MediaSPIP.
    Vous pouvez bien entendu ajouter le votre grâce au formulaire en bas de page.

Sur d’autres sites (9158)

  • ffmpeg-python Unable to open .srt, .vtt files. Error initializing filter 'subtitles' with args ... Error initializing complex filters

    3 novembre 2022, par Batuhan Yılmaz

    I'm trying to build a web app where users can upload a video file and a transcript as .srt or .vtt file to get a video with subtitles. But keep getting an error with the subtitles.
    
Here's my code :

    


    import streamlit as st
from streamlit_lottie import st_lottie
from utils import write_vtt, write_srt
import ffmpeg
import requests
from typing import Iterator
from io import StringIO
import numpy as np
import pathlib
import os
import components.authenticate as authenticate


st.set_page_config(page_title="Auto Subtitled Video Generator", page_icon=":movie_camera:", layout="wide")

# Define a function that we can use to load lottie files from a link.
@st.cache(allow_output_mutation=True)
def load_lottieurl(url: str):
    r = requests.get(url)
    if r.status_code != 200:
        return None
    return r.json()


APP_DIR = pathlib.Path(__file__).parent.absolute()

LOCAL_DIR = APP_DIR / "local_transcript"
LOCAL_DIR.mkdir(exist_ok=True)
save_dir = LOCAL_DIR / "output"
save_dir.mkdir(exist_ok=True)


col1, col2 = st.columns([1, 3])
with col1:
    lottie = load_lottieurl("https://assets1.lottiefiles.com/packages/lf20_HjK9Ol.json")
    st_lottie(lottie)

with col2:
    st.write("""
    ## Auto Subtitled Video Generator 
    ##### Upload a video file and a transcript as .srt file and get a video with subtitles.""")


def getSubs(segments: Iterator[dict], format: str, maxLineWidth: int) -> str:
    segmentStream = StringIO()

    if format == 'vtt':
        write_vtt(segments, file=segmentStream, maxLineWidth=maxLineWidth)
    elif format == 'srt':
        write_srt(segments, file=segmentStream, maxLineWidth=maxLineWidth)
    else:
        raise Exception("Unknown format " + format)

    segmentStream.seek(0)
    return segmentStream.read()


def generate_subtitled_video(uploaded_file):
    with open(f"{save_dir}/input.mp4", "wb") as f:
            f.write(uploaded_file.read())
    audio = ffmpeg.input(f"{save_dir}/input.mp4")
    audio = ffmpeg.output(audio, f"{save_dir}/output.wav", acodec="pcm_s16le", ac=1, ar="16k")
    ffmpeg.run(audio, overwrite_output=True)


def main():
    video_file = st.file_uploader("File", type=["mp4", "avi", "mov", "mkv"])
    # get the name of the input_file
    if video_file is not None:
        filename = video_file.name[:-4]
    else:
        filename = None
    transcript_file = st.file_uploader("Transcript", type=["srt", "vtt"])
    if transcript_file is not None:
        transcript_name = transcript_file.name
    else:
        transcript_name = None
    if video_file is not None and transcript_file is not None:
        if transcript_name[-3:] == "vtt":
            with open(f"{save_dir}/transcript.vtt", "wb") as f:
                f.writelines(transcript_file)
                f.close()
            with open(os.path.join(os.getcwd(), f"{save_dir}/transcript.vtt"), "rb") as f:
                vtt_file = f.read()
            if st.button("Generate Video with Subtitles"):
                generate_subtitled_video(video_file)
                video_file = ffmpeg.input(f"{save_dir}/input.mp4")
                audio_file = ffmpeg.input(f"{save_dir}/output.wav")
                ffmpeg.concat(video_file.filter("subtitles", vtt_file), audio_file, v=1, a=1).output("final.mp4").global_args('-report').run(quiet=True, overwrite_output=True)
                video_with_subs = open("final.mp4", "rb")
                col3, col4 = st.columns([3, 1])
                with col3:
                    st.video(video_with_subs)
                with col4:
                    st.download_button(label="Download Video with Subtitles",
                                        data=video_with_subs,
                                        file_name=f"{filename}_with_subs.mp4")
            else:
                st.error("Please upload a video file and a transcript file.")
        elif transcript_name[-3:] == "srt":
            with open(f"{save_dir}/transcript.srt", "wb") as f:
                f.writelines(transcript_file)
                f.close()
            with open(os.path.join(os.getcwd(), f"{save_dir}/transcript.srt"), "rb") as f:
                srt_file = f.read()
                f.close()
            if st.button("Generate Video with Subtitles"):
                generate_subtitled_video(video_file)
                video_file = ffmpeg.input(f"{save_dir}/input.mp4")
                audio_file = ffmpeg.input(f"{save_dir}/output.wav")
                ffmpeg.concat(video_file.filter("subtitles", f'{save_dir}/transcript.srt'), audio_file, v=1, a=1).output("final.mp4").global_args('-report').run(quiet=True, overwrite_output=True)
                video_with_subs = open("final.mp4", "rb")

                col3, col4 = st.columns([3, 1])
                with col3:
                    st.video(video_with_subs)
                with col4:
                    st.download_button(label="Download Video with Subtitles",
                                        data=video_with_subs,
                                        file_name=f"{filename}_with_subs.mp4")
        else:
            st.error("Please upload a .srt or .vtt file")
    else:
        st.info("Please upload a video file and a transcript file")


if __name__ == "__main__":
    authenticate.set_st_state_vars()
    if st.session_state["authenticated"]:
        main()
        authenticate.button_logout()
    else:
        st.info("Please log in or sign up to use the app.")
        authenticate.button_login()
        



    


    I couldn't figure out what I'm doing wrong. Please help

    


    And the log file of ffmpeg error :

    


    ffmpeg started on 2022-11-03 at 21:29:27
Report written to "ffmpeg-20221103-212927.log"
Log level: 48
Command line:
ffmpeg -i "C:\\Users\\batuh\\Auto-Subtitled-Video-Generator - Copy2\\pages\\local_transcript\\output/input.mp4" -i "C:\\Users\\batuh\\Auto-Subtitled-Video-Generator - Copy2\\pages\\local_transcript\\output/output.wav" -filter_complex "[0]subtitles=C\\\\\\\\\\\\:\\\\\\\\\\\\\\\\Users\\\\\\\\\\\\\\\\batuh\\\\\\\\\\\\\\\\Auto-Subtitled-Video-Generator - Copy2\\\\\\\\\\\\\\\\pages\\\\\\\\\\\\\\\\local_transcript\\\\\\\\\\\\\\\\output/transcript.srt[s0];[s0][1]concat=a=1:n=1:v=1[s1]" -map "[s1]" final.mp4 -report -y
ffmpeg version 2022-10-24-git-d79c240196-full_build-www.gyan.dev Copyright (c) 2000-2022 the FFmpeg developers
  built with gcc 12.1.0 (Rev2, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libvpl --enable-libshaderc --enable-vulkan --ena  libavutil      57. 39.101 / 57. 39.101
  libavcodec     59. 51.100 / 59. 51.100
  libavformat    59. 34.101 / 59. 34.101
  libavdevice    59.  8.101 / 59.  8.101
  libavfilter     8. 49.101 /  8. 49.101
  libswscale      6.  8.112 /  6.  8.112
  libswresample   4.  9.100 /  4.  9.100
  libpostproc    56.  7.100 / 56.  7.100
Splitting the commandline.
Reading option '-i' ... matched as input url with argument 'C:\Users\batuh\Auto-Subtitled-Video-Generator - Copy2\pages\local_transcript\output/input.mp4'.
Reading option '-i' ... matched as input url with argument 'C:\Users\batuh\Auto-Subtitled-Video-Generator - Copy2\pages\local_transcript\output/output.wav'.
Reading option '-filter_complex' ... matched as option 'filter_complex' (create a complex filtergraph) with argument '[0]subtitles=C\\\\\\:\\\\\\\\Users\\\\\\\\batuh\\\\\\\\Auto-Subtitled-Video-Generator - Copy2\\\\\\\\pages\\\\\\\\local_transcript\\\\\\\\output/transcript.srt[s0];[s0][1]concat=a=1:n=1:v=1[s1]'.
Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '[s1]'.
Reading option 'final.mp4' ... matched as output url.
Reading option '-report' ... matched as option 'report' (generate a report) with argument '1'.
Reading option '-y' ... matched as option 'y' (overwrite output files) with argument '1'.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option filter_complex (create a complex filtergraph) with argument [0]subtitles=C\\\\\\:\\\\\\\\Users\\\\\\\\batuh\\\\\\\\Auto-Subtitled-Video-Generator - Copy2\\\\\\\\pages\\\\\\\\local_transcript\\\\\\\\output/transcript.srt[s0];[s0][1]concat=a=1:n=1:v=1[s1].
Applying option report (generate a report) with argument 1.
Applying option y (overwrite output files) with argument 1.
Successfully parsed a group of options.
Parsing a group of options: input url C:\Users\batuh\Auto-Subtitled-Video-Generator - Copy2\pages\local_transcript\output/input.mp4.
Successfully parsed a group of options.
Opening an input file: C:\Users\batuh\Auto-Subtitled-Video-Generator - Copy2\pages\local_transcript\output/input.mp4.
[NULL @ 000001baaeb55300] Opening 'C:\Users\batuh\Auto-Subtitled-Video-Generator - Copy2\pages\local_transcript\output/input.mp4' for reading
[file @ 000001baaeb55800] Setting default whitelist 'file,crypto,data'
[mov,mp4,m4a,3gp,3g2,mj2 @ 000001baaeb55300] Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100
[mov,mp4,m4a,3gp,3g2,mj2 @ 000001baaeb55300] ISO: File Type Major Brand: mp42
[mov,mp4,m4a,3gp,3g2,mj2 @ 000001baaeb55300] Unknown dref type 0x206c7275 size 12
[mov,mp4,m4a,3gp,3g2,mj2 @ 000001baaeb55300] Processing st: 0, edit list 0 - media time: 3003, duration: 8201160
[mov,mp4,m4a,3gp,3g2,mj2 @ 000001baaeb55300] Offset DTS by 3003 to make first pts zero.
[mov,mp4,m4a,3gp,3g2,mj2 @ 000001baaeb55300] Setting codecpar->delay to 1 for stream st: 0
[mov,mp4,m4a,3gp,3g2,mj2 @ 000001baaeb55300] Unknown dref type 0x206c7275 size 12
[mov,mp4,m4a,3gp,3g2,mj2 @ 000001baaeb55300] Before avformat_find_stream_info() pos: 34044 bytes read:65536 seeks:0 nb_streams:2
[h264 @ 000001baaeb68bc0] nal_unit_type: 7(SPS), nal_ref_idc: 3
[h264 @ 000001baaeb68bc0] nal_unit_type: 8(PPS), nal_ref_idc: 3
[h264 @ 000001baaeb68bc0] nal_unit_type: 7(SPS), nal_ref_idc: 3
[h264 @ 000001baaeb68bc0] nal_unit_type: 8(PPS), nal_ref_idc: 3
[h264 @ 000001baaeb68bc0] nal_unit_type: 5(IDR), nal_ref_idc: 3
[h264 @ 000001baaeb68bc0] Format yuv420p chosen by get_format().
[h264 @ 000001baaeb68bc0] Reinit context to 1280x720, pix_fmt: yuv420p
[h264 @ 000001baaeb68bc0] no picture 
[mov,mp4,m4a,3gp,3g2,mj2 @ 000001baaeb55300] All info found
[mov,mp4,m4a,3gp,3g2,mj2 @ 000001baaeb55300] After avformat_find_stream_info() pos: 109849 bytes read:131072 seeks:0 frames:15
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:\Users\batuh\Auto-Subtitled-Video-Generator - Copy2\pages\local_transcript\output/input.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2016-08-24T03:50:36.000000Z
  Duration: 00:01:31.14, start: 0.000000, bitrate: 1149 kb/s
  Stream #0:0[0x1](und), 14, 1/90000: Video: h264 (Main) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 1020 kb/s, 29.97 fps, 29.97 tbr, 90k tbn (default)
    Metadata:
      creation_time   : 2016-08-24T03:50:36.000000Z
      handler_name    : ISO Media file produced by Google Inc.
      vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](und), 1, 1/44100: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 125 kb/s (default)
    Metadata:
      creation_time   : 2016-08-24T03:50:36.000000Z
      handler_name    : ISO Media file produced by Google Inc.
      vendor_id       : [0][0][0][0]
Successfully opened the file.
Parsing a group of options: input url C:\Users\batuh\Auto-Subtitled-Video-Generator - Copy2\pages\local_transcript\output/output.wav.
Successfully parsed a group of options.
Opening an input file: C:\Users\batuh\Auto-Subtitled-Video-Generator - Copy2\pages\local_transcript\output/output.wav.
[NULL @ 000001baaec0e8c0] Opening 'C:\Users\batuh\Auto-Subtitled-Video-Generator - Copy2\pages\local_transcript\output/output.wav' for reading
[file @ 000001baaf24ee40] Setting default whitelist 'file,crypto,data'
[wav @ 000001baaec0e8c0] Format wav probed with size=2048 and score=99
[wav @ 000001baaec0e8c0] Before avformat_find_stream_info() pos: 78 bytes read:65614 seeks:1 nb_streams:1
[wav @ 000001baaec0e8c0] probing stream 0 pp:32
[wav @ 000001baaec0e8c0] probing stream 0 pp:31
[wav @ 000001baaec0e8c0] probing stream 0 pp:30
[wav @ 000001baaec0e8c0] probing stream 0 pp:29
[wav @ 000001baaec0e8c0] probing stream 0 pp:28
[wav @ 000001baaec0e8c0] probing stream 0 pp:27
[wav @ 000001baaec0e8c0] probing stream 0 pp:26
[wav @ 000001baaec0e8c0] probing stream 0 pp:25
[wav @ 000001baaec0e8c0] probing stream 0 pp:24
[wav @ 000001baaec0e8c0] probing stream 0 pp:23
[wav @ 000001baaec0e8c0] probing stream 0 pp:22
[wav @ 000001baaec0e8c0] probing stream 0 pp:21
[wav @ 000001baaec0e8c0] probing stream 0 pp:20
[wav @ 000001baaec0e8c0] probing stream 0 pp:19
[wav @ 000001baaec0e8c0] probing stream 0 pp:18
[wav @ 000001baaec0e8c0] probing stream 0 pp:17
[wav @ 000001baaec0e8c0] probing stream 0 pp:16
[wav @ 000001baaec0e8c0] probing stream 0 pp:15
[wav @ 000001baaec0e8c0] probing stream 0 pp:14
[wav @ 000001baaec0e8c0] probing stream 0 pp:13
[wav @ 000001baaec0e8c0] probing stream 0 pp:12
[wav @ 000001baaec0e8c0] probing stream 0 pp:11
[wav @ 000001baaec0e8c0] probing stream 0 pp:10
[wav @ 000001baaec0e8c0] probing stream 0 pp:9
[wav @ 000001baaec0e8c0] probing stream 0 pp:8
[wav @ 000001baaec0e8c0] probing stream 0 pp:7
[wav @ 000001baaec0e8c0] probing stream 0 pp:6
[wav @ 000001baaec0e8c0] probing stream 0 pp:5
[wav @ 000001baaec0e8c0] probing stream 0 pp:4
[wav @ 000001baaec0e8c0] probing stream 0 pp:3
[wav @ 000001baaec0e8c0] probing stream 0 pp:2
[wav @ 000001baaec0e8c0] probing stream 0 pp:1
[wav @ 000001baaec0e8c0] probed stream 0
[wav @ 000001baaec0e8c0] parser not found for codec pcm_s16le, packets or times may be invalid.
[wav @ 000001baaec0e8c0] max_analyze_duration 5000000 reached at 5120000 microseconds st:0
[wav @ 000001baaec0e8c0] After avformat_find_stream_info() pos: 176206 bytes read:262222 seeks:1 frames:42
Guessed Channel Layout for Input Stream #1.0 : mono
Input #1, wav, from 'C:\Users\batuh\Auto-Subtitled-Video-Generator - Copy2\pages\local_transcript\output/output.wav':
  Metadata:
    encoder         : Lavf59.34.101
  Duration: 00:01:31.14, bitrate: 256 kb/s
  Stream #1:0, 42, 1/16000: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 16000 Hz, 1 channels, s16, 256 kb/s
Successfully opened the file.
[Parsed_subtitles_0 @ 000001baaeb7d040] Setting 'filename' to value 'C\:\\Users\\batuh\\Auto-Subtitled-Video-Generator - Copy2\\pages\\local_transcript\\output/transcript.srt'
[Parsed_subtitles_0 @ 000001baaeb7d040] libass API version: 0x1600010
[Parsed_subtitles_0 @ 000001baaeb7d040] libass source: commit: 0.16.0-48-g75a3dbac9bd41842a4d00b0d42c9513e2c8aec67
[Parsed_subtitles_0 @ 000001baaeb7d040] Raster: FreeType 2.12.1
[Parsed_subtitles_0 @ 000001baaeb7d040] Shaper: FriBidi 1.0.12 (SIMPLE) HarfBuzz-ng 5.3.1 (COMPLEX)
[Parsed_subtitles_0 @ 000001baaeb7d040] Initialized
[NULL @ 000001baaf473400] Opening 'C\:\\Users\\batuh\\Auto-Subtitled-Video-Generator - Copy2\\pages\\local_transcript\\output/transcript.srt' for reading
[file @ 000001baaeb7dc40] Setting default whitelist 'file,crypto,data'
[Parsed_subtitles_0 @ 000001baaeb7d040] Unable to open C\:\\Users\\batuh\\Auto-Subtitled-Video-Generator - Copy2\\pages\\local_transcript\\output/transcript.srt
[AVFilterGraph @ 000001baaf24ef40] Error initializing filter 'subtitles' with args 'C\\\:\\\\Users\\\\batuh\\\\Auto-Subtitled-Video-Generator - Copy2\\\\pages\\\\local_transcript\\\\output/transcript.srt'
Error initializing complex filters.
Invalid argument
[AVIOContext @ 000001baaeb5f880] Statistics: 131072 bytes read, 0 seeks
[AVIOContext @ 000001baaf10b2c0] Statistics: 262222 bytes read, 1 seeks



    


    I tried doing all ffmpeg related things under the generate_subtitled_video function but couldn't make it work either.

    


  • Homepage Design : Best Practices & Examples

    5 octobre 2022, par Erin

    Did you know users spend about 50 milliseconds deciding if they like your website’s homepage design or not ?

    With billions of websites and scrolling often done on the go, you have to make a strong first impression because the chances for a once-over are slim. 

    Learn how to design magnetically-appealing website homepages from this guide. 

    What is a homepage in web design ?

    Homepage is the front page of your website — a destination where users land when typing your website URL address. It’s located at the root of the website’s domain (e.g., matomo.org) or a subdomain (e.g., university.webflow.com).

    Design-wise a homepage has two goals :

    • Explain the purpose of the website and present overview information 
    • Provide top-level navigation to lower-level web pages (e.g., blog, sales pages, etc.) 

    Separately, a homepage is also the place where users will return each time they’ll feel stuck and want to start anew. Thus, your homepage website design should provide obvious navigation paths to other website areas.

    6 Must-Know Website Homepage Design Best Practices

    Behind every winning homepage design stands a detailed customer journey map. 

    A customer journey is a schematic representation of how site visitors will move around your website to accomplish various goals. 

    A good customer journey map lists different actions a user will take after landing on your website (e.g., browse product pages, save items to a wishlist, register an account, etc.) — and it does so for different audience segments

    Your homepage design should help users move from the first step on their journey (e.g., learning about your website) to the final one (e.g., converting to a paid customer). At the same time, your homepage should serve the needs of both new and returning visitors — prospects who may be at a different stage of their journey (e.g., consideration). 

    With the above in mind, let’s take a look at several website homepage design ideas and the reasons why they work. 

    1. Use Familiar Design Elements

    Whether you’re designing a new website or refreshing an old one, it’s always tempting to go “out of the box” — use horizontal scrolling, skip header navigation or include arty animations. 

    Bold design choices work for some brands, mainly those who aren’t using their website as a primary sales channel (e.g., luxury brands). 

    But unfamiliar design patterns can also intimidate a lot of shoppers. In one observational study, people were asked to guess where specific content (e.g., information on international calls) would be placed on a telecom website. 75% of users picked the same location. This means two things :

    • People already have expectations of where specific website information is typically placed 
    • Yet, one in four users struggles to identify the right areas even within standard website layouts

    So why make the job harder for them ? As UX consultant Peter Ramsey rightfully notes : 

    The truth is : designing the best experience isn’t about being unique, it’s about being easy. And guess what feels really easy to use ? Things that feel familiar.

    Therefore, analyse other homepage layout designs in your industry. Pay attention to the number and type of homepage screens and approaches to designing header/footer navigation. 

    Take some of those ideas as your “base”. Then make your homepage design on-brand with unique typography, icons, visuals and other graphic design elements.

    Take a cue from ICAM — a steel manufacturing company. Their niche isn’t typically exciting. Yet, their homepage design stops you in your tracks and tinkers your curiosity to discover more (even if you aren’t shopping for metalware). 

    ICAM homepage example

    The interesting part is that ICAM uses a rather standard homepage layout. You have a hero image in the first screen, followed by a multi-column layout of their industry expertise and an overview of manufacturers. 

    But this homepage design feels fresh because the company uses plenty of white space, bold typography and vibrant visuals. Also, they delay the creative twist (horizontal scrolling area) to the bottom of the homepage, meaning that it’s less likely to intimidate less confident web users. 

    2. Decide On The Optimal Homepage Layout 

    In web design, a homepage layout is your approach to visually organising different information on the screen. 

    Observant folks will notice that good homepage designs often have the same layout. For example, include a split-view “hero” screen with a call to action on the left and visuals (photo or video) on the left. 

    Ecommerce Homepage Design Example
    SOURCE : shopify.com / SOURCE : squareup.com

    The reason for using similar layouts for website homepage design isn’t a lack of creativity. On the contrary, some layouts have become the “best practice” because they :

    • Offer a great user experience (UX) and don’t confuse first-time visitors 
    • Feel familiar and create a pleasurable sense of deja-vu among users 
    • Have proven to drive higher conversion rates through benchmarks and tests 

    Popular types of website homepage layouts : 

    • Single column – a classic option of presenting main content in a single, vertical column. Good choice for blogs, personal websites and simple corporate sites. 
    • Split screen layout divides the page in two equal areas with different information present. Works best for Ecommerce homepages (e.g., to separate different types of garments) or SaaS websites, offering two product types (e.g., a free personal product version and a business edition). 
    • Asymmetrical layout assumes dividing your homepage into areas of different size and styles. Asymmetry helps create specific focal points for users to draw their attention to the most prominent information. 
    • Grid of cards layout helps present a lot of information in a more digestible manner by breaking down bigger bulks of text into smaller cards — a graphic element, featuring an image and some texts. By tapping a card, users can then access extra content. 
    • Boxes are visually similar to cards, but can be of varying shape. For example, you can have a bigger header-width box area, followed by four smaller boxes within it. Both of these website layouts work well for Ecommerce. 
    • Featured image layout gives visuals (photos and videos) the most prominent placement on the homepage, with texts and other graphic design elements serving a secondary purpose. 
    • F-pattern layout is based on the standard eye movement most people have when reading content on the website. Eye tracking studies found that we usually pay the most attention to information atop of the page (header area), then scan horizontally before dripping down to the next vertical line until we find content that captures our attention. 

    User behaviour analytics (UBA) tools are the best way to determine what type of layout will work for your homepage. 

    For example, you can use Matomo Heatmaps and Session Recording to observe how users navigate your homepage, which areas or links they click and what blockers they face during navigation.

    Matomo Heatmaps

    Matomo can capture accurate behavioural insights because we track relative positions to elements within your websites. This approach allows us to provide accurate data for users with different browsers, operating systems, zoom-in levels and fonts. 

    The best part ? You can collect behavioural data from up to 100 different user segments to understand how different audience cohorts engage with your product.

    3. Include a One-Sentence Tagline

    A tagline is a one-line summary of what your company does and what its unique sales proposition (USP) is. It should be short, catchy and distinguish you from competitors.

    A modern homepage design practice is to include a call to action in the first screen. Why ? Because you then instantly communicate or remind of your value proposition to every user — and provide them with an easy way to convert whenever they are ready to do business with you. 

    Here’s how three companies with a similar product, a project management app, differentiate themselves through homepage taglines. 

    Monday.com positions itself as an operating system (OS) for work. 

    monday.com homepage

    Basecamp emphasises its product simplicity and openly says that they are different from other overly-complex software. 

    Asana, in turn, addresses a familiar user pain point (siloed communication) that it attempts to fix with its product. 

    asana.com homepage

    Coming up with the perfect homepage tagline is a big task. You may have plenty of ideas, but little confidence in what version will stick. 

    The best approach ? Let a series of A/B tests decide. You can test a roaster of homepage slogans on a rotating bi-weekly/monthly schedule and track how copy changes affect conversion rates. 

    With Matomo A/B test feature, you can create, track and manage all experiments straight from your web analytics app — and get consolidated reports on total page visitors and conversion rates per each tested variation. 

    Matomo A/B Test feature

    Beyond slogans, you can also run A/B tests to validate submission form placements, button texts or the entire page layout. 

    For instance, you can benchmark how your new homepage design performs compared to the old version with a subset of users before making it publicly available. 

    4. Highlight The Main Tasks For The User

    Though casual browsing is a thing, most of us head to specific websites with a clear agenda — find information, compare prices, obtain services, etc. 

    Thus, your homepage should provide clear starting points for users’ main tasks (those you’ve also identified as conversion goals on your customer journey maps !).

    These tasks can include : 

    • Account registration 
    • Product demo request 
    • Newsletter sign-up 

    The best website homepage designs organically guide users through a set number of common tasks, one screen at a time. 

    Let’s analyse Sable homepage design. The company offers a no-fee bank account and a credit card product for soon-to-be US transplants. The main task a user has : Decide if they want to try Sable and hopefully open an account with them. 

    Sable Example Homepage

    This mono-purpose page focuses on persuading a prospect that Sable is right for them. 

    The first screen hosts the main CTA with an animated drop-down arrow to keep scrolling. This is likely aimed at first-time visitors that just landed on the page from an online ad or social media post. 

    The second screen serves the main pitch — no-fee, no-hassle access to a US banking account that also helps you build your credit score. 

    The third screen encourages users to learn more about Sable Credit — the flagship product. For the sceptics, the fourth screen offers several more reasons to sign up for the credit product. 

    Then Sable moves on to pitching its second offering — a no-fee debit card with a cashback. Once again, the follow-up screen sweetens the deal by bringing up other perks (higher cashback for popular services like Amazon) and overcoming objections (no SSN required and multi-language support available). 

    The sequence ends with side-by-side product comparison and some extra social proof. 

    In Sable’s case, each homepage screen has a clear purpose and is designed to facilitate one specific user action — account opening. 

    For multi-product companies, the above strategy works great for designing individual landing pages. 

    5. Design Proper Navigation Paths

    All websites have two areas reserved for navigation : 

    • Header menu 
    • Footer menu 

    Designing an effective header menu is more important since it’s the primary tool visitors will use to discover other pages. 

    Your header menu can be :

    • Sticky — always visible as the person keeps scrolling. 
    • Static — e.g., a hidden drop-down menu. 

    If you go for a static header and have a longer homepage layout (e.g., 5+ screens), you also need to add extra navigation elements somewhere mid-page. Or else users might not figure out where to go next and merely bounce off. 

    You can do this by : 

    • Promoting other areas of your website (e.g., sub-category pages) by linking out to them 
    • Adding a carousel of “recent posts”, “recommended reads” and “latest products” 
    • Using buttons and CTAs to direct users towards specific actions (e.g., account registration) or assets (free eBook)

    For instance, cosmetics brand Typology doesn’t have a sticky header on the homepage. Instead, they prompt discovery by promoting different product categories (best sellers, bundles, latest arrivals) and their free skin diagnostic quiz — a great engagement mechanism to retain first time users.

    Typology Homepage Example

    Once the user scrolls down to the bottom of the page, they should have an extra set of navigational options — aka footer links. 

    Again, these help steer the visitor towards discovering more content without scrolling back up to the top of your homepage. 

    Nielsen Norman Group says that people mostly use footers as :

    • A second chance to be convinced — after reading the entire homepage, the user is ready to give your product a go.
    • The last resort for hard-to-find content that’s not displayed in global header navigation (e.g., Terms and Conditions or shipping information pages).

    As a rule of thumb, you should designate the following information to the footer : 

    • Utility links (Contact page, Terms & Conditions, Privacy Policy, etc.) 
    • Secondary-task links (e.g., Career page, Investor Details, Media contacts, etc.) 
    • Brands within the organisation (if you operate several) 
    • Customer engagement link (email newsletters and social media buttons)

    The key is to keep the area compact — not more than one standard user screen resolution of 1280×720. 

    6. Show Users What’s Clickable (Or Not) 

    A homepage invites your site visitors on a journey. But if they don’t know which elements to click, they aren’t going to get anywhere.

    Good homepage design makes it obvious which page elements are clickable, i.e., can take the user to a new page or another segment of the homepage. 

    Here are several must-know homepage design tips for better on-page navigation : 

    • Use colour and underline or bold to highlight clickable words. Alternatively, you can change the browser cursor from a standard arrow into another element (e.g., a larger dot or a pointy finger) to indicate when the cursor hovers over a clickable website area. 
    • Make descriptive button texts that imply what will happen when a user clicks the page. Instead of using abstract and generic button texts like “see more” or “learn more”, try a more vibrant language like “dive in” for clicking through to a spa page. 
    • Use a unified hover area to show how different homepage design elements represent a single path or multiple navigation paths. When multiple items are encapsulated in one visual element (e.g., a box), users may be reluctant to click the image because they aren’t sure if it’s one large hit area leading to a single page or if there are multiple hit areas, leading to different pages. 

    Homepage of BEAUSiTE — a whimsical hotel in the Swiss Alps – embodies all of the above design principles. They change the cursor style whenever you scroll into a hit area, use emotive and creative micro-copy for all button texts and clearly distinguish between different homepage elements.

    Beausite Homepage Example

    How to Make Your Homepage Design Even More Impactful ? 

    Website homepage design is roughly 20% of pure design work and 80% of behind-the-scenes research. 

    To design a high-performing homepage you need to have data-backed answers to the following questions : 

    • Who are your primary and secondary target audiences ? 
    • Which tasks (1 to 4) you’d want to help them solve through your homepage ?

    You can get the answers to both questions from your web analytics data by using audience segmentation and page transition (behaviour flow) reports in Matomo. 

    Based on these, you can determine common user journeys and tasks people look to accomplish when visiting your website. Next, you can collect even more data with UBA tools  like heatmaps and user session recordings. Then translated the observed patterns into working homepage design ideas. 

    Improve your homepage design and conversion rates with Matomo. Start your free 21-day trial now ! 

  • 5 Key Benefits of Using a Tag Manager

    12 décembre 2021, par erin — Analytics Tips, Marketing

    Websites today have become very complex to manage, and as you continue to look for ways to optimise your website, you’ll want to consider using a Tag Manager

    A Tag Manager will help your marketing team seamlessly track how your visitors are engaging with your website’s elements. Without a Tag Manager, you are missing out on business-altering insights.

    In this blog, we’ll cover :

    Tag Manager overview 

    A Tag Manager (AKA Tag Management System or TMS) is a centralised system for implementing, managing and tracking events. A tag is just another word for a piece of code on a website that tracks a specific event. 

    An example of a tag tracking code might be Facebook pixels, ad conversions and other website activities such as signing up to a newsletter or PDF download. 

    Triggers are the actual actions that website visitors take that activate the tag. Examples of triggers are things like : 

    • A thank you page view to show that a visitor has completed a conversion action
    • Clicking a download or sign up button 
    • Scroll depth or how far down users are scrolling on your webpage 

    Each of these will give you insights into how your website is performing and how your users are engaging with your content. Going back to the scroll depth trigger example, this would be particularly helpful for validating bounce rate and finding out where users are dropping off on a page. Discover other ways to take advantage of tags and event tracking

    Tag Manager

    5 key benefits of a Tag Manager

    1. Removes the risks of website downtime 

    Tags are powerful for in-depth web analytics. However, tagging opens up the potential for non-technical team members to break the front-end of your website in a couple of clicks. 

    A Tag Manager reduces that risk. For example, Matomo Tag Manager lets you preview tags to see if they are firing before pushing them live. You can also give specific users restricted access so you can approve any tagging before it goes live. 

    Tag Managers protect the functionality of your website and ensure that there is no downtime.

    2. Your website will load faster 

    When it comes to the success of your website, page speed is one of the most important factors. 

    Each time you add a tag to your site, you run the risk of slowing down the page speed. This can quickly build up to a poor performing site and frustrate your visitors.

    You can’t track tags if visitors won’t even stay long enough for your site to load. In fact, 1 in 4 visitors would abandon a website that takes more than 4 seconds to load. According to Deloitte, just a 0.1 second difference in loading speed can affect every step of your customer journey. 

    A Tag Manager, on the other hand, is a lightweight option only requiring one single tag. Using a Tag Manager to track events can make all the difference to your website’s performance and user experience.

    3. Greater efficiency for marketing

    Time is critical in marketing. The longer it takes for a campaign to launch, the greater the chances are that you’re missing out on sales opportunities.

    Waiting for the IT team to tag a thank you page before setting an ad live is inefficient and impacts your bottom line.

    Equipping marketing with a Tag Manager means that they’ll be able to launch campaigns faster and more effectively.

    Check out our Marketer’s Guide to Successful Website Event Tracking for more.

    4. Control all of your tracking and marketing tags in one place 

    Keeping track of what tags are on your site and where they’re located is a complicated task if you aren’t using a Tag Manager. Unmanaged tags can quickly pile up and result in errors with your analytics, like counting conversions twice. 

    Using a Tag Manager to centralise your tags in one easy to manage place reduces the chances of human errors. Instead, your team will be able to quickly see what tags are already in place so they aren’t doubling up on tracking.

    5. Reduce work for the IT team 

    Let’s face it, the IT team has more critical tasks at hand than adding tags to the website. Freeing up your IT team to focus on higher priority tasks should always be a goal.

    Tagging, while crucial for marketing, has the potential to create a lot of extra work for your website developers. Inserting code for each individual tag is time-consuming and means you aren’t collecting data in the meantime.

    Rather than overloading your IT team, empower your marketing team with the ability to add tags with a few clicks. 

    How to choose a Tag Management System

    There are many tools to choose from and the default option tends to be Google Tag Manager (GTM). But before you implement GTM or any other Tag Management Solution, we highly recommend asking these questions :

    1. What are my goals for a Tag Manager ? Before purchasing a Tag Manager, or any tool for that matter, understanding your goals upfront is best practice.
    2. Does the solution offer Tag Manager training resources ? If online Tag Manager training and educational resources are available for the tool, then you’ll be able to hit the ground running and start to see an ROI instantly.
    3. Can I get online support ? In case you need any help with the tool, having access to online support is a big bonus. 
    4. Is it compliant with privacy regulations ? If your business is already compliant, in the process of becoming compliant or future-proofing your tech stack for looming privacy regulations, then researching this is crucial. 
    5. How much does it cost ? If it’s “free”, find out how and why. In most cases, free solutions are just vehicles for collecting data to advertise to your users. 
    6. What do others think about the Tag Manager ? Check out reviews on sites like Capterra or G2 to find out how other businesses rate the tool. 

    Google Tag Manager alternative

    As privacy becomes a greater concern globally for end-users and governments, many businesses are looking for alternatives to the world’s largest advertising company – Google.

    Matomo Tag Manager is more than a Google Tag Manager alternative. With Matomo Tag Manager, you get a GDPR, HIPAA, CCPA and PECR compliant, open source Tag Manager and your data is 100% yours to own.

    Plus, with Matomo Tag Manager you only need one single tracking code for all of your website and tag analytics. No matter what you are tracking (scrolls, clicks, downloads, Heatmaps, visits, etc.), you will only ever need one piece of code on your website and one tool to manage it all. 

    The takeaway 

    Tagging is powerful but can quickly become complicated, risky and time-consuming. Tag Managers reduce these obstacles allowing you to set tags and triggers effortlessly. It empowers marketing teams, streamlines processes and removes the reliance on IT.

    Ready to try Matomo Tag Manager ? Start your 21-day free trial now – no credit card required.