Log in

View Full Version : BD3D2MK3D v1.36: Convert 3D BDs or MKV to 3D SBS, TAB or FS MKV - Support thread


Pages : 1 2 3 4 5 [6]

Enet47
6th July 2025, 11:44
Thanks for the confirmation.
...
It would be very useful if the script would not wait for audio delays when audio has not been muxed with video. I'm doing this a lot at the moment and it's annoying to manually kill the mkvinfo process in Task Manager or wait for about 5 minutes for it to time out. If there is a way I can fix this at my end without you making any changes then that would be even better.

r0lZ
6th July 2025, 12:02
Just to confirm: are you using BD3D2MK3D with MKV files created with MakeMKV ? I suppose so, as I can't imagine a BD without audio ! ;-)

Enet47
6th July 2025, 12:38
Just to confirm: are you using BD3D2MK3D with MKV files created with MakeMKV ? I suppose so, as I can't imagine a BD without audio ! ;-)
I'm ripping and re-encoding 3D movies, most of which don't have Atmos audio. So I rip the video then mux the Atmos audio from a 4K disc after BD3DMK3D conversion.

r0lZ
6th July 2025, 15:16
I see. I will have a look, but I'm currently very busy so I can't guarantee a new version soon. Sorry.

Enet47
6th July 2025, 15:51
I see. I will have a look, but I'm currently very busy so I can't guarantee a new version soon. Sorry.
Thanks. I'm currently re-ripping my whole library of a couple hundred 3d blu-rays. So knowing my luck I will finish the whole lot then before the new version arrives lol. But we all have a real lives to lead so we can only do what we can do. Thanks for the great tool :)

r0lZ
6th July 2025, 18:18
OK, in the meantime, try this. Open the console (menu File -> Shown Console), and type this at the "(BD3D2MK3D) 1 %" prompt :

proc GetBDAudioDelays {a {b true}} {return 0}

This should bypass entirely the procedure to retrieve the audio delays.
I have not tested that trick, but it should work. Please confirm.

If it works fine, you will have to type it each time you launch BD3D2MK3D, or just create a file called "plugin.tcl" with the line above, and put that file in the BD3D2MK3D installation folder (with BD3D2MK3D.exe). Of course, don't forget to remove it and relaunch BD3D2MK3D if you need to process a BD with audio !

[EDIT] You have not confirmed if it's a BD or a MKV you open. In the second case, you have to type this :

proc GetMKVAudioDelays {a} {return 0}

Or, if you want to be sure, just type the two strings !

Enet47
6th July 2025, 20:02
OK, in the meantime, try this. Open the console (menu File -> Shown Console), and type this at the "(BD3D2MK3D) 1 %" prompt :

proc GetBDAudioDelays {a {b true}} {return 0}

This should bypass entirely the procedure to retrieve the audio delays.
I have not tested that trick, but it should work. Please confirm.

If it works fine, you will have to type it each time you launch BD3D2MK3D, or just create a file called "plugin.tcl" with the line above, and put that file in the BD3D2MK3D installation folder (with BD3D2MK3D.exe). Of course, don't forget to remove it and relaunch BD3D2MK3D if you need to process a BD with audio !

[EDIT] You have not confirmed if it's a BD or a MKV you open. In the second case, you have to type this :

proc GetMKVAudioDelays {a} {return 0}

Or, if you want to be sure, just type the two strings !
They are all MKV so I added proc GetMKVAudioDelays {a} {return 0}. At the end of processing I get the error below and only 8 files in the MKV3D folder instead of the usual 24 files. If you are too busy don't worry. I will carry on in the mean time. Thanks again.

Error Message:
list must have an even number of elements
list must have an even number of elements
while executing
"array set audiodelays [GetMKVAudioDelays $mplsfile]"
(procedure "GenerateAvs" line 1648)
invoked from within
"GenerateAvs"
invoked from within
".nbf5.gf.gen invoke "
invoked from within
".nbf5.gf.gen instate !disabled { .nbf5.gf.gen invoke } "
invoked from within
".nbf5.gf.gen instate pressed { .nbf5.gf.gen state !pressed; .nbf5.gf.gen instate !disabled { .nbf5.gf.gen invoke } } "
(command bound to event)

r0lZ
6th July 2025, 21:19
Oops!
Try this :
proc GetMKVAudioDelays {a} {return {0 0}}

Enet47
6th July 2025, 23:00
Oops!
Try this :
proc GetMKVAudioDelays {a} {return {0 0}}
Thank you :)

r0lZ
1st September 2025, 10:40
Here is the new version with a workaround for the wrong tsMuxeR (https://www.videohelp.com/software/tsMuxeR) .eac3 file extension.
Some third-party tools have also been updated to the latest version, but I have NOT tested them carefully. In case of problem, you can install the previous version again (available here: BD3D2MK3D_v1.35.7z (https://download.videohelp.com/r0lZ/BD3D2AVS/BD3D2MK3D_v1.35.7z)).


v1.36 (September 1, 2025)
- Fixed wrong tsMuxeR file extension .ac3+ec3 when extracting a .eac3 audio stream in AVC+MVC MKV input mode.
- Workaround for the long timeout delay when a BD without audio is processed.
- Updated x264 to version 0.165.3222
- Updated x265 to version 4.1+190
- Updated the MkvToolnix (https://www.videohelp.com/software/MKVToolNix) tools to version 94.0 ("Initiate")
- Updated tsMuxeR to version 2.7.0

As usual, you can download the latest version here: BD3D2MK3D.7z (https://download.videohelp.com/r0lZ/BD3D2AVS/BD3D2MK3D.7z)

MegamanXGold
21st September 2025, 20:48
Hello,

1. How can I stretch a Full-SBS 3D MKV to a full 4K frame? I know it's wasteful, but I can't play Full-SBS 1080p, and I don't want to lose quality by going Half-SBS.

2. I'd like to use the NVENC encoder in my RTX 3080 to much more quickly encode to HEVC, though I'd like for the best possible quality settings so it's not much worse than software encode. Is there a way to do that?

Reasons:
Maybe I'm doing something wrong, but my new PC uses a Ryzen CPU, and I can't get MPC-HC and madVr to display my MVC MKVs in SBS on my software EDID (fake/virtual) 4K display in Bigscreen Beta (VR app in Steam).

On my older PC, I had it convinced one of my 1080p monitors is a 1440p screen, and I could notice a significant bump in clarity watching movies. Now I want to go all the way on the new PC but, since I can't seem to play the videos in real-time on the new PC, I would like to convert the files.

The added benefit is that the built-in media player in Bigscreen Beta should be able to play the videos instead of needing to capture a fake screen.

Right now I'm trying to use BD3D2MK3D to create a Full-SBS video then I'll try to re-encode it in ffmpeg with the command
ffmpeg -i input.mp4 -c:v hevc_nvenc -crf 23 -c:a copy -vf scale=iw:2160 output.mp4
(though I imagine there's some stuff I'm going to have to figure out based on how complicated this mess looks (https://docs.nvidia.com/video-technologies/video-codec-sdk/12.0/ffmpeg-with-nvidia-gpu/index.html))

But the first encode is going to take hours because I'm dumb and set it to crf 22 with the slow preset, despite the warning, because I knew I'm going to re-encode the whole thing again and I really don't want to lose perceivable quality.

Thank you

r0lZ
22nd September 2025, 09:19
Welcome to the Doom9 forums, MegamanXGold !

It seems that your two questions are related. You should select Settings > AVC/HEVC Encoder > Use your own custom command for encoding. When that option is enabled, the last tab changes to include a Custom command field where you must specify the command you wish to use. For example, to encode in Half-SBS with nvenc, you should type something like this:

"path\\to\\nvencc\\nvencc64.exe" ^\n --codec avc --cqp 26 --profile high --level 4.1 --preset quality --sar ${sar} ^\n --colorprim bt709 --colorrange limited --chapter chapters_3D_delay.ogm.txt --key-on-chapter ^\n --input "__ENCODE_3D_MOVIE.avs" --output "video3D_nvenc.avc"

Some parameters can be automatically filled by the program, like the SAR with the variable ${sar} in my example above. Have a look at the list of variables. You will see that the video width and height can also be specified with variables but in your case, you can specify them in your command if the program you use to encode is able to resize the video to encode in 4K. However, I have never tested this, and I can be wrong. In case of problems, please let me know.

Of course, deselect the Half- option in the same tab, as otherwise some other parameters will be wrong and the Avisynth will resize the height (or width) of the original picture to half its resolution before your command will upscale it to 4K!

If your encoder doesn't have an option to resize the video, edit manually the file __ENCODE_3D_MOVIE.avs. Notice the line containing the AviSynth StackHorizontal command. It's where the video is resized if necessary (for Half-SBS/TAB) and the two views are joined together. In Half-SBS, the command is this:

StackHorizontal(HorizontalReduceBy2(Left), HorizontalReduceBy2(Right))

The HorizontalReduceBy2 command resizes the video height to half its resolution.
To do the opposite and upscale it to Full-SBS 4K, you should replace this command with the two commands below:

StackHorizontal((Left), (Right))
LanczosResize(7680, 2160)

In other words, if you have correctly deselected the Half option, it should be sufficient to just insert your resize command right below the StackHorizontal command.
(See the Avisynth manual about the resize filters here (https://avisynthplus.readthedocs.io/en/latest/avisynthdoc/corefilters/resize.html).)

I have not verified everything, but method 1 (with the resize done with your own custom encoding command) or method 2 (resize done with Avisynth) should work fine. However, be sure to verify the SAR and Aspect Ratio that work fine for your hardware. That options can be changed in the BD3D2MK3D settings.

Note also that the subtitles in Full-SBS/TAB are problematic, and, I guess, even more problematic in Full-4K. If you really need the subtitles, you may have to "hardcode" them in the last tab. That should work too.

Anyway, your custom command should be able to use your GPU to encode faster. That command is up to you, as I'm not a master in encoding techniques. The nvenc command above uses the GPU but honestly, I don't think the speed gain worth it. The quality is notably less good than with x264 for the same disc size. Anyway, it's your choice.

r0lZ
22nd September 2025, 09:30
But the first encode is going to take hours because I'm dumb and set it to crf 22 with the slow preset, despite the warning, because I knew I'm going to re-encode the whole thing again and I really don't want to lose perceivable quality.

Not sure I understand what you mean here. CRF 22 is not at all a very high quality. IMO, it is a good compromise between disc space and quality but you should use a much lower value (for example around 10) if the result has to be re-encoded, and you have plenty of disc space. CRF 0 is lossless but will produce a huge file size !
Anyway, if you encode directly to the final resolution (as explained in my post above), you don't need to re-encode and the final quality is up to you (and your encoding program).

Happy 3D viewing !

jd
6th November 2025, 00:06
Hi if i understand BD3D2MK3D can not do 3D Full SBS subtitles ?


i did a python script with the help of Grok Ai because i do not know python :)

the script modify the left_eye.xml file and all the png images so they work in Subtitle Edit and then export a working 3D Full SBS sub file

and the 3d Full SBS movie works perfect with the 3d sub on my Xreal One Pro

i have done only 4 3d Blu-ray movies Full SBS 3840x1080 and the subtitles works perfect

Titanic 3D
Avatar 3D
John Carter 3D
Jurassic Park 3D



here is the code


import xml.etree.ElementTree as ET
from PIL import Image
import os

# ----------------------------------------------------------------------
# Parse the XML file
tree = ET.parse('temp_3D_left.xml') # <-- the left_eye.xml file as input
root = tree.getroot()

# Directory where images are stored
image_dir = r"E:\3D\Avatar 3D\MKV3D\MKV3D.track_6_eng.3D_2D" # <-- change if needed

# ----------------------------------------------------------------------
for event in root.findall('.//Event'):
graphic = event.find('Graphic')
if graphic is not None:
# ---- XML values -------------------------------------------------
width = int(graphic.get('Width')) # current image width
orig_depth = int(graphic.get('OrigDepth')) # original depth
image_file = graphic.text # filename
left_x = int(graphic.get('X', '0')) # left padding
y_from_xml = int(graphic.get('Y', '0')) # Y value from XML
orig_height = int(graphic.get('Height', '0')) # original height (fallback 0)

# ---- Calculated spacing between the two copies -----------------
between_x = 1920 - width - orig_depth # gap between copies

# ---- Bottom padding: 1080 - Y - Height -------------------------
bottom_y = 1080 - y_from_xml - orig_height
if bottom_y < 0:
print(f"Warning: Negative bottom padding for {image_file}. Clamping to 0.")
bottom_y = 0

# ---- Load image to get actual dimensions -----------------------
input_path = os.path.join(image_dir, image_file)
output_path = os.path.join(image_dir, image_file) # overwrites original

try:
with Image.open(input_path) as img:
# Ensure RGBA for transparency
if img.mode != 'RGBA':
img = img.convert('RGBA')

orig_w, orig_h = img.size

# Use actual image height if XML Height was missing/inaccurate
if orig_height == 0:
orig_height = orig_h

# ---- Total canvas size -----------------------------------------
total_width = left_x + width + between_x + width
total_height = orig_h + bottom_y # image + bottom padding

# ---- Create new canvas -----------------------------------------
canvas = Image.new('RGBA', (total_width, total_height), (0, 0, 0, 0))

# ---- Paste both copies at the TOP (Y = 0) ----------------------
# First copy
canvas.paste(img, (left_x, 0))
# Second copy
second_x = left_x + width + between_x
canvas.paste(img, (second_x, 0))

# ---- Save ------------------------------------------------------
canvas.save(output_path, 'PNG')

# ---- Verify saved dimensions -----------------------------------
with Image.open(output_path) as saved:
saved_w, saved_h = saved.size

# ---- Update XML: Width and Height -----------------------------
graphic.set('Width', str(saved_w))
graphic.set('Height', str(saved_h))

print(f"Processed {image_file}: "
f"left={left_x}, Y={y_from_xml}, bottom={bottom_y}, "
f"between={between_x}, size={saved_w}x{saved_h}")

except IOError as e:
print(f"Error processing {image_file} with Pillow: {e}")

# ----------------------------------------------------------------------
output_xml = 'modified_3D_Left.xml'
tree.write(output_xml)
print(f"Modified XML saved as {output_xml}")


the "modified_3D_Left.xml" that the script outputs use that then in Subtitle Edit and Export > Bly-ray sub...
next i change the Video res to 3840 x 1080 and Align Left and the i klick Export all lines...


this script does only work if you crop the movie to the film frame so no black borders otherwise the script needs more modification i think not sure

here are some screenshot

r0lZ
6th November 2025, 12:25
Interesting and thanks for sharing your finding and your script. That can be useful to others.

Also, welcome to the Doom9 forums !

But note that although the subtitles are supported by your Xreal One Pro, subtitles with that width are not legal. Even in 2D UHD BD, the maximum width of a subtitle is 1920 (Full-HD width). They are supposed to be resized to UHD resolution at play time. However, I may admit that this limitation is artificial and that probably more and more hardware or software players will accept subtitles in UHD resolution in the future, if it's not already the case. But the fact is also that many players will reject them.
this script does only work if you crop the movie to the film frame so no black borders otherwise the script needs more modification i think not sure
Here, I do not agree. It's exactly the opposite. The 3D movies must never be cropped, exactly because otherwise the subtitles will not be placed at the right height in the picture, and that means that they may enter in foreground objects. (There are many other reasons to never crop a 3D movie, but not related to the subtitles.) Anyway, the Y position of the subtitles in the original XML produced by BD3D2MK3D are the correct positions for the non-cropped frame. If you crop the picture, you should modify the Y pos in the XML too... unless your player places the subtitles relatively to the bottom of the TV border instead of the bottom of the cropped image. As you can see, cropping a movie (even in 2D) introduces difficulties that are never present if you keep the frame unchanged.

I have also a question about SubtitleEdit. I don't understand how you can export directly the imported XML/PNG to BD Sup format. As far as I know, SubtitleEdit can only convert text subtitles to several graphic formats like BD Sup, but it cannot export a graphic format to another graphic format. Am I wrong ?

jd
6th November 2025, 17:20
Interesting and thanks for sharing your finding and your script. That can be useful to others.

Also, welcome to the Doom9 forums !


Thanks :)

forgot to say that the 3D Full SBS movies with this method subtitles works on Jellyfin app and direct on jellyfin through web browser Xreal One Pro and it work to if i look Crossed eyes on the screen i see then 3 screens but the middle is the 3D hehe no need Xreal One Pro :) here is a Youtube clip what i mean
https://www.youtube.com/watch?v=zBa-bCxsZDk

when i did the trial and error to get 3d subs to work i did use the Crossed eyes method it was faster to see if it works :)


I have also a question about SubtitleEdit. I don't understand how you can export directly the imported XML/PNG to BD Sup format. As far as I know, SubtitleEdit can only convert text subtitles to several graphic formats like BD Sup, but it cannot export a graphic format to another graphic format. Am I wrong ?


i just drop in the "modified_3D_Left.xml" to Subtitle Edit then Right Mouse Button Export > Bly-ray sub...

here is a screenshot

r0lZ
6th November 2025, 17:59
Cross-eyes technique ! Damned ! I forgot that. IMO, it's a pain, but indeed it's fast, and you don't need special equipment !

Thanks for the info about SubtitleEdit. But unfortunately, it is not possible to implement your method in BD3D2MK3D. The first steps can certainly be implemented, but the conversion from the final XML/PNG to BD Sup cannot be automated with SubtitleEdit, because it has no command-line option to do such a complex conversion, and BDSup2Sub cannot handle UHD subs. Pity. And anyway, honestly, I'm becoming old and I don't want to continue to implement new things in my programs, especially when they are not useful to many users. (BTW, do you know that you can easily "hardcode" your subtitles on the image with the option in the last tab ?)

But if you want, I can certainly add a link to your post above in the BD3D2MK3D home page so that peoples interested in UHD subs will be able to do it. Thanks again !

jd
6th November 2025, 18:24
But unfortunately, it is not possible to implement your method in BD3D2MK3D

ok :)

(BTW, do you know that you can easily "hardcode" your subtitles on the image with the option in the last tab ?)

yes i did that to the Avatar 3D movie first and of course it works perfect :)

But if you want, I can certainly add a link to your post above in the BD3D2MK3D home page so that peoples interested in UHD subs will be able to do it.

i have only done 4 3D movies yet and it have worked but not sure if it works on all but you can do that if you want :) i have now maybe 20 3D movies so going to test more :)

r0lZ
6th November 2025, 18:46
i have only done 4 3D movies yet and it have worked but not sure if it works on all but you can do that if you want :) i have now maybe 20 3D movies so going to test more :)
I see no reason to suspect that it will not work for the other subtitles (unless of course when BD3D2MK3D cannot convert then to Half-SBS, but that's rare, except for special subtitles such as karaoke).

I'll add a link on the home page soon. Thanks again.

jd
6th November 2025, 18:53
ok :)

subx
10th November 2025, 23:07
My first time using BD3D2MK3D, and I'm encountering an issue. Perhaps I'm missing something obvious.

File creation seems to go fine, but running __ENCODE_3D_LAUNCHER.cmd immediately fails.

Under Windows 11 this happens:

C:\incoming\Tron\MKV3D>"C:\incoming\BD3D2MK3D\toolset\avs2yuv64.exe" "__ENCODE_3D_MOVIE.avs" -frames 180028 -o - | "C:\incoming\BD3D2MK3D\toolset\x265_x64.exe" --output-depth 10 --crf 24 --preset slow --sar 1:1 --range limited --colorprim bt709 --qpfile chapters_3D.qpfile --frames 180028 --fps 24000/1001 --output "MKV3D_3D.265" --y4m -
error:
(__ENCODE_3D_MOVIE.avs, line 20)
x265 [error]: unable to open input file <->


__ENCODE_3D_MOVIE.avs, line 20 (both of the files are in the MKV3D folder)

interleaved = FRIMSource("mvc", "MKV3D.track_1.264", "MKV3D.track_1.mvc", layout = "alt", num_frames = 180028, cache = 2, platform = "")


I tried it on an older Windows 10 machine, and it failed at the same point, but with a different error:

C:\temp\Tron\MKV3D>"C:\temp\BD3D2MK3D\toolset\avs2yuv64.exe" "__ENCODE_3D_MOVIE.avs" -frames 180028 -o - | "C:\temp\BD3D2MK3D\toolset\x265_x64.exe" --output-depth 10 --crf 24 --preset slow --sar 1:1 --range limited --colorprim bt709 --qpfile chapters_3D.qpfile --frames 180028 --fps 24000/1001 --output "MKV3D_3D.265" --y4m -
__ENCODE_3D_MOVIE.avs: 1920x1080, YV12, 8-bits, progressive, 24000/1001 fps, 180028 frames
error: wrote only 3085668 of 3110400 bytes


The only similar error I found in this thread seemed to be caused by a non ASCII character in the file path, but that isn't the case for me.

Maybe I'm missing a dependency? Do I need anything other than BD3D2MK3D 1.36 and AviSynth+ 3.7.5?

r0lZ
11th November 2025, 11:04
Welcome to the Doom9 forum, subx!

Hum, strange.

The error with the second try can be caused by a damaged input file (the BD ISO or the source AVC+MVC MKV). This happens usually when there is a glitch in the video stream. In that case, the decoder must skip some frames and the total number of frames to encode is wrong. You can try to mux the final MKV but usually there will be a difference between the left and right views (and possibly also with the audio) , making the movie a pain to watch. Try to re-rip the original BD.

I suppose you have verified that you have enough disc space. Right? That can also explain the second error.

Also, I see that avs2yuv is used. It is necessary when only the 32-bit version of avisynth is installed. Try to install the 64-bit version of avisynth+ (https://github.com/pinterf/AviSynthPlus/releases). You can verify the versions recognised by BD3D2MK3D with Help -> Avisynth version.
(BTW, it seems that v3.7.4 is the latest official stable release. Perhaps v3.7.5 has a bug?)

Sorry, I can't help much more.

subx
11th November 2025, 16:13
Thanks for the quick response.


The error with the second try can be caused by a damaged input file ... Try to re-rip the original BD.
I ripped a different BD to hopefully try and rule out both bad rip and bad disc, but got the same result.


I suppose you have verified that you have enough disc space. Right?
I'm hoping over 100Gb is enough!


Try to install the 64-bit version of avisynth+ (https://github.com/pinterf/AviSynthPlus/releases). ... v3.7.4 is the latest official stable release
Hmm, I only had the 64bit version installed - but this has reminded me that I installed the main fork version:
https://github.com/AviSynth/AviSynthPlus/releases/
rather than the fork you've linked to:
https://github.com/pinterf/AviSynthPlus/releases/

Is there an important difference between the two? (if so, how do you install the pinterf version since there doesn't appear to be an installer?)

r0lZ
11th November 2025, 18:00
Is there an important difference between the two? (if so, how do you install the pinterf version since there doesn't appear to be an installer?)
Honestly, I don't know. Your version should work fine, but I don't understand why BD3D2MK3D doesn't recognise it. Have you tested Info -> avisynth version ? Please post the result here. (Ctrl-C to copy the content of the dialog.)

subx
11th November 2025, 20:00
I don't understand why BD3D2MK3D doesn't recognise it. Have you tested Info -> avisynth version ? Please post the result here.

I think it does recognise it...


---------------------------
BD3D2MK3D
---------------------------
AviSynth 32 Bit: AviSynth+ 3.7.4 (r4273, 3.7, i386) (3.7.4.0)
AviSynth+ 32-bit is supported by BD3D2MK3D.

AviSynth 64 Bit: AviSynth+ 3.7.4 (r4273, 3.7, x86_64) (3.7.4.0)
AviSynth+ 64-bit is supported by BD3D2MK3D.


I tried swapping to 3.7.4 (main fork) but it made no difference.

I've attached the BD3D2MK3D settings I used, in case I've missed something obvious there.

Enet47
6th December 2025, 03:22
I'm using this command in the AVS encode file:

interleaved = FRIMSource("mvc", "MKV3D.track_1.264", "MKV3D.track_1.mvc", layout = "alt", num_frames = 193562, cache = 2, platform = "sw")

But I'm still getting this error:
x264_x64.exe" --output-depth 8 --crf 16.5 --preset slow --tune film --aq-mode 3 --sar 1:1 --range tv --colormatrix bt709 --frame-packing 3 --qpfile chapters_3D.qpfile --frames 193562 --fps 24000/1001 --output "MKV3D_3D.264" "__ENCODE_3D_MOVIE.avs"
avs [error]: ERROR: Cannot initialize Intel Media SDK session.

r0lZ
6th December 2025, 09:55
Hum, strange. Is it the first time you use BD3D2MK3D? If yes, then be sure to install BD3D2MK3D correctly. When you extract the files from the archive, be sure to keep the original structure, with the sub-directories.

Also, try to modify the avisynth command from platform = "sw" to platform = "hw". Usually, using the hardware decoder is less secure (and it might even fail totally if you don't have a supported Intel processor) but who know?

Enet47
6th December 2025, 13:01
Hum, strange. Is it the first time you use BD3D2MK3D? If yes, then be sure to install BD3D2MK3D correctly. When you extract the files from the archive, be sure to keep the original structure, with the sub-directories.

Also, try to modify the avisynth command from platform = "sw" to platform = "hw". Usually, using the hardware decoder is less secure (and it might even fail totally if you don't have a supported Intel processor) but who know?
All working now. The set path command at the beginning of the Encode file was pointing to the wrong directory. So it looks like your program defaults to HW by default? Thanks for the response.

BTW AMD CPUs with AVX512, encode around twice as fast as Intel. Strange but preset "slow" is sometimes encoding faster than preset "medium".

r0lZ
7th December 2025, 12:33
Thanks for the confirmation. Just to be sure, do you know why a wrong directory was used? Is it a bug of BD3D2MK3D?

No, by default, BD3D2MK3D uses the automatic detection of the hardware acceleration. If a CPU supporting it is detected and the Intel drivers are correctly installed, it will use HW. Otherwise, SW is used. But IMO SW is safer. The Intel drivers are sometimes buggy and I trust at 100% only the SW version provided with BD3D2MK3D.

I'm not sure the names of the presets are good choices, as indeed the speed is not always what the user may expect. However, with a slower preset, the encoding is more complex and therefore usually slower. Note also that the decoding is also more complicated and using a very slow preset may cause playback problems on old hardware players.

Enet47
7th December 2025, 12:44
Thanks for the confirmation. Just to be sure, do you know why a wrong directory was used? Is it a bug of BD3D2MK3D?

Wrong directory.


No, by default, BD3D2MK3D uses the automatic detection of the hardware acceleration. If a CPU supporting it is detected and the Intel drivers are correctly installed, it will use HW. Otherwise, SW is used.

Well on my AMD machine it definitely chooses HW even though the command was set for SW. This happened every single time it failed because of the wrong folder.


I'm not sure the names of the presets are good choices, as indeed the speed is not always what the user may expect. However, with a slower preset, the encoding is more complex and therefore usually slower. Note also that the decoding is also more complicated and using a very slow preset may cause playback problems on old hardware players.
The presets are pretty decent choices based on the devs experience and feedback. Because of the more complex encoding, Slow preset should always be slower than Medium preset. But I'm finding that is not always the case. Sometimes it's about the same, other times it is faster. I think the AVX512 extensions are making a very large difference but maybe 3D cache also helps?

Hazmu
17th April 2026, 00:09
Hi, thank you for your tool, been using it for years to clone subtitles positions and depth and then use them on MVC MKV (with tsmuxer) and also to convert a few movies to Full-TAB and it's great.
But I have a question that is a little unrelated...Is there a way to use it to export the left and right streams into separate h.264 videos so I can edit them in Adobe programs?

r0lZ
17th April 2026, 08:21
Welcome to the Doom9 forum, Hazmu, and thanks for your positive appreciation of BD3D2MK3D!

Sorry, it is not possible to export directly the two views as 2 independent streams. However, you can export as Frame Sequential (stereoscopy option in the last tab). It should be easy to modify the Avisynth script to export only one view, then modify it again to export the other view. But note that you will obtain two video streams with no simple way to join then to create a SBS, TAB or Frame Sequential video. Unfortunately, I don't think that a tool exists to do that. It's certainly possible with Avisynth, but you will have to re-encode the video a second time.

Also, your modifications with Adobe will have to be exactly identical in the two views and respect the correct horizontal displacement to be compatible with the 3D depth. IMO, that will be very difficult!

If you really want to try that method, let me know and I'll explain how to modify the AVS script to create the two streams. The rest will be up to you!

xerno
29th April 2026, 09:49
Hi just wanted to say fsbs subtitles works when playing them on vlc, potplayer and mpc be without issues.

BD3D
15th May 2026, 09:19
I would like to encode my 3D BR collection with BD3D2MK3D with full HD resolution.
Which encoder and settings would you suggest to obtain the best compatibility and which players do support 3D?

r0lZ
15th May 2026, 10:13
BD3D2MK3D supports natively the two best encoders currently available : x264 and x265. The 3D SBS standard is of course the best option for the compatibility. It imposes Half-SBS or Half-TAB encoded in h264. But if you want to produce a Full-SBS (or FullgTAB) video, the standard is not respected anyway. Note that many 3D TVs (especially the first models) are unable to display Full-SBS (comparable to UHD in terms of buffer size and speed requirement).

The remaining question is the choice of the encoder. Since h264 is recommended, x264 is the best choice for compatibility. It is compatible with all 3D TVs, including the older models, as long as level 4.1 is used, but if it is able to encode in Full-SBS, that requires at least level 5, not compatible with most TVs. However, all Ultra-HD TVs support the h265 encoding. X265 is able to compress much more than x264 with an equivalent quality (but the encoding process is much slower). However take in mind that the UHD TVs are almost never able to display 3D content.

Currently, no 3D TVs are produced anymore, but there are alternatives such as video projectors, computers with a large screen and a good 3D video card, or 3D lenses. Honestly, I don't know that hardware very well, but I guess that recent solutions should accept Full-SBS and h265 without problem.

Note also that the complexity of the encoding (mainly controlled with the "speed" parameter) has also a slight influence on the compatibility. A complex (slow) encoding produces a video that is also more complex to decode. Therefore, a video encoded with a very slow speed option may be difficult to play with an old hardware, especially if it is equipped with old and slow processors.

In summary, the only choice for perfect compatibility is Half-SBS encoded with x264 at maximum level 4.1 and medium speed. In the other hand, the better quality is Full-SBS encoded with x265 at minimum level 5.0 (at placebo speed if you really want to compress very much). Unfortunately, it is impossible to combine the two options.

BD3D
15th May 2026, 10:47
Wow that was a quick and extensive answer.
Thanks a lot r0lZ.
I think I better stay with MakeMKV and an Rapsberry Pi 2 with an old KODI which support 3D.
Storage is not an issue nowadays and so I can be shure to have the best quality without encoding every 3D-BR.

smd9
20th May 2026, 20:16
Hi. I'm having an issue in running this program for the first time. I mounted the disc ISO, selected all my settings in the GUI and let it go. It finished doing its thing, then told me to run __ENCODE_3D_LAUNCHER.cmd. When I do that, however, I get an error message right away saying "Error: The type of file '00800_3D.264' could not be recognized." when trying to run MKVMerge. An tips on how I can fix this?

Here's some of the output I'm seeing in the command prompt window:

<path>\BD3D2MK3D\toolset\x264_x64.exe" --output-depth 8 --crf 16 --preset medium --sar 1:1 --range tv --colormatrix bt709 --frame-packing 3 --qpfile chapters_3D.qpfile --frames 129432 --fps 24000/1001 --output "00800_3D.264" "__ENCODE_3D_MOVIE.avs"
Encoding finished

<path>\BD3D2MK3D\toolset\mkvmerge.exe" @__MUX_3D_OPTIONS.json | "<path>\BD3D2MK3D\toolset\tee.exe" "00800_3D.mkvmerge.log"
mkvmerge v94.0 ('Initiate') 32-bit
Error: The type of file '00800_3D.264' could not be recognized.

r0lZ
20th May 2026, 22:25
Hum, not sure. I guess the encoding was not successfull, but why? What is the file size of 00800_3D.264?

You can try to disable the hardware acceleration. If you hane an Intel CPU, it can be the culprit. Also, verify if you have enough file size on your hard disc.

smd9
21st May 2026, 04:54
Hum, not sure. I guess the encoding was not successfull, but why? What is the file size of 00800_3D.264?

You can try to disable the hardware acceleration. If you hane an Intel CPU, it can be the culprit. Also, verify if you have enough file size on your hard disc.

00800_3D.264 is 0kb. There is another file in the folder called 00800.track_4113.264 that's 20GB.
I have plenty of space on the drive (over 200GB), so that shouldn't be an issue.
In any case, I disabled hardware acceleration in the decoder and it looks like that fixed it. Thanks!

r0lZ
21st May 2026, 08:46
In any case, I disabled hardware acceleration in the decoder and it looks like that fixed it. Thanks!
If you want to try again with the hardware acceleration enabled, try to update your Intel drivers. That might be sufficient, but without guarantee.

Hazmu
21st May 2026, 23:16
Welcome to the Doom9 forum, Hazmu, and thanks for your positive appreciation of BD3D2MK3D!

Sorry, it is not possible to export directly the two views as 2 independent streams. However, you can export as Frame Sequential (stereoscopy option in the last tab). It should be easy to modify the Avisynth script to export only one view, then modify it again to export the other view. But note that you will obtain two video streams with no simple way to join then to create a SBS, TAB or Frame Sequential video. Unfortunately, I don't think that a tool exists to do that. It's certainly possible with Avisynth, but you will have to re-encode the video a second time.

Also, your modifications with Adobe will have to be exactly identical in the two views and respect the correct horizontal displacement to be compatible with the 3D depth. IMO, that will be very difficult!

If you really want to try that method, let me know and I'll explain how to modify the AVS script to create the two streams. The rest will be up to you!

Sorry, forgot about this lmao
Yeah, if you can tell me how to modify it that would be great, thanks!

I wanna experiment to see if I can mask out the localized Spanish texts of the Spider-verse Bluray and add them to the 3D Bluray that only has English texts, so I plan to track the text boxes and keyframe what I have to and then reencode it back to MVC if possible

r0lZ
27th May 2026, 15:59
OK. Sorry for the late reply, the weather is too shiny here to spend much time on a computer !

So, as I wrote, begin by generating a project in frame sequential stereoscopy mode and with the x264 encoder at level 5.0. Since you will have to re-encode the video a second time, I suggest to use a very high encoding quality (a very low CRF value in the last tab).

When done, edit __ENCODE_3D_MOVIE.avs in a text editor. The interesting lines are this :

left = SelectEven(interleaved)
right = SelectOdd(interleaved)

# Hardcode subtitles
##left = VobSub(left, "subtitle_to_hardcode_left.sub")
##right = VobSub(right, "subtitle_to_hardcode_right.sub")
#left = SupTitle(left, "subtitle_to_hardcode_left.sup")
#right = SupTitle(right, "subtitle_to_hardcode_right.sup")

# Build Frame Sequential stream
Interleave(left, right)
AssumeFPS(48000/1001.0)

# Return the 3D clip.
Return(last)#.Info()

Note that the left and right lines can be inverted if the BD is encoded differently. Also, the lines below # Hardcode subtitles are commented out, because I have assumed that you don't need the subtitles within the video.

The lines to modify are below. Remove the # Build Frame Sequential stream section (in red) and replace the last line with Return(left)
Of course, to encode the right view, you should replace it with Return(right)
At this point, you have an avisynth script that can export one of the two views.

Edit also __ENCODE_3D.cmd.

echo Encoding started %date% %time%
@echo on

"D:\Tcl\work\BD3D2MK3D\toolset\x264_x64.exe" --output-depth 8 ^
--crf 5 --preset slow --level 5.0 --vbv-bufsize 168750 --vbv-maxrate 168750 ^
--sar 1:1 --range tv --colormatrix bt709 ^
--frame-packing 5 --qpfile chapters_3D.qpfile --frames 3592 --fps 48000/1001 ^
--output "00000_3D.264" "__ENCODE_3D_MOVIE.avs"
@echo off
echo Encoding finished %date% %time%

REM Optionnaly mux the video and demuxed streams to MKV.
REM Note: The mux is disabled if no streams are demuxed.
if exist "__MUX_3D.cmd" cmd /c "__MUX_3D.cmd"

REM Everything done: do the post-processing (Shutdown computer...)
if exist "__POSTPROCESS_3D.cmd" cmd /c "__POSTPROCESS_3D.cmd"
exit /B

Here again you should remove the red lines (the --frame-packing and --qpfile arguments, necessary only for frame-sequential output, and the whole section to mux the final MKV file.
You should also modify the arguments in bold:

--frames 3592 : Just divide the number of frames by 2. (In my example - a very short clip - you should replace 3592 with 1796.) Note that this argument is used by the encoder only to display the progress in % and the remaining time of the encoding. You can also simply remove --frames 3592 completely, but you will lose the progress feedback.

--fps 48000/1001 should be replaced with --fps 24000/1001 (It's the real frame rate.)

--output "00000_3D.264" should be replaced with the file name you wish to use for the view currently encoded (for example --output "left.264").

Now, you can encode the first view by launching __ENCODE_3D_LAUNCHER.cmd.
When done, edit again the two files to change the name of the view in the last line of the AVS script and the --output argument in the CMD from left to right. Encode again. That's all.

Note that it is theoretically possible to encode only the dependent view, and demux the main view from the original M2TS file. That will be faster, but I don't think it's a good idea, as the video quality of the two views will be slightly different, and that may introduce some problems in the final BD. If you want to try anyway, have a look in the first tab of BD3D2MK3D. The second stream, MVC, is the dependent view. It is usually the right-eye, but not always. You can encode only that view. To know what M2TS file contains the main view, use Tools -> Dependent view (MVC) file list. The M2TS file is the first one shown in the last line of the dialog. (It's usually the biggest file in the BD.) You can demux the 264 file from, say, H:\BDMV\STREAM\00000.m2ts with mkvtoolnix.

Now, you will have the big job to do: modify the two views, and re-create a working BD from the two modified video streams and other streams taken from the M2TS file of the main view. As I told you, I can't help you for this. Good luck !