TubeSum ← Transcribe a video

How to Optimize Videos for the Web with FFmpeg

Transcribed Jun 15, 2026 Watch on YouTube ↗
Intermediate 5 min read For: Web developers and content creators looking to optimize video files for websites.
13.2K
Views
480
Likes
24
Comments
2
Dislikes
3.8%
📈 Moderate

AI Summary

This video demonstrates how to optimize videos for websites using FFmpeg, reducing file size while maintaining quality. The presenter shows how to compress a 27 MB video down to under 3 MB using different codecs and settings.

[00:00]
Problem: Large video files

A 27 MB video is too large for a website; it needs to be optimized to improve load times.

[00:59]
FFmpeg introduction

FFmpeg is a command-line tool for video processing, installable via package managers.

[01:20]
Basic usage: scaling

Use `-vf scale=1920:-2` to resize video to 1080p while maintaining aspect ratio.

[02:50]
Remove audio with -an

The `-an` flag strips audio metadata, saving additional file size.

[03:48]
H.264 codec for compatibility

H.264 (libx264) is the most compatible codec for web browsers.

[05:10]
CRF quality control

CRF (Constant Rate Factor) ranges from 0 (best) to 51 (worst); 24 is recommended for H.264.

[05:41]
Fast start for web

`-movflags faststart` moves metadata to the beginning for faster video loading.

[06:17]
VP9 codec for better compression

VP9 (libvpx-vp9) offers better compression than H.264; output as .webm. CRF 40 recommended.

[07:52]
H.265 for Apple devices

H.265 (libx265) provides even smaller files but only works on Apple devices. CRF 28 and `-tag:v hvc1` required.

[09:02]
Automation script

A batch script is provided to run all three encodings automatically with customizable CRF values.

[10:14]
HTML integration

Use multiple `<source>` tags inside a `<video>` element, ordered from best to fallback, with appropriate `type` attributes.

Optimizing videos with FFmpeg using multiple codecs (H.264, VP9, H.265) and proper HTML integration ensures fast loading and broad browser compatibility.

Clickbait Check

95% Legit

"Title accurately describes the tutorial; the video delivers exactly what it promises."

Mentioned in this Video

Tutorial Checklist

1 01:16 Install FFmpeg using your package manager.
2 01:20 Run basic scaling command: `ffmpeg -i input.mp4 -vf scale=1920:-2 -an output.mp4`
3 03:48 Add H.264 codec and CRF: `ffmpeg -i input.mp4 -vf scale=1920:-2 -c:v libx264 -crf 24 -movflags faststart -an output.mp4`
4 06:17 Encode with VP9: `ffmpeg -i input.mp4 -vf scale=1920:-2 -c:v libvpx-vp9 -crf 40 -an output.webm`
5 07:52 Encode with H.265: `ffmpeg -i input.mp4 -vf scale=1920:-2 -c:v libx265 -crf 28 -tag:v hvc1 -movflags faststart -an output.mp4`
6 09:02 Use provided script to automate all encodings: `optvideo input.mp4 1920 ./videos`
7 10:14 Add videos to HTML with multiple source tags: `<video><source src="best.webm" type="video/webm"><source src="fallback.mp4" type="video/mp4"></video>`

Study Flashcards (10)

What is the recommended CRF value for H.264 encoding?

easy Click to reveal answer

24

05:29

What flag removes audio from a video in FFmpeg?

easy Click to reveal answer

-an

02:50

Which codec offers the best compression among H.264, VP9, and H.265?

medium Click to reveal answer

H.265 (libx265) provides the smallest file size.

08:17

What is the purpose of `-movflags faststart`?

medium Click to reveal answer

It moves metadata to the beginning of the video file for faster web loading.

05:41

Why is H.265 only recommended for Apple devices?

hard Click to reveal answer

Because H.265 is not royalty-free, and Apple is the only major company that pays to use it.

08:00

What is the CRF range for VP9?

medium Click to reveal answer

0 to 63

07:11

What does the `-vf scale=1920:-2` flag do?

medium Click to reveal answer

It scales the video width to 1920 pixels and automatically sets height to maintain aspect ratio, ensuring an even number.

01:50

Which video container format is used for VP9?

easy Click to reveal answer

.webm

06:23

What additional flag is needed for H.265 to work on Apple devices?

hard Click to reveal answer

-tag:v hvc1

08:49

What is the purpose of the `-preset very slow` flag?

medium Click to reveal answer

It tells the encoder to take more time to compress, resulting in better quality but longer encoding time.

11:54

💡 Key Takeaways

💡

Large video problem

Highlights the core issue of large video files affecting website performance.

📊

H.264 compatibility

Emphasizes that H.264 is the most widely supported codec for web browsers.

03:48
🔧

Fast start optimization

A simple flag that significantly improves video loading time on the web.

05:41
📊

VP9 compression advantage

VP9 offers better compression than H.264, reducing file size by half.

06:17
🔧

H.265 for Apple devices

Demonstrates a targeted optimization for Apple users with even smaller file sizes.

07:52
🔧

Automation script

Provides a practical solution to avoid remembering complex commands.

09:02
🔧

HTML fallback strategy

Shows how to use multiple source tags for progressive enhancement across browsers.

10:14
⚖️

User experience priority

Reminds that aesthetics should not compromise website performance.

12:52

✂️ Creator Tools: Viral Hooks

AI-generated clip ideas for Shorts based on the transcript

27MB video? Here's how to shrink it!

47s

Shows a huge file size reduction from 27MB to 9MB, instantly grabbing attention of web developers.

▶ Play Clip

H.264 vs VP9 vs H.265: Which codec wins?

60s

Compares three popular codecs with actual file sizes, helping viewers choose the best for their needs.

▶ Play Clip

VP9 cuts file size to 3.8MB!

60s

Demonstrates a massive 86% reduction in file size while maintaining quality, a jaw-dropping result.

▶ Play Clip

H.265: Apple-only but even smaller

60s

Reveals a controversial codec that only works on Apple devices but offers the smallest file size.

▶ Play Clip

Automate FFmpeg with a single script

60s

Shows a time-saving script that runs all optimizations at once, appealing to lazy developers.

▶ Play Clip

[00:00] all right when you're making a website

[00:01] oftentimes you want to have some sort of

[00:03] video on your website maybe you want to

[00:05] have a video background for your home

[00:07] page that's very trendy

[00:09] or maybe you want to have some video

[00:10] showcasing your product that you want

[00:12] people to buy

[00:13] in any case adding a video to your

[00:15] website will make it look very nice

[00:17] but of course when you're adding a video

[00:18] you need to optimize it

[00:20] because this video right here well let

[00:23] me just show you what i have here i have

[00:25] a video called skyscrapers

[00:27] and is a very nice video of some

[00:29] skyscrapers going by

[00:30] that is a fine looking video but the

[00:33] problem with this is it is 27 megabytes

[00:35] and i don't know about you but

[00:37] i don't want my videos to have to

[00:39] download 27 megabytes of video just to

[00:41] see my home page and so in this video

[00:43] i'm going to show you how you can

[00:44] optimize this bring it down to a

[00:47] reasonable file size while still keeping

[00:49] the quality good because of course if

[00:51] you have a video on your website you

[00:53] want it to look nice that's the entire

[00:55] point and today we're going to achieve

[00:57] all this and more with this program

[00:59] called ffmpeg which you may have heard

[01:01] of before

[01:02] but it's going to be a command line

[01:04] application

[01:05] that you can install with your favorite

[01:08] package manager so

[01:10] it's going to be in all the official

[01:11] repositories so just pick whichever

[01:14] package manager that you're using

[01:16] it is as simple as that install that and

[01:18] once you have it installed

[01:20] i will show you how you can use it and

[01:23] the most basic usage will go something

[01:25] like this ffmpeg dash i and this is

[01:29] going to be your input file which

[01:31] we already said is skyscrapers.mp4

[01:34] and probably the most common

[01:36] optimization that you would like to make

[01:37] to some video is just to

[01:39] change the resolution so this video is

[01:42] originally 1440p

[01:44] and i'd like to get it down to 1080p so

[01:46] i want to make the resolution 1920 by

[01:48] 1080 pixels

[01:50] and we can do that by passing in this

[01:51] dash vf flag

[01:53] this is basically shorthand for saying

[01:55] uh add this filter and the filter that

[01:57] we're going to be adding to this is

[01:59] scale so we want the scale to be 1920

[02:03] that is going to be how many pixels

[02:04] across that i want this video to be

[02:06] and then you can also pass in the height

[02:08] here

[02:09] but to be honest you probably just want

[02:11] to keep the aspect ratio the same you

[02:13] don't want to have to do the math so you

[02:15] only really have to type in the width

[02:16] and then you type in

[02:18] dash 2 and this will automatically set

[02:20] the height based on the aspect ratio and

[02:23] the negative 2 is just saying that we

[02:24] want to keep the height

[02:27] even integer so we don't want it to be

[02:30] 1081 pixels

[02:32] in height we want to be 1080 pixels in

[02:34] height just because if it's an odd

[02:35] number you can run into some issues with

[02:37] some video players so that's the only

[02:39] reason i'm putting negative two instead

[02:41] of negative one and then you would just

[02:43] type the output file right here this is

[02:45] the file that we wanted to create so

[02:47] let's say we want to make output.mp4 and

[02:50] one more flag that you can optionally

[02:51] add in here is dash a n

[02:54] what this flag will do is it will remove

[02:55] all the audio information in this video

[02:58] file so for this specific video it

[03:00] doesn't have any audio and i don't want

[03:02] it to have any audio because

[03:04] let's say in this example i just wanted

[03:06] to be a background video of course it's

[03:07] not going to have any sound but even if

[03:09] your video doesn't have any sound then

[03:11] it may still have some audio information

[03:13] so dash and will just strip out all that

[03:16] information and no additional metadata

[03:18] or anything about audio so that will

[03:20] save you a little bit on your file size

[03:22] and let's just run this and see what

[03:24] happens now this will take a minute or

[03:26] two so

[03:27] i actually already ran this before the

[03:29] video so let's just see how it looks

[03:31] let's open up the file browser go to

[03:33] input

[03:34] and as you can see this 27 megabyte

[03:36] video has been

[03:37] reduced to 9.1 megabytes which is

[03:40] already a very nice savings but we can

[03:42] do better now there's a few different

[03:44] codecs that you can use whenever using

[03:46] ffmpeg

[03:48] and a video codec is basically what

[03:50] compresses the video down and there's

[03:52] different kinds of video codecs you can

[03:54] use some are more modern than others and

[03:56] some of them will be more efficient than

[03:58] others but the most common video codec

[04:00] for the web is going to be h264

[04:03] so in this command let's also add dash c

[04:06] colon v

[04:07] and this is shorthand for allowing us to

[04:09] select the codec and the default codec

[04:11] is going to be lib x 264

[04:14] and this is going to be the h.264 video

[04:18] codec and as you can see this is going

[04:19] to have the best compatibility with

[04:21] every single browser

[04:23] so almost every browser can support this

[04:25] just fine and so at the bare minimum you

[04:27] will want to have this format when

[04:29] putting your videos on the web and there

[04:30] are some other formats that i will show

[04:32] you for example h.265

[04:35] which is more modern but as you can see

[04:37] it has a lot less support it's actually

[04:39] only available in apple devices and

[04:42] there's one more that i'll show you vp9

[04:44] and this also has pretty good

[04:46] compatibility

[04:47] but there are a few browsers that it

[04:49] doesn't work in but let's start with

[04:51] h.264

[04:52] and so this is not going to have the

[04:54] best compression the file size is going

[04:56] to be a little bit bigger than other

[04:57] ones

[04:58] but this will be the fallback in case

[05:00] your users are using an old browser that

[05:02] doesn't support a newer codec so first

[05:05] things first let's just try this one so

[05:07] that's what this libx 264 is and then

[05:10] we'll also want to pass in the quality

[05:12] so we're going to type in dash crf and

[05:15] this is going to accept a number from 0

[05:17] to 51. 0 is going to be the best quality

[05:20] 51 is going to be the worst quality so

[05:22] we want something kind of in the middle

[05:24] there and so you can play around with

[05:25] this a little bit

[05:26] but for me personally something around

[05:29] 24 is going to be pretty good

[05:31] it the file size is not going to be too

[05:33] big and it's still going to be good

[05:34] quality so this is what i would

[05:36] recommend and finally let's just pass in

[05:38] one more option it's going to be dash

[05:41] mov flags

[05:43] and then fast start and this is

[05:45] basically just going to help your videos

[05:46] load faster for the web it will kind of

[05:48] push some information to the beginning

[05:50] of the video so whenever your users

[05:52] first start the video is going to load

[05:54] faster than if you didn't include this

[05:56] flag and we can go ahead and run this

[05:58] it'll take a couple of minutes

[06:00] but it will give you something

[06:02] like this so the other video was 9

[06:04] megabytes and we've gotten it down down

[06:06] to 7.7 megabytes

[06:09] that's already a lot better that is

[06:10] about a third of the file size of the

[06:12] original but of course we can do even

[06:14] better and so next up after h.264

[06:17] let's go over vp9 and so the vp9 codec

[06:21] can only be stored inside a webm video

[06:23] format it can't be used inside an mp4

[06:26] video format so we'll just be saving it

[06:28] as a webm file format that's not a big

[06:30] deal so we're going to change the codec

[06:32] to c

[06:33] v

[06:34] and then lib vpx

[06:37] dash vp9 that is going to get the vp9

[06:40] video codec which is going to be more

[06:42] optimized than the h.264 video codec and

[06:45] of course we'll pass in the same options

[06:47] here rescaling 1920.

[06:49] we can leave out the dash move flags

[06:51] fast start that's because with vp9 it's

[06:54] already going to be optimized for the

[06:55] web so you don't really need to add

[06:57] anything additional

[06:58] and of course you would just

[07:00] change the output to webm right here and

[07:03] finally we'll want to add dash crf

[07:05] like we did with the other one to set a

[07:07] quality for this one so this one is on a

[07:09] scale from 0 to 63 so we can change the

[07:12] quality a little bit so for me

[07:13] personally i use

[07:15] a crf of 40 for this one

[07:17] and at least for me visually it looks

[07:19] the same as the previous one

[07:21] so the quality is still there but let's

[07:23] run this and see what it looks like

[07:26] and so

[07:28] this one is going to be 7.7 megabytes

[07:30] but the command that we just ran is

[07:32] going to be only 3.8 megabytes so that's

[07:34] already a big savings

[07:36] and if we open this up the quality is

[07:38] still going to look pretty good i have

[07:40] no complaints about the quality

[07:42] if you look really closely it's not

[07:44] going to look as pristine as the

[07:45] original

[07:46] but for a video on the web that's going

[07:48] to be in the background i think this is

[07:50] more than enough personally now let's do

[07:52] the final file format which is going to

[07:53] be h265 and to be honest this one is a

[07:56] little bit optional like i said this is

[07:58] only available on

[08:00] apple devices

[08:02] so let's see h.265 that's just because

[08:04] this video format is not royalty free so

[08:07] basically apple is the only company

[08:09] that's willing to pay

[08:10] to use this in their software but it is

[08:13] going to be even more optimized let's

[08:15] just bring this up

[08:16] and

[08:17] as you can see it's down from 3.8

[08:19] megabytes to 2.9 megabytes so this one

[08:23] is optional but if you want to get a

[08:24] little bit more for your apple customers

[08:26] then i would recommend doing this one as

[08:28] well and so this command is going to

[08:30] look similar to the h.264 command that

[08:32] we ran

[08:33] the only difference is of course we've

[08:34] changed the

[08:35] codec to 265.

[08:38] we've changed the crf to be 28 a little

[08:40] bit higher and the quality will look

[08:42] similar to the h264 and we've just added

[08:45] an additional flag here dash tag colon v

[08:49] hvc1

[08:50] and that's just so that these will work

[08:51] on apple devices if you leave this out

[08:53] it may not work everything else is the

[08:56] same

[08:56] and so you can run that and get this

[08:59] right here which is going to be the

[09:01] smallest file size

[09:02] and of course remembering all these

[09:04] commands is going to be a big headache

[09:06] so what you can do to make your life a

[09:07] little bit easier is you can write a

[09:09] script like me

[09:11] or you can just borrow my script i'm

[09:12] going to have a link in the description

[09:14] for this but basically what this batch

[09:16] script is doing is you pass in a few

[09:18] arguments

[09:19] and then it will do all the work for you

[09:21] so it will run all the commands that it

[09:22] just told you with all the flags that i

[09:25] just told you and of course this is not

[09:26] set in stone you can change the crf

[09:28] values if you want these are just my

[09:30] personal preference you can play around

[09:32] with them a little bit more if you want

[09:34] to but you can run the script like this

[09:36] i would just type op video that is the

[09:38] name of my script you can name it

[09:40] whatever you want

[09:41] and then the input file which is going

[09:43] to be skyscrapers.mp4

[09:45] the resolution so 1920 pixels across

[09:49] and then the directory where you want

[09:51] the output to go so in my case i'm a new

[09:53] folder called videos and that is where

[09:56] they will go once they are all done

[09:58] transcoding

[09:59] and you can just enter this wait a few

[10:01] minutes for all those to encode and you

[10:03] know have three videos ready to go so

[10:05] that's how i do all of my video

[10:06] conversion now it is very fast and easy

[10:09] and so we can go in here open up a file

[10:10] browser see all the videos that is

[10:12] created and last but not least let's

[10:14] actually put them inside html file so

[10:17] you can see how this looks

[10:19] i have an index.html here and the way

[10:21] you're going to want to put all these

[10:22] files is like this so you're going to

[10:24] want to have a video tag

[10:26] and then

[10:27] three separate source tags or one for

[10:29] however many videos you have and so of

[10:32] course we have the best optimized video

[10:33] on top here and the lowest optimized

[10:36] video on the bottom

[10:37] so it will try to read this file if it

[10:39] can't then it will go down to here and

[10:41] if you can't read this then finally

[10:43] it'll go down to the fallback right here

[10:45] and you would just put the type of the

[10:46] video in here so this is an mp4 and then

[10:49] the codex just so that the browser will

[10:51] know which video to get

[10:53] and so for me personally

[10:55] it is going to get the webm video

[10:57] encoded with vp9 as you can see this is

[11:00] the only one that is loading

[11:02] it's not loading the h265 because i'm

[11:04] not on an apple device and your browser

[11:06] will be smart enough to get the

[11:07] appropriate video and that's about it so

[11:09] there are more things that you can do to

[11:11] optimize the videos even further but

[11:13] this will probably be enough for most

[11:15] people so all the commands that i gave

[11:17] you

[11:18] say in the script per se

[11:20] these are designed to give you the best

[11:22] quality

[11:23] with the least amount of file size

[11:25] without taking too long to encode so if

[11:28] you want you can get an even better

[11:29] quality with some additional options but

[11:31] just keep in mind that it's going to

[11:32] take even longer to encode all of these

[11:34] videos if you do something like that so

[11:37] just encoding all of these videos for a

[11:39] 15 second clip this normally takes about

[11:42] seven minutes to do all of these but if

[11:44] you follow this article i'll leave a

[11:46] link to this in the description this is

[11:47] a very well written article that helped

[11:50] me a little bit in making this video he

[11:52] personally recommends passing in a dash

[11:54] preset flag and setting it to very slow

[11:57] and what this will do is it will tell

[11:59] the compression to really take its time

[12:02] whenever it's compressing the video and

[12:04] so you're going to get the best quality

[12:06] but very slow does live up to his name

[12:08] and it takes an extremely long time to

[12:10] compress your video so you can add that

[12:12] flag if you really want the best quality

[12:15] it all depends on if you have maybe 30

[12:17] minutes an hour to compress all these

[12:19] videos and you can go even further i'll

[12:22] also leave links to more of these in the

[12:24] description but if you want maybe you

[12:26] can encode these with a two pass

[12:28] encoding method in my experience that

[12:30] gives you an even smaller file size so

[12:33] you can do more to optimize it even more

[12:35] but

[12:36] it's totally up to you if you want to go

[12:37] the extra mile for me just these

[12:39] commands are enough but just know that

[12:41] the options are available to you if you

[12:43] really want

[12:44] that's all there is to it now you can

[12:46] make websites and have your users enjoy

[12:48] your websites loading a lot faster than

[12:50] before because just as important as

[12:52] having a website that looks good is a

[12:54] website that works well never sacrifice

[12:56] aesthetics for a miserable user

[12:58] experience

[12:59] and hopefully this video helped you put

[13:01] some videos on your website the right

[13:02] way

⚡ Saved you time reading this? Transcribe any YouTube video for free — no signup needed.