BD-to-AVP 3D Blu-ray Disc to Apple Vision Pro README
Introduction
This tool processes 3D video content from Blu-ray discs, ISO images, MKV files, or mts files, creating a final video file compatible with the Apple Vision Pro. It uses FFmpeg, MakeMKV, and a bundled native MVC decoder helper for video extraction, audio transcoding, and video stream merging to convert from Mpeg 4 MVC 3D video to MV-HEVC 3D video. The tool also injects 360° metadata into the video file for spatial media playback. You have the option of AI upscaling the video to 4K resolution and AI OCR of subtitles.
The videos will play directly in the Files or Screenlit app on the AVP.
Screenshots
GUI install
To install the GUI version of Blu-ray to Vision Pro, download the latest release from the releases page. Open the
DMG file and drag the app to your Applications folder.
The GUI app does not install Homebrew or modify your shell setup. Runtime tools are bundled into the app where possible. MakeMKV remains an external requirement for reading Blu-ray discs; install the current macOS version from the MakeMKV website before converting discs.
See Distribution Policy for the current GUI release artifact and dependency policy.
See Direct Pipeline Contracts for the
automatic minimum-materialization behavior and the durable --keep-files
stage contracts.
Terminal install or update (power users)
The terminal/PyPI version is for power users who manage their own command-line dependencies. Install the tools listed
below, create a Python environment, then install BD_to_AVP with pip.
Prerequisites
Ensure the following are installed on your Mac (if using the terminal/PyPI version):
- Apple Silicon Mac: A Mac with Apple Silicon, such as the M1, M1 Pro, or M1 Max
- macOS Sonoma: The latest version of macOS.
- Python 3.12: The latest version of Python.
- Homebrew: The missing package manager for macOS (or Linux).
- FFmpeg: A complete, cross-platform solution to record, convert, and stream audio and video.
- MakeMKV: For converting disc video content into MKV files.
- spatial-media-kit-tool: A tool for injecting 360° metadata into video files.
- MP4Box: A multimedia packager available for Windows, Mac, and Linux.
Current release note: BD_to_AVP still uses MakeMKV for Blu-ray title extraction. By default, existing MKV/MTS/M2TS
sources are reused in place, MVC video streams directly into the bundled native Apple Silicon splitter, and AAC
transcoding avoids an intermediate PCM file. --keep-files restores the durable source copy, extracted MVC .h264,
and PCM boundaries for inspection, stage resume, and external workflows. Native MVC splitting supports 8-bit Blu-ray
3D MVC sources only. Disc image sources using durable MVC input are probed for up to 30 seconds before splitting; if
the multi-threaded native splitter is unstable for that stream, BD_to_AVP continues in slower single-threaded mode.
Runtime tool lookup prefers explicit BD_TO_AVP_<TOOL>_PATH environment overrides, bundled tools in bd_to_avp/bin,
tools already available in PATH, and finally the legacy /opt/homebrew/bin location. The GUI app uses bundled tools
where available; the terminal/PyPI version still expects power users to install command-line tools themselves.
Manual terminal/PyPI dependency setup
These steps are for terminal/PyPI users who manage their own command-line tools. GUI users should use the release DMG and install MakeMKV from the MakeMKV website.
# Install Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Install Homebrew formula dependencies. MP4Box is provided by gpac.
brew install ffmpeg gpac python@3.12
# Install the current macOS MakeMKV build from https://www.makemkv.com/.
# The app bundle is detected automatically from /Applications/MakeMKV.app.
# Ensure Python 3.12 is correctly installed then create a virtual environment
python3.12 -m pip install --upgrade pip
python3.12 -m venv ~/.bd_to_avp_venv
# Activate the virtual environment and install BD_to_AVP
source ~/.bd_to_avp_venv/bin/activate
pip install bd_to_avp
# Run the command from the virtual environment
bd-to-avp --help
GUI Usage
If you have installed the terminal version and wish to use the GUI version, you can run the following command in your terminal:
bd-to-avp
As long as you provide no arguments, the GUI will open.
The GUI locks configuration load/save actions while a job is active so each run uses the settings captured at startup. Choosing Stop Processing requests a cooperative stop and keeps the button in a stopping state until the worker exits. For source-folder jobs, accepted MKV or subtitle error continuations resume the failed source and then continue through the original batch queue.
Terminal Usage
Navigate to the tool's directory in your terminal and execute the command with the required and optional parameters:
Command Syntax
bd-to-avp --source <source> [--source-folder <source-folder>] [options]
Parameters
--source: Source for a single disc number, MKV file path, or ISO image path (required).--source-folder: Source folder path. This option will recurively scan for image files or mkv files. Will take precedence over --source if both are provided.--fx-upscale: Upscale video to 4K resolution using fx-upscale (disabled by default).--remove-original: Remove the original source after processing completes successfully.--overwrite: Overwrite existing output file.--keep-files: Use durable stage boundaries and keep the source copy, extracted MVC, PCM audio, and later intermediates. Without this option, BD_to_AVP automatically uses the minimum-materialization pipeline. An explicit--remove-originalstill removes the selected source after a successful conversion.--output-root-folder: Output folder path. Defaults to the current directory.--transcode-audio: Enable audio transcoding to AAC (disabled by default).--audio-bitrate: Audio bitrate for transcoding in kb/s do not include unit (default: "384").--left-right-bitrate: Bitrate for left and right views in Mb/s do not include unit (default: "20").--mv-hevc-quality: Quality factor for MV-HEVC encoding (default: "75").--fov: Horizontal field of view for MV-HEVC (default: "90").--frame-rate: Video frame rate (auto-detected if not provided).--resolution: Video resolution (auto-detected if not provided).--swap-eyes: Swap left and right views (disabled by default).--start-stage: Start processing at a specific stage.--output-commands: Output commands used to console.--software-encoder: Use software encoder for MV-HEVC encoding (disabled by default).--skip-subtitles: Skip subtitle extraction (disabled by default).--continue-on-error: Continue processing after an error (disabled by default).--language: Language code for audio and subtitle extraction (default: "eng") Use the ISO 639-2 (three character) code.--remove-extra-languages: Remove extra audio and subtitle languages (disabled by default).--no-keep-awake: Prevent the system from sleeping during processing (disabled by default).--version: Show the version number and exit.
Stage Names
- CREATE_MKV
- EXTRACT_MVC_AND_AUDIO
- EXTRACT_SUBTITLES
- CREATE_LEFT_RIGHT_FILES
- UPSCALE_VIDEO
- COMBINE_TO_MV_HEVC
- TRANSCODE_AUDIO
- CREATE_FINAL_FILE
- MOVE_FILES
Examples
Process a Blu-ray disc:
bd-to-avp --source disc:0 --output-root-folder /path/to/output
Process an ISO image:
bd-to-avp --source /path/to/movie.iso --output-root-folder /path/to/output
Process an MKV file:
bd-to-avp --source /path/to/movie.mkv --output-root-folder /path/to/output --transcode-audio
Upscale Quality
For most users, the default values of 75 HEVC Quality and 75 Upscale Quality provides a good tradeoff of preserving all the details of the original film, the extra details generated by the upscaler, while also keeping the size of the resulting video manageable.
If you would like to change the default quality, here are some recommended alternative settings sorted by final output size, with some notes about the quality of the results.
| HEVC Quality | Upscale Quality | Min Processing Space Needed | Final Size | Notes |
|---|---|---|---|---|
| 85 | 85 | ~ 225 GB | ~ 95 GB | These settings are arguably "too" high. Only for those obsessed with maintaining the best possible quality. |
| 85 | 50 | ~ 130 GB | ~ 62 GB | A reasonable choice for "Best Quality" encoding. |
| 75 | 75 | ~ 100 GB | ~ 47 GB | The default setting. |
| 75 | 50 | ~ 75 GB | ~ 37 GB | Provides a good trade-off for minimizing storage space while retaining quality throughout the process. |
| 65 | 65 | ~ 75 GB | ~ 32 GB | Compression artifacting is very visible in dark scenes or on fast-moving objects, but is otherwise okay. |
HEVC Quality values below 65 are not recommended when upscaling. At that quality level, you are essentially upscaling compression artifacts. Keeping the video in 1080p and increasing the HEVC Quality will result in a better viewing experience.
Note on Blu-ray drives
If your BD drive does not seem to be compatible with your M-series Mac, it's possible that the error is related to the region code, which BDs handle differently than DVDs.
Solution
- Connect your BD drive to your Mac via USB. Using a dongle often yields better results than a direct connection.
- Insert a DVD (not a Blu-ray) into the drive and open the DVD Player.
- If prompted, select a region code for the DVD.
- Eject the DVD and insert a Blu-ray disc. Your Mac should now recognize the Blu-ray discs.
This method has been effective in resolving compatibility issues.
Contribution
Contribute to the project by submitting pull requests or opening issues for bugs and feature requests.
Acknowledgements
Big thanks to:
- sturmen on the Doom9 forums, for an encoding guide using
FRIM Decoderas well as creating the spatial-media-kit-tool - Vargol on GitHub, for making the JM reference software build properly on macOS as well as an example script that was a useful reference
- steverice for h264-tools
- Thibault Raffaillac, Celticom/TVLabs, and Jens Duttke for edge264-mvc, used by the bundled native MVC
splitter. The BSD license notice is included in
bd_to_avp/resources/notices/edge264-mvc-LICENSE_BSD.txt. The bundled build appliesscripts/patches/edge264-mvc-stream-input.patchso direct mode can consume Annex B MVC from stdin without materializing an intermediate.h264file;scripts/build_edge264_macos.pyreproduces the binary.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bd_to_avp-0.2.143.tar.gz.
File metadata
- Download URL: bd_to_avp-0.2.143.tar.gz
- Upload date:
- Size: 5.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
38661ff2a0dfdcd5c47e1aa53ce73431825bdb1556f7950a976b6372bc936bea
|
|
| MD5 |
a8b18c8fdb630173bbe287db0d53ac65
|
|
| BLAKE2b-256 |
a1830cc60031c691d938824e08ba814c0712aa22343c8165366007f8678ef32f
|
Provenance
The following attestation bundles were made for bd_to_avp-0.2.143.tar.gz:
Publisher:
briefcase.yml on cbusillo/BD_to_AVP
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
bd_to_avp-0.2.143.tar.gz -
Subject digest:
38661ff2a0dfdcd5c47e1aa53ce73431825bdb1556f7950a976b6372bc936bea - Sigstore transparency entry: 2146415529
- Sigstore integration time:
-
Permalink:
cbusillo/BD_to_AVP@03fe03ab58abf85b74c32f6b3b7387d9ad6f1941 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/cbusillo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
briefcase.yml@03fe03ab58abf85b74c32f6b3b7387d9ad6f1941 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file bd_to_avp-0.2.143-py3-none-any.whl.
File metadata
- Download URL: bd_to_avp-0.2.143-py3-none-any.whl
- Upload date:
- Size: 5.7 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8a068e4d73336820b418d14ba75da3d461ef07361dbf53371df86e7d6582c86c
|
|
| MD5 |
6a64649e315e4914e915d83b6d578573
|
|
| BLAKE2b-256 |
8e65f81d7840f5b4fb0d34e89dc2266bdc44e63cb0f65fc7546b30c1a5eae602
|
Provenance
The following attestation bundles were made for bd_to_avp-0.2.143-py3-none-any.whl:
Publisher:
briefcase.yml on cbusillo/BD_to_AVP
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
bd_to_avp-0.2.143-py3-none-any.whl -
Subject digest:
8a068e4d73336820b418d14ba75da3d461ef07361dbf53371df86e7d6582c86c - Sigstore transparency entry: 2146415540
- Sigstore integration time:
-
Permalink:
cbusillo/BD_to_AVP@03fe03ab58abf85b74c32f6b3b7387d9ad6f1941 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/cbusillo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
briefcase.yml@03fe03ab58abf85b74c32f6b3b7387d9ad6f1941 -
Trigger Event:
workflow_dispatch
-
Statement type: