Advanced search

Medias (1)

Tag: - Tags -/intégration

Other articles (106)

  • Keeping control of your media in your hands

    13 April 2011, by

    The vocabulary used on this site and around MediaSPIP in general, aims to avoid reference to Web 2.0 and the companies that profit from media-sharing.
    While using MediaSPIP, you are invited to avoid using words like "Brand", "Cloud" and "Market".
    MediaSPIP is designed to facilitate the sharing of creative media online, while allowing authors to retain complete control of their work.
    MediaSPIP aims to be accessible to as many people as possible and development is based on expanding the (...)

  • Les images

    15 May 2013
  • Taille des images et des logos définissables

    9 February 2011, by

    Dans beaucoup d’endroits du site, logos et images sont redimensionnées pour correspondre aux emplacements définis par les thèmes. L’ensemble des ces tailles pouvant changer d’un thème à un autre peuvent être définies directement dans le thème et éviter ainsi à l’utilisateur de devoir les configurer manuellement après avoir changé l’apparence de son site.
    Ces tailles d’images sont également disponibles dans la configuration spécifique de MediaSPIP Core. La taille maximale du logo du site en pixels, on permet (...)

On other websites (7676)

  • FFMPEG C Library: Encoding h264 stream into Matroska .mkv container creates corrupt files

    16 March 2024, by Marvin Killing

    I want to use the FFMPEG C Library to create a Matroska Video .mkv file with only an h264 stream, but the resulting .mkv file comes out corrupt.

    


    The file cannot be played back with Windows Media Player, ffplay, or VLC, and when I try to ffprobe the resulting file, these are the error messages:

    


    [h264 @ 0000015060d8f5c0] No start code is found.
    Last message repeated 1 times
[h264 @ 0000015060d8f5c0] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0000015060d8f5c0] decode_slice_header error
[h264 @ 0000015060d8f5c0] no frame!
[h264 @ 0000015060d8f5c0] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0000015060d8f5c0] decode_slice_header error
[h264 @ 0000015060d8f5c0] no frame!
[h264 @ 0000015060d8f5c0] non-existing PPS 0 referenced
    Last message repeated 1 times
# [...]
# this continues for a long time


    


    I have followed the other troubleshooting steps for encoding h264 into Matroska, but none of them seemed to have done the trick for me:

    


    


    This is my C code:

    


    #include &#xA;#include <libavutil></libavutil>opt.h>&#xA;#include <libavutil></libavutil>imgutils.h>&#xA;#include <libavcodec></libavcodec>avcodec.h>&#xA;#include <libavformat></libavformat>avformat.h>&#xA;&#xA;int main(void) {&#xA;    char *out_file_path = "./video.mkv";&#xA;    AVFormatContext *format_context;&#xA;    AVStream *video_stream;&#xA;    AVCodecContext *codec_context;&#xA;&#xA;    avformat_alloc_output_context2(&amp;format_context, NULL, NULL, out_file_path);&#xA;&#xA;    const AVCodec *codec = avcodec_find_encoder(AV_CODEC_ID_H264);&#xA;    video_stream = avformat_new_stream(format_context, NULL);&#xA;&#xA;    codec_context = avcodec_alloc_context3(codec);&#xA;    av_opt_set(codec_context->priv_data, "preset", "superfast", 0);&#xA;    av_opt_set(codec_context->priv_data, "crf", "22", 0);&#xA;&#xA;    codec_context->width = 1920;&#xA;    codec_context->height = 1080;&#xA;    codec_context->time_base = av_make_q(1, 30);&#xA;    codec_context->pix_fmt = AV_PIX_FMT_YUV420P;&#xA;&#xA;    if (strncmp("./video.mkv", out_file_path, 11) == 0) {&#xA;      printf("Writing .mkv...\n");&#xA;      codec_context->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;&#xA;      codec_context->extradata = (uint8_t*)av_mallocz(1024 * 1024);&#xA;      codec_context->extradata_size = 1024 * 1024;&#xA;    } else {&#xA;      printf("Writing .mp4...\n");&#xA;    }&#xA;&#xA;    // XXX avcodec_parameters_from_context is potentially superfluous (?)&#xA;    int ret = avcodec_parameters_from_context(video_stream->codecpar, codec_context);&#xA;&#xA;    ret = avcodec_open2(codec_context, codec, NULL);&#xA;&#xA;    avio_open(&amp;format_context->pb, out_file_path, AVIO_FLAG_WRITE);&#xA;&#xA;    ret = avformat_write_header(format_context, NULL);&#xA;&#xA;    // create a black input frame&#xA;    AVFrame *input_frame = av_frame_alloc();&#xA;    input_frame->width = 1920;&#xA;    input_frame->height = 1080;&#xA;    input_frame->format = AV_PIX_FMT_YUV420P;&#xA;    ret = av_image_alloc(input_frame->data, input_frame->linesize, input_frame->width, input_frame->height, input_frame->format, 32);&#xA;    ptrdiff_t linesize[4] = { input_frame->linesize[0], input_frame->linesize[1], input_frame->linesize[2], input_frame->linesize[3] };&#xA;    ret = av_image_fill_black(input_frame->data, linesize, input_frame->format, 0, 1920, 1080);&#xA;&#xA;    // write 2 seconds of video, all black&#xA;    for (size_t current_pts = 0; current_pts &lt; 60; current_pts&#x2B;&#x2B;) {&#xA;      input_frame->pts = av_rescale_q(current_pts, av_make_q(1, 30), codec_context->time_base);;&#xA;&#xA;      ret = avcodec_send_frame(codec_context, input_frame);&#xA;&#xA;      AVPacket* packet = av_packet_alloc();&#xA;&#xA;      while (1) {&#xA;          ret = avcodec_receive_packet(codec_context, packet);&#xA;          if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {&#xA;              break;&#xA;          } else if (ret &lt; 0) {&#xA;              printf("avcodec_receive_packet failed");&#xA;          } else {&#xA;              av_packet_rescale_ts(packet, codec_context->time_base, video_stream->time_base);&#xA;              ret = av_interleaved_write_frame(format_context, packet);&#xA;          }&#xA;      }&#xA;&#xA;      av_packet_free(&amp;packet);&#xA;    }&#xA;&#xA;    av_frame_free(&amp;input_frame);&#xA;&#xA;    // flush encoder&#xA;    avcodec_send_frame(codec_context, NULL);&#xA;    AVPacket *flush_packet = av_packet_alloc();&#xA;    while (avcodec_receive_packet(codec_context, flush_packet) != AVERROR_EOF) {&#xA;        //int ret = av_interleaved_write_frame(format_context_, packet);&#xA;        av_packet_rescale_ts(flush_packet, codec_context->time_base, video_stream->time_base);&#xA;        ret = av_write_frame(format_context, flush_packet);&#xA;    }&#xA;    av_packet_free(&amp;flush_packet);&#xA;&#xA;    ret = av_write_trailer(format_context);&#xA;    ret = avio_close(format_context->pb);&#xA;&#xA;    return 0;&#xA;}&#xA;

    &#xA;

    The error handling is stripped out, but it does not raise any errors.

    &#xA;

    This code works when I write into an mp4 file, but creates a corrupt file when writing into .mkv. You can change the output container format to mp4 by setting&#xA;char *out_file_path = "./video.mp4";

    &#xA;

    You can compile this by running

    &#xA;

    clang -I$(FFMPEG_DIR)/include -L$(FFMPEG_DIR)/lib -lavformat -lavcodec -lavutil main.c -o makemkv&#xA;

    &#xA;

    The output I’m getting while the above code is running:

    &#xA;

    Writing .mkv...&#xA;[libx264 @ 0x139804c40] using cpu capabilities: ARMv8 NEON&#xA;[libx264 @ 0x139804c40] profile High, level 4.0, 4:2:0, 8-bit&#xA;[libx264 @ 0x139804c40] 264 - core 164 r3108 31e19f9 - H.264/MPEG-4 AVC codec - Copyleft 2003-2023 - http://www.videolan.org/x264.html - options: cabac=1 ref=1 deblock=1:0:0 analyse=0x3:0x3 me=dia subme=1 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=15 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=1 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc=crf mbtree=0 crf=22.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 pb_ratio=1.30 aq=1:1.00&#xA;

    &#xA;

    When I use the ffmpeg CLI, I can create a working .mkv from my working .mp4 like this:

    &#xA;

    ffmpeg -i video.mp4 -c:v copy created-with-ffmpeg-cli.mkv&#xA;

    &#xA;

    I have uploaded the resulting video files here: https://drive.google.com/drive/folders/1FS-0fBAwKBbO-tyxC0VrFqcCyyqd0BR_?usp=sharing

    &#xA;

  • ffmpeg with Quick Sync Video (qsv) gets stuck

    28 April 2023, by Juliano B. Nequirito

    I've compiled ffmpeg in an Arch Linux distribution with support to Intel Quick Sync Video. But ffmpeg gets stuck when I try to run it:

    &#xA;

    $ ffmpeg -debug -hwaccel qsv -qsv_device /dev/dri/renderD128 -c:v h264_qsv -i test_video.mp4 -c:v hevc_qsv output.mp4&#xA;&#xA;ffmpeg version N-109562-g0431f9805e Copyright (c) 2000-2023 the FFmpeg developers&#xA;  built with gcc 12.2.0 (GCC)&#xA;  configuration: --prefix=/usr --extra-cflags=-I/opt/cuda/include --extra-ldflags=-L/opt/cuda/lib64 --enable-lto --disable-rpath --enable-gpl --enable-version3 --enable-nonfree --enable-shared --disable-static --disable-stripping --enable-gray --enable-alsa --enable-avisynth --enable-bzlib --enable-chromaprint --enable-frei0r --enable-gcrypt --enable-gmp --enable-gnutls --enable-iconv --enable-ladspa --enable-lcms2 --enable-libaom --enable-libaribb24 --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcelt --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libdavs2 --enable-libdc1394 --enable-libfdk-aac --enable-libflite --enable-fontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libiec61883 --enable-libilbc --enable-libjack --enable-libjxl --enable-libklvanc --enable-libkvazaar --enable-liblensfun --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --disable-libopencv --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --disable-libopenvino --enable-libopus --enable-libplacebo --enable-libpulse --enable-librabbitmq --enable-librav1e --enable-librist --enable-librsvg --enable-librubberband --enable-librtmp --enable-libshine --enable-libsmbclient --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libsvthevc --enable-libsvtvp9 --disable-libtensorflow --enable-libtesseract --enable-libtheora --disable-libtls --enable-libtwolame --enable-libuavs3d --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxavs2 --enable-libxcb --enable-libxcb-shm --enable-libxcb-xfixes --enable-libxcb-shape --enable-libxvid --enable-libxml2 --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-lzma --enable-decklink --disable-mbedtls --enable-libmysofa --enable-openal --enable-opencl --enable-opengl --disable-openssl --enable-pocketsphinx --enable-sndio --enable-sdl2 --enable-vapoursynth --enable-vulkan --enable-xlib --enable-zlib --enable-amf --enable-cuda-nvcc --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-libdrm --enable-libvpl --enable-libnpp --enable-nvdec --enable-nvenc --enable-omx --enable-rkmpp --enable-v4l2-m2m --enable-vaapi --enable-vdpau&#xA;  libavutil      57. 43.100 / 57. 43.100&#xA;  libavcodec     59. 56.100 / 59. 56.100&#xA;  libavformat    59. 34.102 / 59. 34.102&#xA;  libavdevice    59.  8.101 / 59.  8.101&#xA;  libavfilter     8. 53.100 /  8. 53.100&#xA;  libswscale      6.  8.112 /  6.  8.112&#xA;  libswresample   4.  9.100 /  4.  9.100&#xA;  libpostproc    56.  7.100 / 56.  7.100&#xA; matched as AVOption &#x27;debug&#x27; with argument &#x27;-hwaccel&#x27;.&#xA;Reading option &#x27;qsv&#x27; ... matched as output url.&#xA;Reading option &#x27;-qsv_device&#x27; ... matched as option &#x27;qsv_device&#x27; (set QSV hardware device (DirectX adapter index, DRM path or X11 display name)) with argument &#x27;/dev/dri/renderD128&#x27;.&#xA;Reading option &#x27;-c:v&#x27; ... matched as option &#x27;c&#x27; (codec name) with argument &#x27;h264_qsv&#x27;.&#xA;Reading option &#x27;-i&#x27; ... matched as input url with argument &#x27;test_video.mp4&#x27;.&#xA;Reading option &#x27;-c:v&#x27; ... matched as option &#x27;c&#x27; (codec name) with argument &#x27;hevc_qsv&#x27;.&#xA;Reading option &#x27;output.mp4&#x27; ... matched as output url.&#xA;Finished splitting the commandline.&#xA;Parsing a group of options: global .&#xA;Applying option qsv_device (set QSV hardware device (DirectX adapter index, DRM path or X11 display name)) with argument /dev/dri/renderD128.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] libva: VA-API version 1.17.0&#xA;[AVHWDeviceContext @ 0x5590d517ee40] libva: User requested driver &#x27;iHD&#x27;&#xA;[AVHWDeviceContext @ 0x5590d517ee40] libva: Trying to open /usr/lib/dri/iHD_drv_video.so&#xA;[AVHWDeviceContext @ 0x5590d517ee40] libva: Found init function __vaDriverInit_1_16&#xA;[AVHWDeviceContext @ 0x5590d517ee40] libva: va_openDriver() returns 0&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Initialised VAAPI connection: version 1.17&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x41524742 -> bgra.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x42475241 -> argb.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x41424752 -> rgba.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x52474241 -> abgr.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x58524742 -> bgr0.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x42475258 -> 0rgb.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x58424752 -> rgb0.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x52474258 -> 0bgr.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x30335241 -> unknown.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x30334241 -> unknown.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x30335258 -> x2rgb10le.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x30334258 -> unknown.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x36314752 -> unknown.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x50424752 -> unknown.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x50524742 -> unknown.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x56555941 -> unknown.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x30303859 -> gray.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x3231564e -> nv12.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x3132564e -> unknown.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x32595559 -> yuyv422.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x59565955 -> uyvy422.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x32315659 -> yuv420p.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x30323449 -> yuv420p.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x50313134 -> yuv411p.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x48323234 -> yuv422p.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x56323234 -> yuv440p.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x50343434 -> yuv444p.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x33434d49 -> unknown.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Format 0x30313050 -> p010le.&#xA;[AVHWDeviceContext @ 0x5590d517ee40] VAAPI driver: Intel iHD driver for Intel(R) Gen Graphics - 22.6.4 ().&#xA;[AVHWDeviceContext @ 0x5590d517ee40] Driver not found in known nonstandard list, using standard behaviour.&#xA;[AVHWDeviceContext @ 0x5590d517e940] Use Intel(R) oneVPL to create MFX session, API version is 2.6, the required implementation version is 1.3&#xA;

    &#xA;

    CPU starts being used intensively and then nothing happens.&#xA;Does anybody have any clue on it?

    &#xA;

    I have an Intel i7-8550U (8th gen Kaby Lake) processor with 4 cores (8 threads).

    &#xA;

    I have also used these options to ffmpeg, getting the same results:

    &#xA;

    ffmpeg -loglevel debug -init_hw_device qsv=hw -filter_hw_device hw -hwaccel qsv -hwaccel_output_format qsv -i test_video.mp4 -vf &#x27;format=qsv,hwupload=extra_hw_frames=64&#x27; -c:v hevc_qsv -f mp4 output.mp4&#xA;

    &#xA;

    With VAAPI, transcoding runs flowlessly:

    &#xA;

    ffmpeg -init_hw_device vaapi=intel:/dev/dri/renderD128 -hwaccel vaapi -hwaccel_output_format vaapi -hwaccel_device intel -filter_hw_device intel -i test_video.mp4 -c:v hevc_vaapi -f mp4 output.mp4&#xA;

    &#xA;

  • Homepage Design: Best Practices & Examples

    5 October 2022, by 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