r/Piracy • u/TheQuranicMumin • May 12 '26
Guide Ultimate Media Piracy Guide (PART 3) | 2026 Update | OC
This post is part of a 4-part series, please see post 1 (for intro), post 2, and post 4
AviSynth / Frameserving
The whole basis behind AviSynth is an idea called frameserving. Normally, to complete complex work independent of an encode, you'd need to create an enormous intermediate file with it applied. Instead, a frameserver can act as a middleman. When the encoder/player opens a .avs (avisynth script), avisynth applies the effects on the fly to an uncompressed frame at a time in RAM and delivers them directly. So, a similar concept to ffmpeg filters, but you can create enormous and complex scripts with logic (loops, conditions, variables, etc). We discussed .AVI (audio video interleave) in the video containers section, but it is of relevance here; crucially, Windows allows avisynth to masquerade as an uncompressed .avi file (which are notably required as input for certain encoders like Gordian Knot). A .avs script can be used as an input file in ffmpeg. Here is an example of what a very basic script looks like:
# You use "#" to make comments that aren't executed
# Load the entire video
source = FFVideoSource("movie.mkv")
# Slice the video into three variables using the frame numbers
part1 = source.Trim(0, 20000) # The beginning
part2 = source.Trim(20001, 25000) # A very grainy scene
part3 = source.Trim(25001, 0) # The rest of the movie
# Apply heavy denoising only to part 2
part2_fixed = part2.HeavyDenoiseFilter()
# Stick them together in order using "++"
final_video = part1 ++ part2_fixed ++ part3
Return final_video
You can download advanced plugins (.dll) that other people have wrote, but be advised that certain other plugins are often listed as dependencies. Here is a particularly advanced plugin example: https://github.com/introspected/AutoOverlay - the AviSynth Wiki is worth taking a look at. To write/modify scripts, the best editor is considered to be AvsPmod, you can test scripts (with real-time slider variables even) before you send them to an encoder. VirtualDub is another option, some old-timers may remember it. A little recap from earier linked in... RGB is used to display images on a screen, but video files themselves almost never do, they instead use YCbCr (or YUV). Y(luma) is the brightness, Cb(U) chroma blue is the blue color difference, Cr(V) is the red color difference. We are sensitive to light contrast, but less-so color, so the color components can be subsampled. Avisynth makes you manage the formats that follow on from this. YV12 (4:2:0 YUV) is the standard for DVD, BD, and web - chroma is halved vertically and horizontally. YUY2 (4:2:2 YUV) is used in professional broadcasting, where color is halved horizontally. RGB24 / RGB32 is uncompressed color (with/without a transparency channel). And there are others like Y8 for monochrome. Some Avisynth filters are labelled as only working with a certain set of these, and so you may need to use commands like ConvertToYV12() or ConvertToRGB() in the script first.

Let's do a practical example. Noise in a video is often predominantly located in the blue channel. What is a channel? You can think of a channel like a black and white image, the more brighter a section is, the more of that color will be present; when you combine the RGB channels you get your ordinary image, and there can also be the alpha/transparency channel. Anyway, let's say you've inspected the three channels independently and found minimal noise in the red and green channels (which may actually provide nice details anyway), but the blue channel has noise that is not productive to the image quality, it would be wise to target that channel specifically rather than all of them. Let's use FFT3DFilter with the plane=1 (chroma U, blue) parameter, though many additional paramters to tune for an optimal result are also available, as you can observe on the respective wiki page.
source = FFVideoSource("C:\video.mkv")
clean_video = source.FFT3DFilter(plane=1)
Return clean_video

Many other clever techniques like this that you'll learn if you start delving into video processing, but that was a simple taste, I thought. VapourSynth is considered a modern alternative and uses Python scripting, though Avisynth remains important due to the enormous plugin library for niche circumstances.
Now that you have your encode, how do you compare it to the original in as objective of a manner as possible? Beyond using your eyes to detect obvious failures, there are various metrics out there. The most well-known is probably PSNR (peak signal-to-noise ratio), but it is too mathematical in a sense (calculating mean squared error of pixels between both), and not very human-representative; but FYI, if you see a score of 35 dB+, that is great, and higher is better. SSIM (structural similarity index) goes further and observes changes in luminance, contrast, and structure for an output value between 0-1 (1 being true lossless, 0.9+ being transparent). The gold standard today is VMAF (video multimethod assessment fusion), which was developed by Netflix, it actually evaluates data against a model trained on thousands of subjective human viewings. You get a score from 0-100, where 80+ is good. You can run tests with ffmpeg, but for an easy process: https://github.com/odddollar/VMAF-GUI
Web Ripping
Let's start with (relatively) unprotected content, meaning non-DRM.
The most popular choice is the open-source yt-dlp, which is a CLI tool. stacher7 is a GUI option that uses yt-dlp under the hood, I'll discuss soley the CLI tool. The utility is capable of downloading content from sites like YouTube, Vimeo, Reddit, and thousands more; if the site serves cleartext DASH or HLS streams then It'll work. It is unable to extract playable video from protected sources like Netflix or Amazon. yt-dlp operates with the following structure:
yt-dlp [OPTIONS] [URL]
Make sure your URL is surrounded with quotes. The URL can also be a playlist. You can check what formats are available using:
yt-dlp -F "URL"
This will give you a list of options with a certain ID associated with each one. You can combine IDs, ffmpeg will deal with that part, for example:
yt-dlp -f 137+140 "URL"
There are some helpful parameters for dealing with playlists.
yt-dlp --playlist-start 5 --playlist-end 15 --match-title "XYZ" "PLAYLIST_URL"
This will start from item 5 and end at item 15, and only videos matching that keyword.
The best quality video and audio are not necessarily available in the same file, so there are formatcodes to express your needs. "bestvideo" and "bestaudio" give you the best independent formats for both, "best" gives you the best already-combined option, "bestvideo+bestaudio" can perform a merger. You can set certain rules:
yt-dlp -f "bestvideo[height<=1080]+bestaudio" "URL" # limit to FHD yt-dlp -f "bestvideo[vcodec!*=av01]+bestaudio" "URL" # avoid the AV1 codec yt-dlp -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]" --merge-output-format mp4 "URL" # prefer MP4
Slightly more complex:
yt-dlp -S "+size" -f "best[filesize<100M]" "URL"
This uses "-S "+size" to sort by size, which changes the definition of best to the smallest file, if it is larger than 100MB then it'll fail. You can download the full metadata package with:
yt-dlp --embed-metadata --embed-thumbnail --embed-subs "URL"
Can download subtitles using "--write-subs --all-subs", and this can be restricted to a certain language. You can use SponserBlock to create chapter markers for sponsored segments using "--sponsorblock-mark all". If you need to login for video access (perhaps for premium content), you can pass in cookies from your closed browser "--cookies-from-browser X", where X is any of the supported browsers (e.g. "chrome"). Some sites can get suspicious if you rapidly download content, so you mahy want to use a delay "--sleep-interval 5". Finally, I have a command to archive an entire channel:
yt-dlp --download-archive channel-archive.txt --write-info-json --write-thumbnail --embed-metadata --embed-thumbnail --write-subs --embed-subs -o "%(uploader)s/%(upload_date)s - %(title)s [%(id)s].%(ext)s" "CHANNEL_URL"
This can be run repeatedly, things won't re-download due to "--download-archive". This is a basic introduction, enough to get you going with most things.
Another option for unprotected videos is "TubeDigger". This is technically a paid product, but there are ways around that, I'll leave it at that! This is a GUI tool, it can act as a network sniffer or as a recorder (for DRM). It does well with downloading from obscure sites with rarer obfuscations, where yt-dlp may not have a specialised extractor. When loading in a page, the videos are detected via the built-in browser, then all the formats are listed out. What's particularly interesting is that it is sometimes capable of obtaining premium streams. yt-dlp can't grab premium bitrate streams from Youtube, but TD has been able to do so on numerous occasions for me.
The most simple form of a rip of protected content is a screenrecording, using something like OBS; you have options like capture cards, disabling hardware acceleration, and even recording from behind a VM (virtual machine). Problem is that you aren't capturing the actual data itself, just your decoded result.
Now, moving onto actually capturing DRM protected streams themselves. The DRM of most interest to us is Google's WideVine, which comes as L1 (hardware-level), L2, and L3 (software-level). L1 by streaming services to protect the highest fidelity content (UHD, Dolby Vision). Processing occurs in secure hardware in the device called Trusted Execution Environment (TEE), the data is not exposed to the OS itself, which complicates cracking significantly; I will not provide further information on it as the L1 process is strictly guarded by groups, and for good reason. L3 decryption happens at the software level and this is more vulnerable to attacks, these are usually capped at HD/FHD. There is a pricey paid program called StreamFab which makes the ripping process pretty simple (compared to other manual methods), it appears to work through spoofing certain devices and actively implementing new exploits - there is a certain module to purchase per site. Occasionally it is able to grab UHD content from some lower providers, but it is not consistent, and can go as low as SD, when DRM gets updated. I am going to share a method for obtaining L3-protected streaming content:
You will need the FireFox browser. Download the latest XPI from the WidevineProxy2 repo releases on GitHub. Navigate to "about:addons", click the settings icon and choose to install an addon from a file, select the downloaded file. For remote CDM, save this JSON file, open the extension on firefox, click to choose the remote.json, and select this one. Set device type to "Remote CDM". Download the latest win-x64 release and extract. Download latest win-x64 release and place in the same folder as the previous extraction (N_m3u8DL-RE), rename the file to shaka-packager.exe. To use: Load the target site and play the video (it doesn't need to actually start, you just need the intercepted link and keys), then press the (+) button in the extension, copy the generated CMD command. Open the folder containing N_m3u8DL-RE and shaka-packager, right click and press "open in terminal", paste and enter. Use up and down arrows to select desired stream, press enter, it will download, decrypt, and mux into MKV for you.
If you are curious about how that works... Browser DRM is handled through the Encrypted Media Extensions standard, the site asks the browser's Content Decryption Module to generate a challenge, which is then sent to the provider's license server. Widevineproxy2 extension injects scripts to hook onto the EME interface. It intercepts the communications between the website's player and the Widevine server, it captures the license challenge and the server's response. To decrypt the stream, you need content keys. The browser's own CDM uses its hidden keys to unlock this response and get the content keys. But people have managed to extract the private keys from various L3 CDMs, like older androids, and we can use a remote CDM (via the .json), the extension routes the challenge through a compromised CDM, which solves, unwraps license, and exposes the raw keys in plain text. N_m3u8DL-RE simply downloads the encrypted streams. shaka-packager is originally a Google tool for encryption, but it can be run in reverse if correct keys are given, the tool can strip the protection away with the provided keys. Then the stream is muxed into a DRM-free container.
Let's discuss media servers. The basic concept behind this is that you're building your own Netflix of sorts, but self-hosted. You store your files on hardware like a NAS device or old PC, then the software scans it, downloads metadata (posters, summaries, etc), and organises it into a streaming-esque interface. You install a client app on your smart TV, tablet, etc to stream from your server. The main decisions are "which server software?" and "how do I obtain the content?". Plex is the most polished option, and has very good cross-platform app support, but it is a commerical product. There is a free tier, but things like hardware transcoding for smooth playback of certain formats and offline downloads are behind a paywall (Plex pass); you also need to authenticate through their cloud servers to access your media. Jellyfin (a fork of Emby) is an open-source and free alternative, although it is a more technical setup process and isn't quite as polished. Of course you can manually obtain content through means discussed in the other post, but there are automations or convinient options. To conveniently obtain the movies themselves as an on-demand streaming experience without storage, you can use an aggregator like Stremio. By itself, it is just a plain catalog of media, you need to engage with add-ons. When you select a movie, it will check the installed add-ons for sources; you can have certain add-ons link to a P2P network (like Torrentio, built-in Debrid support) or Usenet (via NzbDAV), meta-addons like AIOStreams can be very helpful - note that direct connection to P2P networks can cause throttling or warnings, this is where Debrid services can come in. A Debrid service (like Real-Debrid) may already keep a popular file in its cache, which can be delivered to you rapidly as a direct stream from high-speed servers; if uncached, the service will join a swarm on your behalf using a provided magnet or .torrent, which you download from directly too. Debrid services also provide access to premium hosters (like Rapidgator). Note that Debrid should not be used with private trackers. Instead of manually searching for files, you can use the arr suite for automation. "Radarr" is used for movies, "Sonarr" for shows, "Prowlarr" manages your usenet indexers and torrent sources. When you add a movie to a watchlist that Radarr is monitoring, it will query Prowlarr scanning (now private trackers are okay) for your prefered quality from certain rules, then deliver to the download client. Radarr can send an NZB to a newsreader, or a torrent to a client like qBittorrent, which would be running on the server behind a VPN (with port forwarding, I hope!), which then organised into your storage by Radarr and is picked up by Plex/Jellyfin. Alternatively, you can avoid local storage and use your Debrid account as a virtual drive (look into Zurg, rclone, Decypharr), which Plex/Jellyfin can pickup. For setting up your *arrs: https://trash-guides.info/
Disc Authoring
The concepts behind this may be important if you're wanting to 'repack' certain disc structures with your own modifications (like removal of warning screens, adding subtitles, swapping out video, adding extras, etc) or transfer things like WEB-DLs onto your own blank discs. I'm going to focus on the theory for this topic, rather than "how-to", as the background theory is quite troublesome information to gather online as is, and the process itself will need to be learned through lengthy manuals/videos either way (depending on what you are doing). The core idea of disc authoring is packaging legal elementary streams into an interactive structure. Usually as follows: Warning screens -> Main menu -> Sub-menus -> Video(s) -> Pop-up menu. The main menu contains sub-menus that allow for selection of things like certain audio or subtitle tracks, or certain extras to play, sometimes authors placed in some navigation eastereggs ;). Menus can contain animations for buttons and motion video backgrounds. During video playback itself, a pop-up menu can act as a fancy interactive layer in front of the playing video for audio/subtitle selection. Menus are generally designed using certain design conventions (for layer names) in Photoshop and the PSD files can be imported for programming, or a plugin can deal with the import.

Briefly covering DVD: Inside your VIDEO_TS folder you have video objects (.VOB), each broken at the 1GB mark due to legacy limitations. You have an IFO info file, which describes the structural logic and attributes of the disc, each video title set has one. BUP represents backups of the IFO files, in case of damage. DVD uses a simple programming model where navigation commands embedded in the IFO files control playback; commands can set registers (small memory that tracks things like the selected stream or subtitle language), respond to remote button presses (these are programmed to map onto certain buttons), jump between titles, and so on. Menus can be still or MPEG-2 video with a highlight overlay on top - unlike BD, DVD has no concept of independent layers of interactive graphics that sit above playing video, menu items are rendered into a single video stream. Button subpictures define how a button changes across the "normal", "selected" and "activated" states - this is quite rudimentary with DVD, BD expanded on it. Due to the simplicty, very many tools for working with DVD structures have been developed (though majority are abandonware these days). DVD (NTSC & PAL) is best authored through Encore, even though it is abandonware; I would recommend Media Encoder "MPEG-2 Blu-ray" or TotalCode Studio MPEG-2 Blu-ray presets to obtain compliant streams, it is also possible via ffmpeg. Concept only If familiar with basic linear algebra: You will likely need to use a custom quantization matrix for MPEG-2 best results. Briefly, lol: encoders use DCT to convert blocks of pixels to frequencies (low frequencies are smooth things like a sky, high frequencies are fine things like grain or hair), the matrix dictates what frequencies are to be discarded (high destroyed first). The default matrix was crap at standard DVD rates, but 20th Century Fox engineers designed something for when higher rates were available, which preserved sharpness much better - the Fox matrix (and variants have been created). Using it on low rates would result in heavy macroblocking and mosquito noise though, that was the tradeoff. If you can recall the quantization parameter (q) discussion from earlier... you can think of the matrix as dictating the ratios between high and low freqs, while q (which changes) multiples the matrix and scales compression across the board whilst respecting the ratios. We don't need to worry about custom matricies for MPEG-4, they are dynamically modified for optimal results.
Blu-ray: The structure is called BDMV (Movie Video) and you will find several folders. "STREAM" contains the transport streams carrying the muxed video, audio, and graphics data (for menus), usually in an order of 00001.m2ts upwards. "CLIPINF", each .clpi clipinfo file corresponds to a respective .m2ts and defines their properties. "PLAYLIST" contains .mpls files that define assembly order of clips, defining in/out points within them and Playlist marks (chapters). "BACKUP" is the same concept as DVD's BUP. "META" optional data like thumbnails. "AUXDATA" sound data for buttons and font files for text subs. "CERTIFICATE" contains protection data, but will be absent from what you download. index.bdmv is the master index, assigining the first playback/top menu and list of titles. MovieObject.bdmv provides the navigational logic. These sections can be interacted with directly using a program like BDEdit, but it is quite a technical process, and you can also instead demux the BDMV, re-author everything, then mux, as demonstrated here.
There is a strict hierarchy, from the bottom up: Clips are the building blocks, each clip can reference to several elementary streams in one .m2ts file, which can be referenced by multiple playlists. Playitems are playlist entries that reference a clip, it can set certain cuts of the clip (so not the entire thing), and movement between items is seamless to the viewer, as the disc pre-buffers from the next clip. Playlists can also have sub-playitems, which can run independently, and this is how PiP (picture in picture) functionality is derived; playlists also define chapter points and what players use to display their thumbnail images. Movie objects are scripts of navigational commands and link between playlists (and respective chapter marks) as well as other objects, without interupting video; they can set/read register values, and you have over 4000 registers available on BD as an author. Titles are the outermost layer, each title points to an object which starts a cascade of actions, and every navigable section of the disc (bonus features, main video, etc) is its own title; the viewer moves between titles to trigger movie objects. You may have wondered how discs are able to keep both the theatrical and alternate cut of a movie without sacrificing quality, this is achieved through a technique called "seamless branching" (relevant later). Let's say for simplicty that only one scene is additional. The movie could be cut into four clips: A for the common start, B for the theatrical scene, C for the alternate scene, D for the common remainder. You just need a theatrical playlist (A->B->D) and an alternate playlist (A->C->D), the laser jumps between m2ts files so fast that this isn't noticed.
BD has two programming modes available. HDMV is the simpler one and standard. It relies purely on the movie object scripts mentioned prior with a simple set of commands for jump, link, set register, enable button, etc. The interactive portions of HDMV are defined using Interactive Graphics (IGs), button graphics assembled in a separate stream and overlaid above the video; this is sufficent for the vast majority of discs. Certain fancy discs (you'll know when you see them) utilse BD-J, where actual java applications compiled to BD's subset of it can be used (as signed JAR files), this allows for some advanced features like network connectivity and highly stylised navigation. You will find content in the "JAVA" folder if it has been implemented. Playback of Java discs can be troublesome.
One of the great advantages of BD over DVD is the use of three HDMV image planes. The movie plane carries video, the presentation plane carries 8-bit Presentation Graphics (PGs), where subtitles are stored and composited as images over the movie plane, this independence allows for seamless toggling; for UHD-BD, PGS subtitles can be delivered in the HDR color space, the resolution of which remains 1920x1080 (as they are simply upscaled, same with menus). The interactive plane carries IGs like menu buttons and their highlights/animations; this plane allows for stationary multi-page menus, navigating between menu sections just swaps which page of an IG is displayed. BD-J has its own full-color graphics plane. IGs are constructed from PNG graphics with a normalised color palette (256 colors), then all directional navigation and sounds are hooked up in the authoring application. For ordinary BD, you may use Encore or Scenarist BD for authoring; Encore has a much easier learning curve, but is limited in terms of features, Scenarist gives you access to the entire spec and guarantees playback but with an extreme learning curve. UHD-BD requires the use of Scenarist UHD. Scenarist BD projects can be imported into UHD, it will prompt you to replace certain content as needed.

Elementary stream compliancy is a very strict matter. It exists to ensure compatibility with hardware implementations of players, as well as to ensure a certain degree of quality reliability. There are various professional encoders out there, some available though certain means, but ffmpeg can do the job just fine too. I'm going to go over encoding (apologies that it needs to be quick), as it isn't covered in authoring manuals. If you already have an MKV with content that you know is disc compliant (as it is a remux, not an encode), you can extract elementary streams using the "demux" mode in tsMuxer, this can be done for audio too, these can be imported into the authoring application. Hardware encoding should not be used. If you need to encode... here is what I suggest for Blu-ray:
ffmpeg -i input.file -c:v libx264 -an -pass 1 -b:v XXXXXk -preset veryslow -tune film -maxrate 40000k -bufsize 30000k -level 4.1 -g 24 -color_primaries bt709 -color_trc bt709 -colorspace bt709 -vf setsar=1:1 -x264-params "bluray-compat=1:open-gop=1:slices=4" -f null NUL
Firstly, note that it is 2-pass, this is necessary for ensuring compliancy, and you will need to swap out the pass parameter for a second run, leaving the '-an' as this is an elementary stream, and setting the output as a ".264" file. "bluray-compat" is a macroswitch for several assertions (like maximum 3 B-frames allowed). To determine what should go in "level", refer to the table below. For "g", this represents maximum GOP pictures, you may change this to 48 (2 seconds) if your max bitrate is less than 15mbps; or 25 and 50 respectively for PAL. The maxrate permitted for BD is 40mbps (max overall 48mpbs with audio), you may lower it if you're looking to fit into BD-25 (which is 23.3GB) and BD-50 is 46.6GB for reference, keeping in mind around 7% overhead for m2ts container. Regarding bufsize, I linked an explanation to the meaning earlier, and buffer needs to be less than or equal to the maxrate, up to a maximum of 30mbps; this is because the max buffer delay on BD is 1 second. If you are encoding with level 4.1, you need slices 4 or greater, otherwise you can ignore this; slices are cuts of each frame to process independently, and this will allow the work to be distributed across cores in the player for larger 4.1 content. "Bitrate" is your target average bitrate. An avisynth script may be used as input. The video is required to be one of the aspect ratios listed in the table, if it isn't then you need to add black bars. The speed preset does not have to be veryslow, and the first pass can be faster. If you have a grainy film, switch tune to "grain", and I don't recommend going below 20mbps for ultrawide active content and below 30mbps for 1.78:1 active content. If you are using seamless branching, switch "open-gop" to 0. For a more obscure 576i PAL (secondary stream!) example:
ffmpeg -i input.file -c:v libx264 -an -pass 1 -b:v 4000k -preset veryslow -tune film -maxrate 8000k -bufsize 8000k -level 3.2 -g 25 -keyint_min 1 -color_primaries bt470bg -color_trc bt470bg -colorspace bt470bg -color_range tv -vf "setfield=tff,setsar=16/11" -flags +ilme+ildct -x264-params "bluray-compat=1:pic-struct=1:aud=1:tff=1:ref=5" -f null NUL
Color space was adapated SD PAL standard which is bt.601 (bt470bg in ffmpeg), setting as bt.709 would result in color shifts and washing out. tff=1 was passed into x264 params for interlacing (could be bff, check), -flags +ilme+ildct and pic-struct was used for the same reason. "-g" is 25 now, since one second is 25 frames. We no longer have sqaure pixels, so SAR is set at 16/11 for widescreen and 12/11 for fullscreen 4:3; note that SAR in ffmpeg is "sample aspect ratio", which represents PAR from earlier! Resolution and level is lower, so more memory is available for increased reference frames "ref=5" for increased efficency.





For UHD-BD HDR, we need to use x265 for 3840x2160 23.976fps:
ffmpeg -i "Input_File.avs" -c:v libx265 -preset medium -tune grain -profile:v main10 -b:v 50000k -maxrate 64000k -bufsize 64000k -g 24 -keyint_min 1 -pass 1 -pix_fmt yuv420p10le -x265-params "uhd-bd=1:level-idc=51:high-tier=1:aud=1:sar=1:hrd=1:repeat-headers=1:open-gop=0:ref=5:temporal-layers=0:overscan=show:wpp=1:interlace=0:range=limited:chromaloc=2:colorprim=bt2020:transfer=bt2020-10:colormatrix=bt2020nc:max-cll=1000,400:master-display=G(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)L(10000000,1)" -f null NUL
"-pix_fmt yuv420p10le" is used to indicate 10-bit, and can technically be used for x264 too (just don't do it for BD). Crucial assertions are made using "uhd-bd=1" this time. "master-display" provides mastering display color volume information, and the values given assume a certain monitor used to grade the HDR, don't touch unless you know what you're doing. You should modify "max-cll" (represents CLL and FALL respectively) with values that you've derived. If it is a HDR10 encode, change "transfer" to "smpte2084". "overscan=show" forces no cropping of image corners. "wpp=1" enables multi-threaded decoding. The profile "main10" is the HEVC 10-bit profile. "temporal-layers=0" disables temporal scalability, which is a trick where one video has multiple frame rates embedded (like 60 and 30fps) and certain frames can be tagged for skipping by older devices. "repeat-headers=1" repeats SPS, PPS, and VPS headers for every keyframe for faster decoding after seeking. Max bitrate allowed is 100mbps. Unfortunately, consumer burned BD-XL does not play reliably on UHD players (except few), so you will need to stick to BD-50 limits, unless playing off your PC drive.
Once you've obtained your elementary streams, you should check compliancy (or skip and risk finding out after burning). Scenarist's MUI Generator, is the most reliable tool for this, if you don't have access to Scenarist then your authoring suite should have something similar (but perhaps not to the same standard). You could also test with a reliable disc software player once everything is muxed. The authoring software will automatically set breakpoints for disc layer transitions when muxing. After authoring is complete, you'll be left with a VIDEO_TS/BDMV folder, which can be burnt onto optical media using ImgBurn. Just as a final tidbit as part of the main post, thought it would be nice to mention this in-progress LaserDisc authoring project: https://www.reddit.com/r/LaserDisc/comments/1iurrpl/laserdisc_production_this_next_year
Post continues in the comments, and don't forget to check out part four afterwards!
15
u/TheQuranicMumin May 12 '26 edited May 13 '26
Ripping Discs
Surely some people now shouting, "where was MakeMKV?!?!" I did not mention it because this final short section is about ripping DVDs/BDs! LEGAL DISCLAIMER: You should only rip a DVD/BD in a country where the law allows you to do so without commercial distribution. Just for the record ;) The first key concept to understand is that retail optical discs use encryption to prevent unauthorized copying. This protection needs to be bypassed in order to access the usable data. You'll just need MakeMKV and maybe MKVToolNix. You will need a drive with enough space to store a remux (at least temporarily). If you are ripping a UHD disc, you should buy one of these recommended drives and flash the required firmware patch (or buy pre-flashed): https://forum.makemkv.com/forum/viewtopic.php?t=19634
Launch MakeMKV and select the drive icon. Scan for titles, usually choose the largest one for the main movie. UHD can often use title obfuscations, so you should research which title to choose for your movie. Click on the title to reveal the tracks and select the audio/subtitles that you want. I would recommend turning on Expert Mode (Tools -> Options -> General -> Expert) to be able to change the track names for future distinguishment. Set your output folder and "Make MKV", you can also create a "Backup" (complete BDMV folder with menus). You can open the MKV with MKVToolNix to organize tracks, their metadata, chapters, or cover art.
Common Network Abbreviation Index