cbusillo / BD_to_AVP

3D Blu-ray to Apple Vision Pro converter
GNU General Public License v3.0
100 stars 5 forks source link

Ripping Direct from BD error #35

Closed mikemonello closed 4 months ago

mikemonello commented 4 months ago

It's entirely possible this error is a result of the cheap BD drive I am using, but my first attempt at ripping directly from disk resulted in the following error: (pic below)

🟢 Processing started at 06:30:24 PM on 2024-06-30 with version 0.2.128. 🟢 Processing None

Running Get disc and MVC video properties Finished Get disc and MVC video properties in 21 seconds

Using temporary folder: /Volumes/Movespeed2TB_SSD/BD2AVP Output/It Came from Outer Space/tmp

Custom MakeMKV profile created at /Volumes/Movespeed2TB_SSD/BD2AVP Output/It Came from Outer Space/custom_profile.mmcp.xml

Running Rip disc to MKV file. Finished Rip disc to MKV file. in 7 minutes

Detecting crop parameters...

Running ffmpeg to extract video, audio, and subtitles from MKV FFmpeg Error:

STDOUT:

STDERR:

ffmpeg version 7.0.1 Copyright (c) 2000-2024 the FFmpeg developers built with Apple clang version 15.0.0 (clang-1500.3.9.4) configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/7.0.1 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags='-Wl,-ld_classic' --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libaribb24 --enable-libbluray --enable-libdav1d --enable-libharfbuzz --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox --enable-audiotoolbox --enable-neon libavutil 59. 8.100 / 59. 8.100 libavcodec 61. 3.100 / 61. 3.100 libavformat 61. 1.100 / 61. 1.100 libavdevice 61. 1.100 / 61. 1.100 libavfilter 10. 1.100 / 10. 1.100 libswscale 8. 1.100 / 8. 1.100 libswresample 5. 1.100 / 5. 1.100 libpostproc 58. 1.100 / 58. 1.100 Input #0, matroska,webm, from '/Volumes/Movespeed2TB_SSD/BD2AVP Output/It Came from Outer Space/It Came from Outer Space_t07.mkv': Metadata: title : It Came from Outer Space encoder : libmakemkv v1.17.7 (1.3.10/1.5.2) darwin(arm64-release) creation_time : 2024-06-30T22:31:06.000000Z Duration: 02:00:07.20, start: 0.000000, bitrate: 37 kb/s Stream #0:0(eng): Video: h264 (High), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn Metadata: BPS-eng : 36035 DURATION-eng : 02:00:07.200000000 NUMBER_OF_FRAMES-eng: 172800 NUMBER_OF_BYTES-eng: 32464802 SOURCE_ID-eng : 001011 _STATISTICS_WRITING_APP-eng: MakeMKV v1.17.7 darwin(arm64-release) _STATISTICS_WRITING_DATE_UTC-eng: 2024-06-30 22:31:06 _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES SOURCE_ID Stream map '0:a:0' matches no streams. To ignore this, add a trailing '?' to the map. Failed to set value '0:a:0' for option 'map': Invalid argument Error parsing options for output file file:/Volumes/Movespeed2TB_SSD/BD2AVP Output/It Came from Outer Space/It Came from Outer Space_audio_PCM.mov. Error opening output files: Invalid argument

Finished ffmpeg to extract video, audio, and subtitles from MKV in a moment


Screenshot 2024-06-30 at 6 49 30 PM
cbusillo commented 4 months ago

That is showing no audio tracks, can you check the mkv?

mikemonello commented 4 months ago

Ok, keep in mind I have a ton of variables here, but here is what worked. Note this is all done on my M1. Rip BD to MKV3D using MakeMKV: As the 3D version was considered an "extra" on this particular release, I had to find it and select/deselect tracks to rip an MKV that contained only the subs and languages I want (English)

Convert MKV to Spatial using 0.2.128: Select "Continue Processing on Error." Select "Remove Extra Languages" out of habit, lol Resulted in perfect spatial files, really fast.

I'm now attempting to rip The Lego Movie directly from my BD using 0.2.128, I'll report back on how it goes.

mikemonello commented 4 months ago

The Lego movie ripped flawlessly direct from BD. This is my first successful rip directly from the BD, and it did it surprisingly fast given the slow speed of the BD player.

The difference is that the Lego 3D BD was just the 3D feature on the disk (part of a multi-disk set, while It Came From Outer Space and Creature from the Black Lagoon was loaded with extras and the 3D movie was an "extra" rather than an option for the main feature. Both discs were released by Universal. For those, I had to rip from MakeMKV first, carefully selecting the correct tracks to rip.

cbusillo commented 4 months ago

Thats odd. I wouldn't expect the 3D to be 'extra.' As far as I understand, the 3D video track should always play fine as 2D. Send me an ISO with a non 3D main playlist and I will see if there is a better way to handle these. Currently it should rip all the playlists in to mkvs then keep the biggest one. I would have expected this to be the 3D playlist.

cbusillo commented 4 months ago

It turns out I am using the longest duration

    main_feature_index = 0

    for match in title_info_pattern.finditer(output):
        title_index = int(match.group("index"))
        h, m, s = map(int, match.group("duration").split(":"))
        duration_seconds = h * 3600 + m * 60 + s

        if duration_seconds > longest_duration:
            longest_duration = duration_seconds
            main_feature_index = title_index

    disc_info.main_title_number = main_feature_index
cbusillo commented 4 months ago

Instead we can try this:

    mvc_titles = get_mvc_title_numbers_and_durations(output)
    main_feature_index = get_longest_mvc_title(mvc_titles)

    disc_info.main_title_number = main_feature_index

    return disc_info

def get_mvc_title_numbers_and_durations(output: str) -> dict:
    mvc_titles = {}
    for line in output.splitlines():
        if "Mpeg4-MVC-3D" in line:
            title_number_match = re.search(r"TINFO:(\d+),", line)
            duration_match = re.search(r"TINFO:\d+,9,0,\"(\d+:\d+:\d+)\"", output)
            if title_number_match and duration_match:
                title_number = int(title_number_match.group(1))
                duration = duration_match.group(1)
                mvc_titles[title_number] = duration
    return mvc_titles

def get_longest_mvc_title(mvc_titles: dict) -> int:
    longest_duration = 0
    longest_title = 0
    for title, duration in mvc_titles.items():
        h, m, s = map(int, duration.split(":"))
        total_seconds = h * 3600 + m * 60 + s
        if total_seconds > longest_duration:
            longest_duration = total_seconds
            longest_title = title
    return longest_title
cbusillo commented 4 months ago

@mikemonello if you turn on output commands, you will see which title it is ripping to mkv.

Custom MakeMKV profile created at /Users/cbusillo/TEMP/FaF/custom_profile.mmcp.xml

Running command:
/opt/homebrew/bin/makemkvcon --profile=/Users/cbusillo/TEMP/FaF/custom_profile.mmcp.xml mkv iso:/Users/cbusillo/TEMP/Tester.iso 0 /Users/cbusillo/TEMP/FaF

Running Rip disc to MKV file. 
Finished Rip disc to MKV file. in 2 seconds
cbusillo commented 4 months ago

I pushed a new prerelease if you would like to try it.

mikemonello commented 4 months ago

I will turn on Output Commands from now on, thanks!

cbusillo commented 4 months ago

131 might help with this. I tuned up the title detection to look for the longest title with MVC video.