Recherche avancée

Médias (0)

Mot : - Tags -/auteurs

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (13)

  • Installation en mode ferme

    4 février 2011, par

    Le mode ferme permet d’héberger plusieurs sites de type MediaSPIP en n’installant qu’une seule fois son noyau fonctionnel.
    C’est la méthode que nous utilisons sur cette même plateforme.
    L’utilisation en mode ferme nécessite de connaïtre un peu le mécanisme de SPIP contrairement à la version standalone qui ne nécessite pas réellement de connaissances spécifique puisque l’espace privé habituel de SPIP n’est plus utilisé.
    Dans un premier temps, vous devez avoir installé les mêmes fichiers que l’installation (...)

  • Supporting all media types

    13 avril 2011, par

    Unlike most software and media-sharing platforms, MediaSPIP aims to manage as many different media types as possible. The following are just a few examples from an ever-expanding list of supported formats : images : png, gif, jpg, bmp and more audio : MP3, Ogg, Wav and more video : AVI, MP4, OGV, mpg, mov, wmv and more text, code and other data : OpenOffice, Microsoft Office (Word, PowerPoint, Excel), web (html, CSS), LaTeX, Google Earth and (...)

  • Taille des images et des logos définissables

    9 février 2011, par

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

Sur d’autres sites (4528)

  • MPEG DASH : frame seeking

    13 août 2014, par bisc8

    TL ;DR : Is it possible to achieve frame seeking using DASH ? How ?

    I’m using ffmpeg to create non-multiplexed content :

    ffmpeg -y -an -codec:v libx264 -profile:v baseline output_video.mp4 -i video.mp4
    ffmpeg -y -vn -codec:a libvo_aacenc -ac 1 -ar 44100 output_audio.mp4 -i video.mp4

    Then I’m using mp4box to create DASH content :

    mp4box -dash 10000 -frag 1000 -rap -dash-profile live -segment-name mp4-live-$RepresentationID$-$Number$ -out manifest.mpd output_video.mp4 output_audio.mp4

    Finally I open the generated content with Chrome, using dash.js. Everything works fine except that I can’t do frame seek. I keep on adding (1/frame_rate) seconds to the current time but nothing happens, the frame only changes after 10 seconds.

    I suppose this has to do with the video’s key interval. However, I am able to do frame seek after the ffmpeg part, so I guess I’m missing something in the mp4box command.

    Is it possible to achieve frame seeking using DASH or am I missing something ?

    Thanks in advance.

  • Anatomy of an optimization : H.264 deblocking

    26 mai 2010, par Dark Shikari — H.264, assembly, development, speed, x264

    As mentioned in the previous post, H.264 has an adaptive deblocking filter. But what exactly does that mean — and more importantly, what does it mean for performance ? And how can we make it as fast as possible ? In this post I’ll try to answer these questions, particularly in relation to my recent deblocking optimizations in x264.

    H.264′s deblocking filter has two steps : strength calculation and the actual filter. The first step calculates the parameters for the second step. The filter runs on all the edges in each macroblock. That’s 4 vertical edges of length 16 pixels and 4 horizontal edges of length 16 pixels. The vertical edges are filtered first, from left to right, then the horizontal edges, from top to bottom (order matters !). The leftmost edge is the one between the current macroblock and the left macroblock, while the topmost edge is the one between the current macroblock and the top macroblock.

    Here’s the formula for the strength calculation in progressive mode. The highest strength that applies is always selected.

    If we’re on the edge between an intra macroblock and any other macroblock : Strength 4
    If we’re on an internal edge of an intra macroblock : Strength 3
    If either side of a 4-pixel-long edge has residual data : Strength 2
    If the motion vectors on opposite sides of a 4-pixel-long edge are at least a pixel apart (in either x or y direction) or the reference frames aren’t the same : Strength 1
    Otherwise : Strength 0 (no deblocking)

    These values are then thrown into a lookup table depending on the quantizer : higher quantizers have stronger deblocking. Then the actual filter is run with the appropriate parameters. Note that Strength 4 is actually a special deblocking mode that performs a much stronger filter and affects more pixels.

    One can see somewhat intuitively why these strengths are chosen. The deblocker exists to get rid of sharp edges caused by the block-based nature of H.264, and so the strength depends on what exists that might cause such sharp edges. The strength calculation is a way to use existing data from the video stream to make better decisions during the deblocking process, improving compression and quality.

    Both the strength calculation and the actual filter (not described here) are very complex if naively implemented. The latter can be SIMD’d with not too much difficulty ; no H.264 decoder can get away with reasonable performance without such a thing. But what about optimizing the strength calculation ? A quick analysis shows that this can be beneficial as well.

    Since we have to check both horizontal and vertical edges, we have to check up to 32 pairs of coefficient counts (for residual), 16 pairs of reference frame indices, and 128 motion vector values (counting x and y as separate values). This is a lot of calculation ; a naive implementation can take 500-1000 clock cycles on a modern CPU. Of course, there’s a lot of shortcuts we can take. Here’s some examples :

    • If the macroblock uses the 8×8 transform, we only need to check 2 edges in each direction instead of 4, because we don’t deblock inside of the 8×8 blocks.
    • If the macroblock is a P-skip, we only have to check the first edge in each direction, since there’s guaranteed to be no motion vector differences, reference frame differences, or residual inside of the macroblock.
    • If the macroblock has no residual at all, we can skip that check.
    • If we know the partition type of the macroblock, we can do motion vector checks only along the edges of the partitions.
    • If the effective quantizer is so low that no deblocking would be performed no matter what, don’t bother calculating the strength.

    But even all of this doesn’t save us from ourselves. We still have to iterate over a ton of edges, checking each one. Stuff like the partition-checking logic greatly complicates the code and adds overhead even as it reduces the number of checks. And in many cases decoupling the checks to add such logic will make it slower : if the checks are coupled, we can avoid doing a motion vector check if there’s residual, since Strength 2 overrides Strength 1.

    But wait. What if we could do this in SIMD, just like the actual loopfilter itself ? Sure, it seems more of a problem for C code than assembly, but there aren’t any obvious things in the way. Many years ago, Loren Merritt (pengvado) wrote the first SIMD implementation that I know of (for ffmpeg’s decoder) ; it is quite fast, so I decided to work on porting the idea to x264 to see if we could eke out a bit more speed here as well.

    Before I go over what I had to do to make this change, let me first describe how deblocking is implemented in x264. Since the filter is a loopfilter, it acts “in loop” and must be done in both the encoder and decoder — hence why x264 has it too, not just decoders. At the end of encoding one row of macroblocks, x264 goes back and deblocks the row, then performs half-pixel interpolation for use in encoding the next frame.

    We do it per-row for reasons of cache coherency : deblocking accesses a lot of pixels and a lot of code that wouldn’t otherwise be used, so it’s more efficient to do it in a single pass as opposed to deblocking each macroblock immediately after encoding. Then half-pixel interpolation can immediately re-use the resulting data.

    Now to the change. First, I modified deblocking to implement a subset of the macroblock_cache_load function : spend an extra bit of effort loading the necessary data into a data structure which is much simpler to address — as an assembly implementation would need (x264_macroblock_cache_load_deblock). Then I massively cleaned up deblocking to move all of the core strength-calculation logic into a single, small function that could be converted to assembly (deblock_strength_c). Finally, I wrote the assembly functions and worked with Loren to optimize them. Here’s the result.

    And the timings for the resulting assembly function on my Core i7, in cycles :

    deblock_strength_c : 309
    deblock_strength_mmx : 79
    deblock_strength_sse2 : 37
    deblock_strength_ssse3 : 33

    Now that is a seriously nice improvement. 33 cycles on average to perform that many comparisons–that’s absurdly low, especially considering the SIMD takes no branchy shortcuts : it always checks every single edge ! I walked over to my performance chart and happily crossed off a box.

    But I had a hunch that I could do better. Remember, as mentioned earlier, we’re reloading all that data back into our data structures in order to address it. This isn’t that slow, but takes enough time to significantly cut down on the gain of the assembly code. And worse, less than a row ago, all this data was in the correct place to be used (when we just finished encoding the macroblock) ! But if we did the deblocking right after encoding each macroblock, the cache issues would make it too slow to be worth it (yes, I tested this). So I went back to other things, a bit annoyed that I couldn’t get the full benefit of the changes.

    Then, yesterday, I was talking with Pascal, a former Xvid dev and current video hacker over at Google, about various possible x264 optimizations. He had seen my deblocking changes and we discussed that a bit as well. Then two lines hit me like a pile of bricks :

    <_skal_> tried computing the strength at least ?
    <_skal_> while it’s fresh

    Why hadn’t I thought of that ? Do the strength calculation immediately after encoding each macroblock, save the result, and then go pick it up later for the main deblocking filter. Then we can use the data right there and then for strength calculation, but we don’t have to do the whole deblock process until later.

    I went and implemented it and, after working my way through a horde of bugs, eventually got a working implementation. A big catch was that of slices : deblocking normally acts between slices even though normal encoding does not, so I had to perform extra munging to get that to work. By midday today I was able to go cross yet another box off on the performance chart. And now it’s committed.

    Sometimes chatting for 10 minutes with another developer is enough to spot the idea that your brain somehow managed to miss for nearly a straight week.

    NB : the performance chart is on a specific test clip at a specific set of settings (super fast settings) relevant to the company I work at, so it isn’t accurate nor complete for, say, default settings.

    Update : Here’s a higher resolution version of the current chart, as requested in the comments.

  • B2B Customer Journey Map : A Quickfire Guide for Growth

    20 mai 2024, par Erin

    What is a company’s biggest asset ?

    Its product ? Its employees ? Its unique selling proposition ?

    More and more people are recognising it’s something else entirely : your customers.

    Without your customers, your business can’t exist.

    Nearly 77% of B2B buyers found the buying process too complicated.

    With more competition than ever, it’s crucial you provide the best possible experience for them.

    That’s where your customer journey comes in.

    If you’re in the B2B space, you need to know how to map out the journey.

    By building a B2B customer journey map, you’ll be able to analyse the weak spots in the customer journey so you can improve the experience (and generate more revenue).

    In this article, we break down the B2B customer journey stages, how to build a customer journey map and how Matomo can help you track your customer journey automatically.

    What is a B2B customer journey ?

    Every customer goes through a specific path within your business.

    At some point in time, they found out about you and eventually bought your products.

    What is a B2B customer journey?

    A B2B customer journey is the collection of touchpoints your customer has with your business from start to finish.

    From discovery to purchase (and more), your customers go through a specific set of touches you can track. By analysing this journey, you can get a snapshot of your user experience.

    One way to track the customer journey is with a B2B customer journey map.

    It helps you to quickly see the different steps your customers take in their path with your business.

    With it, you can quickly identify weak spots and successes to improve the customer journey.

    5 stages of the B2B customer journey

    Every one of your customers is unique. Their specific needs and their journey.

    It’s all different.

    But, there are crucial steps they take through their journey as your customer.

    It’s the same path your entire customer base takes.

    Here are the five stages of the B2B customer journey (and why you should track them) :

    5 stages of the B2B customer journey.

    1. Awareness

    Awareness is the first stage that every B2B buyer goes through when they start their journey in B2B companies as a customer.

    At this stage, your target buyer understands they have a problem they need solving. They’re out, actively trying to solve this problem. 

    This is where you can stand out from the competition and give them a good first impression.

    Some helpful content you could create to do this is :

    • Blog posts
    • Social media posts
    • Ebooks
    • Whitepapers

    2. Consideration

    Next up, your buyer persona has an awareness of your company. But, now they’ve started narrowing down their options for potential businesses they’re interested in.

    They’ve selected yours as a potential business to hand their hard-earned cash over to, but they’re still making up their mind.

    At this point, you need to do what you can to clear up any objections and doubts in their mind and make them trust you.

    Some helpful content you could create here include :

    • Product demos by your sales team
    • Webinars
    • Case studies

    3. Conversion

    Next up, your target buyer has compared all their options and decided on you as the chosen product/company.

    This is where the purchase decision is made — when the B2B buyer actually signs or clicks “buy.”

    Here, you’ll want to provide more :

    • Case studies
    • Live demos
    • Customer service
    • Customer reviews/testimonials

    4. Loyalty

    Your B2B buyer is now a customer. But, not all customers return. The majority will slip away after the first purchase. If you want them to return, you need to fuel the relationship and nurture them even more.

    You’ll want to shift your efforts to nurturing the relationship with a post-purchase strategy where you build on that trust, seek customer feedback to prove high customer satisfaction and reward their loyalty.

    Some content you may want to create here includes :

    • Thank you emails
    • Follow-up emails
    • Follow-up calls
    • Product how-tos
    • Reward program
    • Surveys

    5. Advocacy

    The final stage of the B2B customer journey map is advocacy.

    This is the stage beyond loyalty where your customers aren’t just coming back for more ; they’re actively telling others about you.

    This is the cream of the crop when it comes to the B2B buyer stages, and it happens when you exceed customer expectations repeatedly.

    Your goal should be to eventually get all of your customers to this stage. Because then, they’re doing free marketing for you.

    This is only possible when a customer receives enough positive B2B customer experiences with your company where the value they’ve received far exceeds what they perceived they have given.

    Here are a few pieces of content you can create to fuel advocacy :

    • Surveys
    • Testimonial requests
    • Referral program

    Difference between B2C and B2B customer journeys

    Every person on earth who buys something enters the customer journey.

    But, not all customer journeys are created equal.

    This is especially true when you compare the B2C and B2B customer journeys.

    While there are similarities, the business-to-consumer (B2C) journey has clear differences compared to the business-to-business (B2B) journey.

    B2C vs. B2B customer journey.

    The most obvious difference between the two journeys is that B2B customer journeys are far more complex. 

    Not only are these two companies selling to different audiences, but they also have to deploy a completely different set of strategies to lead their customers down the path as far as they can go.

    While the journey structures are similar (from awareness to advocacy), there are differing motivating behaviours.

    Here’s a table showing the difference between B2C and B2B in the customer journey :

    Different FactorsB2BB2C
    Target audienceSmaller, industry more importantLarger, general consumer
    BuyerMultiple decision-makersOne decision-maker
    Buying decisionBased on needs of the organisation with multiple stakeholdersBased on an individual’s pain points
    Buying processMultiple stepsSingle step
    Customer retentionOrganisational needs and ROI-basedIndividual emotional factors
    Repeat sales driverDeep relationshipRepetition, attention-based

    Step-by-step guide to building a B2B customer journey map

    Now that you’ve got a basic understanding of the typical B2B customer journey, it’s time to build out your map so you can create a visual representation of the journey.

    Step-by-step guide to building a customer journey map.

    Here are six steps you need to take to craft an effective B2B customer journey map in your business :

    1. Identify your target audience (and different segments)

    The first step in customer journey mapping is to look at your target audience.

    You need to understand who they are and what different segments make up your audience.

    You need to look at the different roles each person plays within the journey.

    Unlike B2C, you’re not usually dealing with a single person. You likely have a few decision-makers you need to interact with to close a deal.

    The average B2B deal involves 6 to 10 people.

    Analyse the different roles and responsibilities of your audience.

    Figure out what requirements they need to onboard you. Understand each person’s level of influence in the buying decision.

    2. Determine your customers’ goals

    Now that you have a clear understanding of each person involved in the buying process, it’s time to analyse their unique needs and goals.

    Unlike B2C, which will include a single person with a single set of needs and goals, you have to look at several people through the decision-making process.

    What is every decision-maker’s goal ?

    An entry-level admin will have much different goals than a CEO.

    Understand each of their needs as it will be key to selling them and taking you to the next person in the chain of command.

    3. Lean on data and analytics

    Now it’s time to analyse your data.

    You don’t want to guess what will work on your B2B buyers. Instead, leverage data that proves what’s working (and what’s not).

    Analytics software like Matomo are crucial tools in your B2B customer journey toolkit.

    Matomo can help you make data-driven decisions to fuel customer acquisition and loyalty to help get more customers all the way to the advocacy stage.

    Using Matomo (which analyses and interprets different data sources) can give you a holistic view of what’s going on at each stage of the journey so you can reach your goals.

    Try Matomo for Free

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

    No credit card required

    4. Draw out customer journey stages

    Now that you have your data-backed plan, it’s time for some customer journey mapping.

    You can do this on paper or use a diagram tool to create a visual B2B customer journey map.

    Here, you’ll draw out every single stage in your customer journey, including every single touchpoint from different decision-makers.

    5. Determine each customer touchpoint

    Once you’ve drawn up the customer journey stages, you’ll have a key list of B2B customer journey touchpoints to implement.

    Write down every single customer interaction possible on the journey through.

    This could be reading an email, a blog post or watching a video on your home page.

    It could be an advertisement, a phone call or a follow-up email.

    It could even be a live demo or video sales call (meeting).

    6. Identify your own goals

    Now that you’ve got your visual B2B customer journey mapping done, it’s time to go back to you and your company.

    What are your goals ?

    What are the end results you’re looking for here ?

    You’ve got your current map in place. Now, how would you like customers to go through this journey ?

    Where would you like them to end up ?

    Look back at your company’s primary objectives if you’re stuck here.

    If your company is looking to increase profit margins, then maybe you want to focus more on retention, so you’re spending less on acquisition (and leaning more on recurring revenue from existing customers).

    How to create a Matomo funnel to track your B2B customer journey

    If you want to start tracking and optimising your B2B customer journey, you need to have a good grasp on your funnel.

    The reality is that your customer journey is your funnel.

    They’re one and the same.

    Your customer journeys through your sales funnel.

    So, if you want to optimise it, then you need to see what’s going on at each stage of your funnel.

    Screenshot example of the Matomo dashboard

    With Matomo, you can map out your entire funnel and track key events like conversions.

    This allows you to identify where your site visitors are having problems, where they’re exiting and other obstacles they’re facing on their journey through.

    To start, you first define what events or touchpoints you want included. This could mean :

    • Landing on your website
    • Visiting a product page
    • Adding something to cart
    • Going to checkout
    • Clicking “buy”

    Then, at each stage, you’ll see conversion rates.

    For example, if only 3% of your visitors go from landing on your website to the product page, you likely have an issue between your homepage (and other pages) and your product pages.

    Or, if you can get people to add to cart, but you rarely get people going to checkout, there’s likely a problem to fix on your add-to-cart page.

    By leveraging Matomo’s funnels feature, you get to see your entire customer journey (and where people are falling off) so you understand what you need to optimise to grow your business.

    If you’re ready to start building and optimising your customer journey today, then try Matomo for free for 21 days.