For our supporters on the Chicken Surprise Indiegogo campaign who chose a perk including Blu-rays, I had to find a way to make UHD Blu-ray discs at home, and on the cheap. After much trial and error, I came to a process that produces UHD or FHD Blu-ray discs that can be played on commercial disc players. Here’s that process, and how you can replicate it.
First, let’s be realistic about costs here. The costs associated with producing physical media are going up every year, as scales of production lower. The process outlined in this guide also uses some commercial software that costs some money. As of writing, you can expect to spend around $250 CAD upfront on non-consumables (the Blu-ray writer and software, not including the computer you need to run them), and $1-3 CAD per disc.
This guide requires that you have access to both a Windows computer AND a computer running either Ubuntu Linux or macOS. It also assumes you have a basic familiarity with the command line on that Ubuntu/macOS system.
Mac users who do not have access to a Windows machine: all of the tools I talk about here may run fine on a VPS from the likes of AWS, Azure, or your provider of choice; though I have not tested this. You may also want to give UTM a try, which can run Windows on any Mac with decent performance.
This guide also does NOT walk you through the process of creating menus for your Blu-ray disc, nor the process of including more than one video on your disc. However, the same tools we use are capable of doing these things, so go forth and experiment (though I recommend following the guide once through first, to validate that your setup works in the same way mine does).
This guide also specifically pertains to SDR (Standard Dynamic Range) content, as opposed to HDR (High Dynamic Range) content. HDR is still an absolute mess is 2023 and I do not intend to update this guide with any information on it.
The process is similar for both 1080p and 4K Blu-rays, but I’ve noted where the process diverges.
This guide comes with no guarantee of results whatsoever. I was frustrated that no guide of this sort exists elsewhere on the internet, so this is my best attempt at writing one. Don’t call me responsible if by employing any of the information in this guide, your computer explodes, thermonuclear war erupts, the daisies in your front yard wilt, you hurt your pinky finger trying to type a command, etc.
This guide is released under a WTFPL license, version 2.
I’ve linked some useful resources at the bottom of the page. There are probably easier/cheaper ways to generate Blu-ray discs (especially the 1080p flavour, with old tools like Adobe Encore CS6), but this is what I was able to figure out with my skill set and budget.
A Blu-ray disc must be burned with a UDF 2.50 filesystem on a compatible disc.
On that filesystem, you must have two folders called “CERTIFICATE” and “BDMV”. For our purposes, the CERTIFICATE folder can be empty. The BDMV folder contains our data tracks, plus metadata, in a particular arrangement of subfolders. For the purposes of this guide, it’s not necessary to know how the data is arranged within those subfolders.
Please indulge me for a moment on a brief tangent. If you’re a post-production professional, you should already know this stuff.
In the digital world, there is a difference between media containers, and media streams (or “tracks”).
A media container (such as a file ending in .MOV, .MP4, .MKV, or .AVI) is a file containing one or more media streams.
A media stream is the raw data produced by a given encoder program.
Media is typically distributed in a container with multiple streams. But a stream can also exist in its own file.
For example: a .MOV container file might contain a video stream produced by a H.264 encoder, and also an audio stream produced by an AAC encoder.
Another example: another .MOV container file might contain a video stream produced by a Cineform encoder, a second video stream produced by a Prores encoder, an audio stream produced by a PCM encoder, and a subtitle stream produced by a SRT encoder.
The first example is something you might get out of a cell phone camera; one audio stream and one video stream. The second example is a possibly impractical application of putting many streams of different or similar types into one container file.
.MOV is just one container that happens to be widely used, because it can contain a very wide variety of stream types. Some other containers, such as .MP4, are particular about the types of streams they can contain.
Note that the file name extension is just an easy indicator of the container used. You can change the name of a .MOV file to end in .MP4, and most media players will figure out the discrepancy and still play it, but it is no less still a .MOV file. You can check the true container of a file with MediaInfo or ffprobe.
There are pieces of software that specifically create streams (“encoders”), and other software that specifically create containers (“muxers”).
Commonly, these two functions are combined, which is where the marketing can get fuzzy (Adobe Media Encoder, a common tool in the professional video industry, is both an encoder and a muxer). But for the purposes of this guide, the two processes are distinct, and occur in different steps.
Crucially, we will be producing streams that our Blu-ray compilation program (BD Wizard) will mux for us into containers.
brew install ffmpeg x264 x265
sudo apt install ffmpeg x264 x265
Export your film to the following formats:
Transcode the video file into a Blu-ray compatible stream on your Linux or macOS computer:
(if targeting HD Blu-ray):
Run this command in a terminal, substituting Source.mov
and Output.264
with your input and output videos, respectively:
ffmpeg -i Source.mov -r 24000/1001 -pix_fmt yuv420p -f rawvideo - | x264 --bitrate 30000 --tune film --bluray-compat --vbv-maxrate 40000 --vbv-bufsize 30000 --level 4.1 --keyint 24 --open-gop --slices 4 --colorprim "bt709" --transfer "bt709" --colormatrix "bt709" --sar 1:1 --b-pyramid none --preset medium -r 24000/1001 --pass 1 -o Output.264 -
--fps
, -r
, and keyint
: This is the frame rate of your video. 24000/1001
is appropriate if your frame rate is 23.976. Keep these options in sync.--bitrate
: This is your output video’s bitrate in kilobits per second. You might want to decrease this if your video is especially long, and the resulting video is too large to fit on your disc type. Otherwise 30000
is fine.You should now see Output.264
in your output directory. Check it with a media player (I recommend mpv for this task) to make sure it looks right. You should expect to see your video playing at the correct speed without any distortion. I recommend playing through at least a full minute of video to ensure there are no intermittent encoding errors.
Then run the command again! Replace --pass 1
with --pass 2
. We’re doing two-pass encoding, which results in higher quality.
It’s normal for the second encoding pass to be slower than the first.
Tip: you can run both passes sequentially by putting an && separator in between the commands for the passes. Like this:
ffmpeg -i Source.mov -r 24000/1001 -pix_fmt yuv420p -f rawvideo - | x264 --bitrate 30000 --tune film --bluray-compat --vbv-maxrate 40000 --vbv-bufsize 30000 --level 4.1 --keyint 24 --open-gop --slices 4 --colorprim "bt709" --transfer "bt709" --colormatrix "bt709" --sar 1:1 --b-pyramid none --preset medium -r 24000/1001 --pass 1 -o Output.264 - && ffmpeg -i Source.mov -r 24000/1001 -pix_fmt yuv420p -f rawvideo - | x264 --bitrate 30000 --tune film --bluray-compat --vbv-maxrate 40000 --vbv-bufsize 30000 --level 4.1 --keyint 24 --open-gop --slices 4 --colorprim "bt709" --transfer "bt709" --colormatrix "bt709" --sar 1:1 --b-pyramid none --preset medium -r 24000/1001 --pass 2 -o Output.264 -
(if targeting UHD Blu-ray) Run this command, substituting Source.mov
and Output.265
with your input and output videos, respectively.
ffmpeg -i Source.mov -r 24000/1001 -pix_fmt yuv420p -f rawvideo - | x265 --input - --input-res 3840x2160 --no-info --uhd-bd --repeat-headers --profile main444-10 --no-open-gop --no-b-pyramid --keyint 24 --min-keyint 1 --fps 24000/1001 --bitrate 50000 --vbv-maxrate 75000 --vbv-bufsize 75000 --colorprim "bt709" --transfer "bt709" --colormatrix "bt709" --output Output.265
--fps
, -r
, and keyint
: This is the frame rate of your video. 24000/1001
is appropriate if your frame rate is 23.976. If 24, replace these values with 24
. Change these three values together.--bitrate
: This is the target bitrate in kilobits per second. We’re using VBR encoding, so this is merely a target for the average bitrate of the file. This should be as high as possible without (a) getting too close to the maximum read rate of 92Mbps for 50GB discs, or 144Mbps for higher capacity disks, or (b) making a file larger than the capacity of your disc. If you get “buffer underflow” errors from BD Wizard when compiling the disc’s files, your bitrate or peak bitrate (described below) are probably too high. I found that 50000
(50 Mbps) is already practically indistinguishable from lossless for SDR content, so no need to push it to the max.--vbv-maxrate
: The peak allowable bitrate for the file. Again, should not get too close to the maximum read rate for the disc. The theoretical maximum minus 20% should be fine in my experience. I used 75000
(75Mbps) on Chicken Surprise, which worked well.--vbv-bufsize
: According to the BD Wizard developer, this should ideally be 140% of the target bitrate, but no larger than the peak bitrate.Output.265
in your output directory. Check it with a media player (I recommend mpv for this task) to make sure it looks right. You should expect to see your video playing at the correct speed without any distortion. I recommend playing through at least a full minute of video to ensure there are no intermittent encoding errors.Convert your subtitle track into the Blu-ray SUP format with easySUP.
BD SUP
1080
(regardless of whether your target is HD or UHD Blu-ray)Fast
Compile the Blu-ray disc using BD Wizard:
Open BD Wizard, and add your video, audio, and subtitle tracks to the list on the right side of the window.
On the left side of the window, choose a method for BD Wizard to create chapters (“scenes”) for your Blu-ray.
Again, this guide doesn’t cover how to add more than one video title, or how to add menus, bonus features, etc. So I’m skipping the pages for those features. Click next until it asks you to save your BD Wizard project file. I recommend saving to a folder with nothing else in it, because the next steps will create a bunch of files and subfolders next to the project file.
You will be prompted to choose a “Project name,” “Project info,” and “Blu-ray type.” You can fill anything you want into the first two fields; they will be shown when a user inserts the disc into certain players. Select Blu-ray type as follows:
(if targeting HD Blu-ray) choose “BD or 3D BD (v200)”.
(if targeting UHD Blu-ray) choose “UHD BD (v300)” and an option from the dropdown:
If you’ll be burning to 50GB discs, choose “50GB Default TR, 91.916 Mbit”
If you’ll be burning to 66GB discs, choose “66GB High TR, 143.86 Mbit”
If you’ll be burning to 100GB discs, choose “100GB High TR, 143.86 Mbit”
(If after burning your discs, your player(s) are having issues reading them, you can try turning down the TR here. This is more likely to happen if you’re using cheap no-name discs, I guess.)
For UHD Blu-ray, each capacity of disc has different compatible data rates, which you’ll need to chose from while creating the discs' file system:
The specification for 4K Blu-ray allows for three disc capacities, each with its own data rate: 50 GB at 72 or 92 Mbit/s, and 66 GB and 100 GB at 92, 123, or 144 Mbit/s.
- wikipedia: https://en.wikipedia.org/wiki/Ultra_HD_Blu-ray
Click OK. BD Wizard will compile a folder called MUXED_{Project name}
in the destination folder you previously chose.
MUXED_{Project name}
folder that BD Wizard generated. Test all video, audio, and subtitle tracks. If all looks well, then congrats! All that’s left is to burn to disc.Use ImgBurn to burn your disc(s):
MUXED_{Project name}
folder that BD Wizard generated, you’ll find two subfolders. Add each of these subfolders to the “Source” pane in ImgBurn using the button that looks like a magnifying glass over a folder.At this point, check the quality of your discs thoroughly using a Blu-ray disc player. All video, audio, and subtitle tracks should be accounted for.
I found that Avery 8944 CD labels could be printed with pretty good image quality on a basic color inkjet printer. Some test prints were required to dial in the colour settings in the printer’s driver. Discs with a white surface worked best with these labels.
It’s hard to say. If you’re shopping online, stick to well-reviewed products and sellers. It’s normal if you’re buying cheap discs from no-name brands to get a few duds in a stack, but maybe saving a couple of bucks per disc is worth it. What I’d be more worried about in the long-term is data integrity on cheaper discs. If long-term storage is your plan for your discs, you may want to opt to get “M-DISC” certified discs, which are lab tested to retain data after exposure to extreme conditions, which are supposed to simulate approximately 1000 years in good storage conditions.
Useful links: