justdan96 / tsMuxer

tsMuxer is a transport stream muxer for remuxing/muxing elementary streams, EVO/VOB/MPG, MKV/MKA, MP4/MOV, TS, M2TS to TS to M2TS. Supported video codecs H.264/AVC, H.265/HEVC, VC-1, MPEG2. Supported audio codecs AAC, AC3 / E-AC3(DD+), DTS/ DTS-HD.
Apache License 2.0
863 stars 144 forks source link

SRT subtitles are not shown in Blu-Ray mode without --hdmv-descriptors #690

Closed DreckSoft closed 1 year ago

DreckSoft commented 1 year ago

This is likely related to #457 and #208

I'm trying to use a newer version of tsMuxeR as as drop-in replacement for the old versions in MultiAVCHD. Sometimes the old versions cause seeking issues. But the newer versions of tsMuxeR do not properly process SRT subtitles without --hdmv-descriptors. However, there is no way of changing the options set by MultiAVCHD.

Is there any way to provide compatibility with older versions without breaking the new stuff?

The GUI already forces --hdmv-descriptors when creating a Blu-Ray folder. Why not just assume --hdmv-descriptors when --blu-ray is set in a meta-file and provide an inverted option --no-hdmv-descriptors. This would ensure backwards compatibility.

That and a fix for #682 would really help MultiAVCHD and free BD creation in general.

jcdr428 commented 1 year ago

@DreckSoft as explained in issue #208, the --hdmv-descriptors option has been created to include the Dolby Vision DOVI descriptors which work in non-HDMV mode (i.e. ATSC, DVB...) only.

There is already an option "Generate HDMV compatible TS" in the General Tab, but it is greyed out with AVCHD because to my knowledge AVCHD is supposed to have HDMV descriptors.

PGS are a Blu-ray invention and are supposed to work with HDMV descriptors only: the PGS descriptor must include the "HDMV" registration descriptor. Can you please clarify why you would need PGS without HDMV descriptors ?

DreckSoft commented 1 year ago

I do not need PGS without HDMV descriptors. But multiAVCHD does not set the option and in earlier tsMuxeR versions it worked without those descriptors. multiAVCHD is no longer developed, so there is no way to change this.

In general I think defaults should never change so that they break something. If muxing has been changed so that PGS subtitles so not work without HDMV descriptors then they should be active by default to ensure compatibility.

The goal is to just replace tsMuxeR in multiAVCHD and still have working (and more standard compliant) results. multiAVCHD generates a META file itself and feeds it into tsMuxeR command line version, so defaults from the GUI won't be used.

I think a solution could be: Use HDMV descriptors if there are streams present that require them and the option "--no-hdmv-descriptors" has NOT been set. This way we have compatibility and still the possibility to disable them if someone needs it.

jcdr428 commented 1 year ago

Ok, so I could make the "Generate HDMV compatible TS" available in AVCHD mode. Would this fill your purpose ? I thought the AVCHD descriptors would be the same as Bluray, pity that AVCHD specs are not public.

Edit: Don't forget that there are many things (such as removing --no-hdmv-descriptors) that you can do in CLI mode. You can't always keep backwards compatibility when adding functions, and there have been many added since 10.6 (e.g. HEVC, UHD, Bluray V3, HDR10/+, DV, TrueHD...).

DreckSoft commented 1 year ago

Despite the name it actually muxes Blu-Rays. Strangely with V1 clpi/mpls and so on (should be V2) but it works (with the old tsMuxeR).

What I'm looking for is a BD player compatible output when I just replace the old 1.10.6 tsMuxeR with a recent version. That means that --hdmv-descriptors needs to be enabled by default at least in Blu-Ray mode (maybe also AVCHD, I haven't tried that). Otherwise the PGS subs in the resulting file won't work.

It is not possible to change multiAVCHD to include --hdmv-descriptors as it is closed source and abandoned. There's also no (free) replacement. That's also the reason I'm trying to use it for 4k/UHD BDs. And that's how I got to issue #682

jcdr428 commented 1 year ago

@DreckSoft can this issue be closed ?

DreckSoft commented 1 year ago

I think it's not fixed.

The easiest solution would be to make --hdmv-descriptors default and provide --no-hdmv-descriptors to explicitly disable it. This way the current version should be compatible to the old 1.10.6 release. As the EAC3 issue is fixed, it can likely used as a drop-in replacement for old software if the hdmv-descriptors are used automatically.

jcdr428 commented 1 year ago

The problem is that the hdmv descriptors are not compatible with the DOVI Dolby Vision descriptor (with HDMV the DV is flagged in the mpls/clpi).

Edit: as a compromise we could have hdmv-descriptor as default for .m2ts (as m2ts was specifically created for hdmv/bluray), but it should not be the default for .ts.

DreckSoft commented 1 year ago

That sounds fine.

jcdr428 commented 1 year ago

@DreckSoft cf. lines 2312/2313 of tsmuxerwindow.cpp:

    ui->checkBoxNewAudioPes->setChecked(!ui->radioButtonTS->isChecked());
    ui->checkBoxNewAudioPes->setEnabled(ui->radioButtonTS->isChecked() || ui->radioButtonM2TS->isChecked() || radioButtonAVCHD->isChecked());

--hdmv-descriptor is 'on' in all modes except TS; --hdmv-descriptor can be changed in TS, M2TS or AVCHD mode -it is greyed-out in Bluray or ISO mode.

DreckSoft commented 1 year ago

The current version does not compile due to some error with a radio button.

jcdr428 commented 1 year ago

Oups -fixed.

DreckSoft commented 1 year ago

Current nightly crashes as soon as I add a file to the GUI. Last working version is March 25th.

Hellboy00000 commented 1 year ago

Tested "Nightly build from 2023-04-01-02-06-56" and can confirm the problem.

Can't add any mkv. But work fine with m2ts and with Blu-ray playlist.

DreckSoft commented 1 year ago

The current build still has issues (see #699 ), so I could not test it as a drop-in replacement in MultiAVCHD.

DreckSoft commented 1 year ago

It seems you changed the GUI defaults. That won't work. MultiAVCHD greates a META file and runs the command line version.

jcdr428 commented 1 year ago

In the CLI you just have to add the --hdmv-descriptor option.

DreckSoft commented 1 year ago

That's not possible as it would require modifying MultiAVCHD.

Using newer versions as a drop-in replacement was the reason for opening the issue.

jcdr428 commented 1 year ago

Ok, I now understand your need. So the only solution I see is to cancel --hdmv-descriptors and add an option -no-hdmv-descriptors.

DreckSoft commented 1 year ago

Yes

jcdr428 commented 1 year ago

@DreckSoft can we close this issue ?

DreckSoft commented 1 year ago

We still need --hdmv-descriptor right? It's kinda a design decision. I would really like to use new versions as a drop in replacement for old one. That only works if we enable HDMV descriptors by default for BD/AVCHD and disable them on request with --no-hdmv-descriptor

I especially have MultiAVCHD in mind. The author has gone dark, source is unavailable so we have to make the best out of it.

jcdr428 commented 1 year ago

Currently, hdmv descriptors are default for all modes except for "TS muxing" mode where no-hdmv-descriptor is default when selected. What do we need to change ?

DreckSoft commented 1 year ago

Yes, it will be set as default in the GUI. But MultiAVCHD generates a META file and calls the CLI. So the CLI must assume --hdmv-descriptors is always set unless --no-hdmv-descriptors is set. This would retain compatibility for old versions.

jcdr428 commented 1 year ago

@DreckSoft please see tsMuxer.cpp: line 103: m_hdmvDescriptors = true; line 1337: else if (paramPair[0] == "--no-hdmv-descriptors") m_hdmvDescriptors = false;

So hdmv descriptors are default unless --no-hdmv-descriptors is set

DreckSoft commented 1 year ago

Oh, I missed that change. I'll retest. Thanks!

DreckSoft commented 1 year ago

Seems fine, thanks!