Recherche avancée

Médias (2)

Mot : - Tags -/map

Autres articles (85)

  • Les sons

    15 mai 2013, par
  • Support de tous types de médias

    10 avril 2011

    Contrairement à beaucoup de logiciels et autres plate-formes modernes de partage de documents, MediaSPIP a l’ambition de gérer un maximum de formats de documents différents qu’ils soient de type : images (png, gif, jpg, bmp et autres...) ; audio (MP3, Ogg, Wav et autres...) ; vidéo (Avi, MP4, Ogv, mpg, mov, wmv et autres...) ; contenu textuel, code ou autres (open office, microsoft office (tableur, présentation), web (html, css), LaTeX, Google Earth) (...)

  • Pas question de marché, de cloud etc...

    10 avril 2011

    Le vocabulaire utilisé sur ce site essaie d’éviter toute référence à la mode qui fleurit allègrement
    sur le web 2.0 et dans les entreprises qui en vivent.
    Vous êtes donc invité à bannir l’utilisation des termes "Brand", "Cloud", "Marché" etc...
    Notre motivation est avant tout de créer un outil simple, accessible à pour tout le monde, favorisant
    le partage de créations sur Internet et permettant aux auteurs de garder une autonomie optimale.
    Aucun "contrat Gold ou Premium" n’est donc prévu, aucun (...)

Sur d’autres sites (5477)

  • A Beginner’s Guide to Omnichannel Analytics

    14 avril 2024, par Erin

    Linear customer journeys are as obsolete as dial-up internet and floppy disks. As a marketing manager, you know better than anyone that customers interact with your brand hundreds of times across dozens of channels before purchasing. That can make tracking them a nightmare unless you build an omnichannel analytics solution. 

    Alas, if only it were that simple. 

    Unfortunately, it’s not enough to collect data on your customers’ complex journeys just by buying an omnichannel platform. You need to generate actionable insights by using marketing attribution to tie channels to conversions. 

    This article will explain how to build a useful omnichannel analytics solution that lets you understand and improve the customer journey.

    What is omnichannel analytics ?

    Omnichannel analytics collects and analyses customer data from every touchpoint and device. The goal is to collect all this omnichannel data in one place, creating a single, real-time, unified view of your customer’s journey.

    What is omnichannel analytics

    Unfortunately, most businesses haven’t achieved this yet. As Karen Lellouche Tordjman and Marco Bertini say :

    “Despite all the buzz around the concept of omnichannel, most companies still view customer journeys as a linear sequence of standardised touchpoints within a given channel. But the future of customer engagement transforms touchpoints from nodes along a predefined distribution path to full-blown portals that can serve as points of sale or pathways to many other digital and virtual interactions. They link to chatbots, kiosks, robo-advisors, and other tools that customers — especially younger ones — want to engage with.”

    However, doing so is more important than ever — especially when consumers have over 300 digital touchpoints, and the average number of touchpoints in the B2B buyer journey is 27.

    Not only that, but customers expect personalised experiences across every platform — that’s the kind you can only create when you have access to omnichannel data.

    A diagram showing how complex customer journeys are

    What might omnichannel analytics look like in practice for an e-commerce store ?

    An online store would integrate data from channels like its website, mobile app, social media accounts, Google Ads and customer service records. This would show how customers find its brand, how they use each channel to interact with it and which channels convert the most customers. 

    This would allow the e-commerce store to tailor marketing channels to customers’ needs. For instance, they could focus social media use on product discovery and customer support. Google Ads campaigns could target the best-converting products. While all this is happening, the store could also ensure every channel looks the same and delivers the same experience. 

    What are the benefits of omnichannel analytics ?

    Why go to all the trouble of creating a comprehensive view of the customer’s experience ? Because you stand to gain some pretty significant benefits when implementing omnichannel analytics.

    What are the benefits of omnichannel analytics?

    Understand the customer journey

    You want to understand how your customers behave, right ? No other method will allow you to fully understand your customer journey the way omnichannel analytics does. 

    It doesn’t matter how customers engage with your brand — whether that’s your website, app, social media profiles or physical stores — omnichannel analytics capture every interaction.

    With this 360-degree view of your customers, it’s easy to understand how they move between channels, where they encounter issues and what bottlenecks prevent them from converting. 

    Deliver better personalisation

    We don’t have to tell you that personalisation matters. But do you know just how important it is ? Since 56% of customers will become repeat buyers after a personalised experience, delivering them as often as possible is critical. 

    Omnichannel analytics helps in your quest for personalisation by highlighting the individual preferences of customer segments. For example, e-commerce stores can use omnichannel analytics to understand how shoppers behave across different devices and tailor their offers accordingly. 

    Upgrade the customer experience

    Omnichannel analytics gives you the insights to improve every aspect of the customer experience. 

    For starters, you can ensure a consistent brand experience across all your top channels by making sure they look and behave the same.

    Then, you can use omnichannel insights to tailor each channel to your customers’ requirements. For example, most people interacting with your brand on social media may seek support. Knowing that you can create dedicated support accounts to assist users. 

    Improve marketing campaigns

    Which marketing campaigns or traffic sources convert the most customers ? How can you improve these campaigns ? Omnichannel analytics has the answers. 

    When you implement omnichannel analytics you automatically track the performance of every marketing channel by attributing each conversion to one or more traffic sources. This lets you see whether Google Ads bring in more customers than your SEO efforts. Or whether social media ads are the most profitable acquisition channel. 

    Armed with this information, you can improve your marketing efforts — either by focusing on your profitable channels or rectifying problems that stop less profitable channels from converting.

    What are the challenges of omnichannel analytics ?

    There are three challenges when implementing an omnichannel analytics solution :

    What are the challenges of omnichannel analytics?
    • Complex customer journeys : Customer journeys aren’t linear and can be incredibly difficult to track. 
    • Regulatory and privacy issues : When you start gathering customer data, you quickly come up against consumer privacy laws. 
    • No underlying goal : There has to be a reason to go to all this effort, but brands don’t always have goals in mind before they start. 

    You can’t do anything about the first challenge. 

    After all, your customer journey will almost never be linear. And isn’t the point of implementing an omnichannel solution to understand these complex journeys in the first place ? Once you set up omnichannel analytics, these journeys will be much easier to decipher. 

    As for the other two :

    Using the right software that respects user privacy and complies with all major privacy laws will avoid regulatory issues. Take Matomo, for instance. Our software was designed with privacy in mind and is configured to follow the strictest privacy laws, such as GDPR. 

    Tying omnichannel analytics to marketing attribution will solve the final challenge by giving your omnichannel efforts a goal. When you tie omnichannel analytics to your marketing efforts, you aren’t just getting a 360-degree view of your customer journey for the sake of it. You are getting that view to improve your marketing efforts and increase sales.

    Try Matomo for Free

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

    No credit card required

    How to set up an omnichannel analytics solution

    Want to set up a seamless analytical environment that incorporates data from every possible source ? Follow these five steps :

    Choose one or more analytics providers

    You can use several tools to build an omnichannel analytics solution. These include web and app analytics tools, customer data platforms that centralise first-party data and business intelligence tools (typically used for visualisation). 

    Which tools you use will depend on your goals and your budget — the loftier your ambitions and the higher your budget, the more tools you can use. 

    Ideally, you should use as few tools as possible to capture your data. Most teams won’t need business intelligence platforms, for example. However, you may or may not need both an analytics platform and a customer data platform. Your decision will depend on how many channels your customers use and how well your analytics tool tracks everything.

    If it can capture web and app usage while integrating with third-party platforms like your back-end e-commerce platform, then it’s probably enough.

    Collect accurate data at every touchpoint 

    Your omnichannel analytics efforts hinge on the quantity and quality of data you can collect. You want to gather data from every touchpoint possible and store that data in as few places as possible. That’s why choosing as few tools as possible in the step above is so important. 

    So, where should you start ? Common data sources include :

    • Your website
    • Apps (iOS and Android)
    • Social media profiles
    • ERPs
    • PoS systems

    At the same time, make sure you’re tracking all relevant metrics. Revenue, customer engagement and conversion-focused metrics like conversion rate, dwell time, cart abandonment rate and churn rate are particularly important. 

    Set up marketing attribution

    Setting up marketing attribution (also known as multi-touch attribution) is essential to tie omnichannel data to business goals. It’s the only way to know exactly how valuable each marketing channel is and where each customer comes from. 

    You’ll want to use multi-touch attribution, given you have data from across the customer journey.

    Image of six different attribution models

    Multi-touch attribution models can include (but are not limited to) :

    • Linear : where each touchpoint is given equal weighting
    • Time decay : where touchpoints are more valuable the nearer they are to conversion
    • Position-based : where the first and last touch points are more valuable than all the others. 

    You don’t have to use just one of the models above, however. One of the benefits of using a web analytics tool like Matomo is that you can choose between different attribution models and compare them.

    Try Matomo for Free

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

    No credit card required

    Create reports that help you visualise data

    Dashboards are your friend here. They’ll let you see KPIs at a glance, allowing you to keep track of day-to-day changes in your customer journey. Ideally, you’ll want a platform that lets you customise dashboard widgets so only relevant KPIs are shown. 

    A custom graph created in Matomo

    Setting up standard and custom reports is also important. Custom reports allow you to choose metrics and dimensions that align with your goals. They will also allow you to present your data most meaningfully to your team, increasing the likelihood they act upon insights. 

    Analyse data and take action

    Now that you have customer journey data at your fingertips, it’s time to analyse it. After all, there’s no point in implementing an omnichannel analytics solution if you aren’t going to take action. 

    If you’re unsure where to start, re-read the benefits we listed at the start of this article. You could use your omnichannel insights to improve your marketing campaigns by doubling down on the channels that bring in the best customers.

    Or you could identify (and fix) bottlenecks in the customer journey so customers are less likely to fall out of your funnel between certain channels. 

    Just make sure you take action based on your data alone.

    Make the most of omnichannel analytics with Matomo

    A comprehensive web and app analytics platform is vital to any omnichannel analytics strategy. 

    But not just any solution will do. When privacy regulations impede an omnichannel analytics solution, you need a platform to capture accurate data without breaking privacy laws or your users’ trust. 

    That’s where Matomo comes in. Our privacy-friendly web analytics platform ensures accurate tracking of web traffic while keeping you compliant with even the strictest regulations. Moreover, our range of APIs and SDKs makes it easy to track interactions from all your digital products (website, apps, e-commerce back-ends, etc.) in one place. 

    Try Matomo for free for 21 days. No credit card required.

  • Facebook Reels Upload always failing

    21 juin, par Evrard A.

    I'm trying to upload Reels through Facebook Graph API. The video is created with the following ffmpeg command.

    


    cmd = [
            'ffmpeg',
            '-i', video_path,
            '-i', voice_path,
            '-i', music_path,

            '-filter_complex',
            '[1:a]loudnorm=I=-16:LRA=11:TP=-1.5,adelay=0|0[a1];' +
            '[2:a]volume=0.2,afade=t=in:ss=0:d=0.02,afade=t=out:st=28:d=0.03[a2];' +
            '[a1][a2]amix=inputs=2:duration=first:dropout_transition=0[aout]',

            '-map', '0:v:0',
            '-map', '[aout]',

            '-vf',
             f"subtitles='{str(ass_path)}',format=yuv420p,scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2,setsar=1",  # Incrustation des sous-titres

            '-r', '30',
            '-g', '60',
            '-keyint_min', '60',
            '-sc_threshold', '0',
            '-x264opts', 'no-scenecut',

            '-c:v', 'libx264',
            '-profile:v', 'baseline',
            '-level', '4.1',
            '-pix_fmt', 'yuv420p',
            '-color_range', 'tv',
            '-colorspace', 'bt709',

            '-b:v', '9500k',
            '-maxrate', '9500k',
            '-bufsize', '19000k',

            '-c:a', 'aac',
            '-b:a', '192k',
            '-ac', '2',
            '-ar', '48000',

            '-movflags', '+faststart',
            '-video_track_timescale', '15360',
            '-max_muxing_queue_size', '9999',

            '-y', self.output_video_path if self.output_video_path else f'{parts[0]}.subtitled.{parts[1]}'
        ]

        subprocess.run(cmd, check=True)


    


    Here is the class method I use to publish :

    


      import requests, os,  time
  from datetime import datetime, timedelta
  from moviepy.editor import VideoFileClip
   
  def post_reel(
      self,
      page_id: str,
      page_access_token: str,
      video_file_path: str,
      video_description: str,
      tags: list = None, # type: ignore
      publish_now: bool = True
  ):
      def extract_first_frame(video_path: str, output_image_path: str, time_in_seconds: float = 1):
          """
          Extrait une frame à time_in_seconds et la sauvegarde comme miniature.
          """
          try:
              clip = VideoFileClip(video_path)
              clip.save_frame(output_image_path, t=time_in_seconds)
              print(f"[THUMBNAIL] Frame at {time_in_seconds}s saved to {output_image_path}")
              return output_image_path
          except Exception as e:
              print(f"[ERROR] Could not extract thumbnail: {str(e)}")
              return None

      def wait_for_video_ready(video_id, page_access_token, timeout=300, poll_interval=10):
          """
          Attends que la vidéo soit complètement traitée et publiée.
          """
          status_url = f"{self.BASE_API_URL}/{video_id}"
          params = {
              "access_token": page_access_token,
              "fields": "status"
          }

          start = time.time()
          while time.time() - start < timeout:
              try:
                  r = requests.get(url=status_url, params=params)
                  r.raise_for_status()
                  status = r.json().get("status", {})
                  processing = status.get("processing_phase", {}).get("status")
                  publishing = status.get("publishing_phase", {}).get("status")
                  video_status = status.get("video_status")

                  print(f"[WAIT] video_status={video_status}, processing={processing}, publishing={publishing}")

                  if processing == "complete" and publishing == "complete":
                      print("[READY] Reel processed and published")
                      return True
                  elif processing == "error":
                     print(r.json())

              except Exception as e:
                  print(f"[ERROR] during polling: {e}")

              time.sleep(poll_interval)

          print("[TIMEOUT] Video did not finish processing in time.")
          return False

      try:
          # Step 1: Initialize upload
          init_url = f"{self.BASE_API_URL}/{page_id}/video_reels"
          init_params = {"upload_phase": "start"}
          init_payload = {'access_token': page_access_token}

          r = requests.post(url=init_url, data=init_payload, params=init_params)
          r.raise_for_status()
          response = r.json()
          video_id = response["video_id"]
          upload_url = response["upload_url"]
          print(f"[INIT OK] Video ID: {video_id}")

          # Step 2: Upload video
          file_size = os.path.getsize(video_file_path)
          headers = {
              'Authorization': f"OAuth {page_access_token}",
              'offset': "0",
              'file_size': str(file_size),
          }

          with open(video_file_path, 'rb') as f:
              files = {'source': f}
              r = requests.post(url=upload_url, data=files, headers=headers)
              r.raise_for_status()
              upload_response = r.json()

          if not upload_response.get("success"):
              print("[ERROR] Upload failed.")
              return None
          print(f"[UPLOAD OK]")

          # Step 3: Check video status
          status_check_url = f'{self.BASE_API_URL}/{video_id}'
          check_params = {
              "access_token": page_access_token,
              "fields": "status"
          }
          r = requests.get(url=status_check_url, params=check_params)
          r.raise_for_status()
          print(f"[STATUS CHECK] {r.json()}")

          # Step 4: Finalize video
          finalize_params = {
              "video_id": video_id,
              "upload_phase": "finish",
              "published": "true",
              "access_token": page_access_token,
              "video_state": "PUBLISHED" if publish_now else "SCHEDULED",
              "title": video_description,
              "description": video_description
          }

          if not publish_now:
              finalize_params["scheduled_publish_time"] = int((datetime.now() + timedelta(days=1)).timestamp())

          if tags:
              finalize_params["tags"] = ",".join(tags)

          r = requests.post(url=init_url, params=finalize_params, headers=headers)
          r.raise_for_status()
          finalize_response = r.json()
          post_id = finalize_response.get("post_id")
          print(f"[FINALIZE OK] Post ID: {post_id}")
          
          # WAIT UNTIL PUBLISHED
          if not wait_for_video_ready(video_id, page_access_token):
              print("[ERROR] Reel processing timeout or failure")
              return None
          
          # Step 5: Extract and upload thumbnail
          thumbnail_path = f"temp_thumb_{video_id}.jpg"
          if extract_first_frame(video_file_path, thumbnail_path):
              thumb_url = f"{self.BASE_API_URL}/{video_id}/thumbnails"
              with open(thumbnail_path, 'rb') as img:
                  files = {'source': img}
                  thumb_payload = {'access_token': page_access_token}
                  r = requests.post(url=thumb_url, files=files, data=thumb_payload)
                  r.raise_for_status()
                  print("[THUMBNAIL UPLOADED]")
              # Clean up temp file
              os.remove(thumbnail_path)
              print("[THUMBNAIL CLEANED UP]")

          return post_id

      except Exception as e:
          print(f"[ERROR] {str(e)}")
          return None


    


    Here are the logs I get :

    


      

    • [INIT OK] Video ID: 1020853163558419
    • 


    • [UPLOAD OK]
    • 


    • [STATUS CHECK]
    • 


    


    {
  "status": {
    "video_status": "upload_complete",
    "uploading_phase": {
      "status": "complete",
      "bytes_transferred": 37780189
    },
    "processing_phase": {
      "status": "not_started"
    },
    "publishing_phase": {
      "status": "not_started"
    },
    "copyright_check_status": {
      "status": "in_progress"
    }
  },
  "id": "1020853163558419"
}


    


      

    • [FINALIZE OK] Post ID: 122162302376476425
    • 


    • [WAIT] video_status=upload_complete, processing=not_started, publishing=not_started
    • 


    • [WAIT] video_status=error, processing=error, publishing=not_started
    • 


    


    {
  "status": {
    "video_status": "error",
    "uploading_phase": {
      "status": "complete",
      "bytes_transferred": 37780189
    },
    "processing_phase": {
      "status": "error",
      "errors": [
        {
          "code": 1363008,
          "message": "Video Creation failed, please try again."
        }
      ]
    },
    "publishing_phase": {
      "status": "not_started"
    },
    "copyright_check_status": {
      "status": "in_progress"
    }
  },
  "id": "1020853163558419"
}


    


    It seems the error code 1363008 is related to the video properties format but even after following Facebook Reels video format recommandations, I can't make it work.

    


    Can you help me with this please ?

    


    I failed getting usefull help with ChatGPT 😅, and thanks in advance for anyone who answers or comments my question.

    


  • Scheduling an RTMP stream remotely - using an intermediary server for storing + sending video stream packets before deploying to streaming service

    25 février 2020, par hedgehog90

    This is more of a curiosity than something I really need, but I thought I’d ask anyway.

    If I just want setup a normal livestream, I would use something like OBS, capture my input, encode it into something manageable for my network and send it to a remote rtmp server.

    But I’d like to know if it’s possible to put an intermediary remote server between myself and the streaming service’s server. Basically so I can manage the stream (if it’s a playlist) and schedule when to send it to broadcast on the streaming service.

    It’s also worth noting that there may be limited bandwidth on the client-side (my computer), assuming the intermediary has greater bandwidth, this method should eliminate the common issue of dropping frames while streaming.

    Now for an example :

    To make it simpler, instead of using OBS + capture hardware, I’m using a video file.
    I want to encode that video in the same way that OBS does when streaming to a remote server via an rtmp protocol using ffmpeg.

    Now I upload that data, at my own rate, to a remote server that I control (running Ubuntu) for storage and eventual deployment. Importantly, I do not want or require any video-processing done on the intermediary server, as we have already encoded the data for deployment on the client-side. This is just simply managing and storing the data.

    A day later, I want to run a script on my intermediary server that will then send the processed stream data, packet by packet, to the targeted streaming server.


    I’m an experienced coder, with lots of experience with data handling and video encoding. It should be simple, but I’m not all that clued up on the way video streaming via RTMP works.