cbusillo/BD_to_AVP

Ripping Direct from BD error

Closed this issue ยท 10 comments

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

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

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.

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.

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.

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

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

@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

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

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

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