Cloudinary Blog
Automatic Video Transcoding

Delivering video files to users can be a much more complex undertaking than many people stop to consider. There are a large variety of video formats and codecs to choose between, and various optimization parameters for encoding the videos. Parameters such as bitrate, key-frame-interval, and frame-rate will have an effect on the visual quality and bandwidth requirements when delivering the video file. To make matters worse, there are so many potential viewing devices out there (desktops, laptops, tablets, mobiles, wearables, etc). Each of these devices have different browsers or apps, and they all support different formats and codecs!

Unfortunately, there is no single format or codec that is ideal for all end users. Selecting a format and codec that is supported by all browsers and devices will actually affect quality and user-experience. Since some formats are better than others at compression and reducing the file size without impairing visual quality, the best solution to save bandwidth and optimize delivery time would be to deliver the best format according to the browser used by each of your visitors.

globalstats

(Image courtesy of https://www.w3counter.com/globalstats.php)


Sign up for Cloudinary free today!


Introducing Automatic Video Transcoding

Let Cloudinary do the job of automatically selecting the best codec and format for you. The automatic format selection feature for images has now been extended to offer the same functionality for videos as part of our Dynamic Video Platform solution. Cloudinary identifies the end-user device and browser and then delivers the best video format and codec for that particular user. The feature currently supports selecting between the H.264, HEVC and VP9 codecs and is future-proofed for adding next-generation codecs such as AV1.

So take the complexity out of managing videos because adding this functionality is as simple as adding the fetch_format parameter set to auto (f_auto in URLs). This tells Cloudinary to perform automatic format and codec selection based on the requesting browser. For example, with the automatic video format feature, in most cases Chrome users would receive a VP9-encoded WebM file, while Safari users would receive an HEVC-encoded MP4 file. If a requesting browser does not support either of these formats, then the video would be delivered as an H-264 encoded MP4 file, which is supported by almost every browser.

For example, the kitten_playing video is scaled down to a width of 500 pixels and delivered as:

  • WebM (VP9) to Chrome browsers (1412 KB),
  • MP4 (HEVC) to Safari browsers (1411 KB),
  • MP4 (H.264) to browsers that support neither format (3172 KB)

Ruby:
Copy to clipboard
cl_video_tag("kitten_play", :fetch_format=>:auto)
PHP v1:
Copy to clipboard
cl_video_tag("kitten_play", array("fetch_format"=>"auto"))
PHP v2:
Copy to clipboard
(new VideoTag('kitten_play'))
  ->delivery(Delivery::format(Format::auto()));
Python:
Copy to clipboard
CloudinaryVideo("kitten_play").video(fetch_format="auto")
Node.js:
Copy to clipboard
cloudinary.video("kitten_play", {fetch_format: "auto"})
Java:
Copy to clipboard
cloudinary.url().transformation(new Transformation().fetchFormat("auto")).videoTag("kitten_play");
JS:
Copy to clipboard
cloudinary.videoTag('kitten_play', {fetchFormat: "auto"}).toHtml();
jQuery:
Copy to clipboard
$.cloudinary.video("kitten_play", {fetch_format: "auto"})
React:
Copy to clipboard
<Video publicId="kitten_play" >
  <Transformation fetchFormat="auto" />
</Video>
Vue.js:
Copy to clipboard
<cld-video publicId="kitten_play" >
  <cld-transformation fetchFormat="auto" />
</cld-video>
Angular:
Copy to clipboard
<cl-video public-id="kitten_play" >
  <cl-transformation fetch-format="auto">
  </cl-transformation>
</cl-video>
.NET:
Copy to clipboard
cloudinary.Api.UrlVideoUp.Transform(new Transformation().FetchFormat("auto")).BuildVideoTag("kitten_play")
Android:
Copy to clipboard
MediaManager.get().url().transformation(new Transformation().fetchFormat("auto")).resourceType("video").generate("kitten_play.mp4");
iOS:
Copy to clipboard
cloudinary.createUrl().setResourceType("video").setTransformation(CLDTransformation().setFetchFormat("auto")).generate("kitten_play.mp4")

Combine with Content-Aware Video Compression

Even better, you can combine the automatic format selection feature (f_auto) with Cloudinary's automatic quality feature (q_auto) for even better results. Cloudinary's intelligent quality and encoding algorithm analyzes a video to find the best quality compression level and optimal encoding settings based on the video content. The result is a video with good visual quality while minimizing the file size. For example, the same kitten_playing video delivered with f_auto alone in the example above, now delivered with f_auto and q_auto together would produce a more optimized result:

Format (and codec) f_auto f_auto, q_auto
WebM (VP9) 1412 KB 1271 KB
MP4 (HEVC) 1411 KB 1355 KB
MP4 (H.264) 3172 KB 2876 KB

Ruby:
Copy to clipboard
cl_video_tag("kitten_play", :quality=>"auto", :fetch_format=>:auto)
PHP v1:
Copy to clipboard
cl_video_tag("kitten_play", array("quality"=>"auto", "fetch_format"=>"auto"))
PHP v2:
Copy to clipboard
(new VideoTag('kitten_play'))
  ->delivery(Delivery::format(Format::auto()))
  ->delivery(Delivery::quality(Quality::auto()));
Python:
Copy to clipboard
CloudinaryVideo("kitten_play").video(quality="auto", fetch_format="auto")
Node.js:
Copy to clipboard
cloudinary.video("kitten_play", {quality: "auto", fetch_format: "auto"})
Java:
Copy to clipboard
cloudinary.url().transformation(new Transformation().quality("auto").fetchFormat("auto")).videoTag("kitten_play");
JS:
Copy to clipboard
cloudinary.videoTag('kitten_play', {quality: "auto", fetchFormat: "auto"}).toHtml();
jQuery:
Copy to clipboard
$.cloudinary.video("kitten_play", {quality: "auto", fetch_format: "auto"})
React:
Copy to clipboard
<Video publicId="kitten_play" >
  <Transformation quality="auto" fetchFormat="auto" />
</Video>
Vue.js:
Copy to clipboard
<cld-video publicId="kitten_play" >
  <cld-transformation quality="auto" fetchFormat="auto" />
</cld-video>
Angular:
Copy to clipboard
<cl-video public-id="kitten_play" >
  <cl-transformation quality="auto" fetch-format="auto">
  </cl-transformation>
</cl-video>
.NET:
Copy to clipboard
cloudinary.Api.UrlVideoUp.Transform(new Transformation().Quality("auto").FetchFormat("auto")).BuildVideoTag("kitten_play")
Android:
Copy to clipboard
MediaManager.get().url().transformation(new Transformation().quality("auto").fetchFormat("auto")).resourceType("video").generate("kitten_play.mp4");
iOS:
Copy to clipboard
cloudinary.createUrl().setResourceType("video").setTransformation(CLDTransformation().setQuality("auto").setFetchFormat("auto")).generate("kitten_play.mp4")

Try it out

Check out the Cloudinary demo page for video format optimization if you would like to see the file size difference between videos delivered in different formats. You can select one of the videos on the page or upload your own video to encode in various formats. Of course, the Cloudinary automatic format feature will do all the work for you and also decide which format your user should get based on their browser.

video format optimization

Tip
You can also visit our video comparison page to compare the visual quality between any two videos, or in this case, any two video formats.

Summing up

Delivering a video in the best format can be easily automated with Cloudinary's format selection feature. The functionality can also be combined with automatic quality selection for a powerful and dynamic solution that delivers all your videos using minimal bandwidth and maximum visual quality. For more details, see the automatic format selection documentation.

All video manipulation and delivery features discussed here are available with no extra charge for all Cloudinary's plans, including the free plan.

Note
The automatic video transcoding feature is enabled by default for all new accounts, and is currently being rolled out for existing accounts. If you are an existing customer and want access to this feature before it is rolled out to you, please contact support.

You might also be interested in:

Recent Blog Posts

Create Lightweight Sites With Low-Code and No-Code Technology

Consumers expect modern websites to be mainly visual. But, the more compelling and complex the related media is, the more data is involved, compounding the site’s weight. In today’s content-craving world, delivering unoptimized media can cost you because it leads to sluggish page loads, resulting in visitors abandoning your site in search of a faster alternative. In fact, a page load that takes more than three seconds can cause as many as 40% of your visitors to bounce. Given this competitive, digital-first environment, you can’t afford to lose page views, for time is of the essence.

Read more
A Blueprint for AWS-Secured Webhook Listeners for Cloudinary

tl;dr: An AWS-secured and optimized Cloudinary webhook listener for extending the Cloudinary service

Code: Github

A webhook is a communication medium for sending notifications from one platform to another about events that occurred. In place are user-defined HTTP callbacks that are triggered by specific events. When a triggered event takes place on the source site, the webhook listens to the event, collects the data, and sends it to the URL you specified in the form of an HTTP request.

Read more
New Accessibility Features for Cloudinary’s Product Gallery Widget

Cloudinary’s Product Gallery widget, which launched in 2019, has enabled many brands to effectively and efficiently showcase their products in a sleek and captivating manner, saving countless hours of development time and accelerating release cycles. By adding Cloudinary’s Product Gallery widget with its customizable UI to their product page, retailers reap numerous benefits, often turning visitors into customers in short order.

Read more
Why Successful Businesses Engage With and Convert Audiences With Visual Media

Most business buyers prefer to research purchase options online, as do many shoppers. No wonder online retail sales in the U.S. rose by 32.4% in 2020—an impressive gain of $105 billion.

For B2B and B2C businesses, text-heavy websites are no longer adequate in attracting shoppers. Instead, engaging visual media—spin images, videos, 3D models, augmented reality—are becoming a must for conveying eye-catching details and differentiators about products or services.

Read more
Making User-Generated Content (UGC) Shoppable With Cloudinary

User-generated content (UGC) is a powerful marketing tool. Not only does video complement marketing efforts for e-commerce by enabling customers to explore products in greater detail, but UGC also adds an element of trust. As a bonus, user-generated video is an exceptional opportunity for e-businesses to attract website traffic without their marketing team having to create promotional videos from scratch. User-generated content drives conversions and brand loyalty as a direct result of authentic interaction.

Read more