This is post is going to focus on exporting our videos for consumption on a web platform like YouTube or Vimeo.
This is a typical workflow for video production
We want to focus in the export to publish steps for this post as things are not as straighforward as it may seem.
In general each platform has specific requirements for the uploads and has predefined encoding settings to create their version of the upload this means that is advised to feed those platforms with files that match their expectations.
The easiest way to do this is to separate the production of the master from the encodes that are needed for the various platforms.
For example in Final cut this means exporting a master file in ProRes 422 HQ in my case with GH5 10 bit material. Each camera differs and if your source material is higher or lower quality you need to adjust however the master file will be a significantly large file with mild compression and based on intermediate codecs.
So how do we produce the various encodes?
Some programs like Final Cut Pro have specific add ons in this case Compressor to tune the export however I have had poor experience with compressor and underwater video to the point I do not use it and do not recommend it. Furthermore we can separate the task of encoding from production if we insert a platform independent software in the workflow.
Today encoding happens primarily by H264 and H265 formats through a number of encoders the most popular being x264 and x265 that are free. There is a commercial right issue to use HEVC (x265 output) for streaming so a platform like YouTube uses the free VP9 codec while Vimeo uses HEVC. This does not matter to us.
So to uploade to YouTube for example we have several options:
- Upload the ProRes file
- Upload a compressed file that we optimised based on our requirements
- Upload a compressed file optimised for YouTube requirements
While Option 1 is technically possible we are talking about 200+ GB/hour which means endless upload time.
Option 2 may lead to unexpected results as you are not sure of the quality of YouTube output and how it matches your file so my recommendation is to follow option 3 and give the platform what they want.
YouTube Recommended Settings are on this link
YouTube recommends H264 settings as follow for SDR (standard dynamic range) Uploads
- Progressive scan (no interlacing)
- High Profile
- 2 consecutive B frames
- Closed GOP. GOP of half the frame rate.
- Variable bitrate. No bitrate limit required, although we offer recommended bitrates below for reference
- Chroma subsampling: 4:2:0
There is no upper bitrate limit so of course you can make significantly large files however for H264 there is a point in which the quality reaches a point that you can’t see any visible differences.
Recommended video bitrates for SDR uploads
To view new 4K uploads in 4K, use a browser or device that supports VP9.
|Type||Video Bitrate, Standard Frame Rate|
(24, 25, 30)
|Video Bitrate, High Frame Rate|
(48, 50, 60)
|2160p (4k)||35–45 Mbps||53–68 Mbps|
|1440p (2k)||16 Mbps||24 Mbps|
|1080p||8 Mbps||12 Mbps|
|720p||5 Mbps||7.5 Mbps|
|480p||2.5 Mbps||4 Mbps|
|360p||1 Mbps||1.5 Mbps|
YouTube recommended settings are actually quite generous and if we perform a high quality encode we may easily be able to create smaller file however we are unsure of the logic that YouTube applies to their compression if we deviate so to be sure we will follow the recommendations.
It is very important to understand that bitrate controls the compression together with other factors however in order to get a good file we need to make sure we put some good logic in the analysis of the file itself this will greatly influence the quality of the compression process.
There is a whole book on x264 settings if you fancy a read here.
For my purposes I use handbrake and to make YouTube happy I use Variable Bit Rate with two pass and target bitrate of 45 Mbps. Together with that I have a preset that takes into account what YouTube does not like and then does a pretty solid analysis of motion as H264 is motion interpolated. This is required to avoid artefacts.
I have tested this extensively against the built in Final Cut Pro X YouTube Export.
Starting from the timeline and going directly into YouTube resulted in files of 88 Mb starting from a 7.06 GB ProRes 422 HQ comparable for the project. Following the guidelines and the handbrake process I ended up with 110.1 MB which is a 24% increase.
I have also exported to H264 in FCPX this gave me a 45.8 Mbps file however when I checked on YouTube their file it was still smaller than my manually generated file of 12%. I have used 4K video downloader to retrieve file sizes.
For HDR files there are higher allowed bitrates and considerations on colour space and color depth but is essentially the same story and I have developed HandBrake presets for that too.
When I have to produce an export for my own use I choose H265 and usually a 16 Mbps bitrate which is what Netflix maxes at. Using Quality at RF=22 produces around 20 Mbps files which is amazing considering the starting point of 400 Mbps for GH5 AVCI files. YouTube own files range between 10 and 20 Mbps to give you an idea once compressed in VP9. I cannot see any difference between my 16 Mbps and 20 Mbps files so I have decided to stay with the same settings of Netflix if it works for them will work for me.
There is also a YouTube video to explain in detail what I just said and some comparative videos here
For all my YouTube and Blog subscribers (need to be both) please fill the form and I will send you my 3 handbrake presets.
Edit following some facebook discussions: if you want to upload HD you have better results if you make the file 4K. According to my tests this is not true. Using x264 and uploading an HD file produces same or better results than the HD clip YouTube created out of the same source using a 4K upload. I would be vary about what you read on the internet unless you know exactly how clips are produced. 90% of the issue is poor quality encoding before it even gets to YouTube!