From b47a58516af2c36e66c3987748b5b4a1275ed9e7 Mon Sep 17 00:00:00 2001 From: Dudemanguy Date: Wed, 6 Sep 2023 21:35:22 -0500 Subject: [PATCH] sub: add auto option to --sub-fix-timing Third try is the charm? I stupidly missed that this option already existed in my previous commits. Instead, add an auto value to it and enable it by default for sd_lavc but not sd_ass. On my limited samples, it seems to fix the gaps issue that can occur but without regressing some duration timings for sub_lavc subtitles. Well hopefully anyway. Fixes #12327. --- DOCS/interface-changes.rst | 1 + DOCS/man/options.rst | 5 +++-- options/options.c | 4 +++- options/options.h | 2 +- sub/sd_ass.c | 2 +- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/DOCS/interface-changes.rst b/DOCS/interface-changes.rst index 287d0e0227..a738685095 100644 --- a/DOCS/interface-changes.rst +++ b/DOCS/interface-changes.rst @@ -56,6 +56,7 @@ Interface changes - add `--video-crop` - add `video-params/crop-[w,h,x,y]` - remove `--tone-mapping-mode` + - add `auto` to `--sub-fix-timing` and make it the default --- mpv 0.36.0 --- - add `--target-contrast` - Target luminance value is now also applied when ICC profile is used. diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst index e7a746d587..b271ab4a62 100644 --- a/DOCS/man/options.rst +++ b/DOCS/man/options.rst @@ -2627,10 +2627,11 @@ Subtitles particular subtitles in mkv files) are always assumed to be UTF-8. -``--sub-fix-timing=`` +``--sub-fix-timing=`` Adjust subtitle timing is to remove minor gaps or overlaps between subtitles (if the difference is smaller than 210 ms, the gap or overlap - is removed). + is removed). The ``auto`` value enables this for non-text subtitles such + as PGS or DVD (default: ``auto``). ``--sub-forced-events-only=`` Enabling this displays only forced events within subtitle streams. Only diff --git a/options/options.c b/options/options.c index c3977136b4..35b89beaa5 100644 --- a/options/options.c +++ b/options/options.c @@ -267,7 +267,8 @@ const struct m_sub_options mp_subtitle_sub_opts = { {"stretch-dvd-subs", OPT_BOOL(stretch_dvd_subs)}, {"stretch-image-subs-to-screen", OPT_BOOL(stretch_image_subs)}, {"image-subs-video-resolution", OPT_BOOL(image_subs_video_res)}, - {"sub-fix-timing", OPT_BOOL(sub_fix_timing)}, + {"sub-fix-timing", OPT_CHOICE(sub_fix_timing, + {"auto", -1}, {"no", 0}, {"yes", 1})}, {"sub-pos", OPT_FLOAT(sub_pos), M_RANGE(0.0, 150.0)}, {"sub-gauss", OPT_FLOAT(sub_gauss), M_RANGE(0.0, 3.0)}, {"sub-gray", OPT_BOOL(sub_gray)}, @@ -306,6 +307,7 @@ const struct m_sub_options mp_subtitle_sub_opts = { .defaults = &(OPT_BASE_STRUCT){ .sub_visibility = true, .sec_sub_visibility = true, + .sub_fix_timing = -1, .sub_pos = 100, .sub_speed = 1.0, .ass_enabled = true, diff --git a/options/options.h b/options/options.h index 3250729b48..8c8ff28490 100644 --- a/options/options.h +++ b/options/options.h @@ -89,7 +89,7 @@ struct mp_subtitle_opts { bool stretch_dvd_subs; bool stretch_image_subs; bool image_subs_video_res; - bool sub_fix_timing; + int sub_fix_timing; bool sub_scale_by_window; bool sub_scale_with_window; bool ass_scale_with_window; diff --git a/sub/sd_ass.c b/sub/sd_ass.c index 516553f20b..281feacdb3 100644 --- a/sub/sd_ass.c +++ b/sub/sd_ass.c @@ -498,7 +498,7 @@ static long long find_timestamp(struct sd *sd, double pts) long long ts = llrint(pts * 1000); - if (!sd->opts->sub_fix_timing || sd->opts->ass_style_override == 0) + if (sd->opts->sub_fix_timing != 1 || sd->opts->ass_style_override == 0) return ts; // Try to fix small gaps and overlaps.