mirror of https://github.com/mpv-player/mpv
sub: add --ass-style-override option to disable style overrides
There are a number of options which modify ASS subtitle rendering. Most of these do things that can interfere with the styling done by subtitle scripts, resulting in incorrect rendering. Add the --ass-style-override option to make it easy to disable all overrides. This helps trouble- shooting, and makes it more practical to use the override features. (You can simply toggle the ass-style-override property at runtime, should one of the style override options break subtitle rendering at a certain point.) This mainly affects whether most --ass-* options are applied, as well as --sub-pos. Some things, like explicit style overrides loaded with --ass-force-style, can't be changed at runtime using the ass-style-override property.
This commit is contained in:
parent
2f6713bede
commit
c9df2c8bd8
|
@ -296,6 +296,7 @@ sub-forced-only x see ``--sub-forced-only``
|
|||
sub-scale x subtitle font size multiplicator
|
||||
ass-use-margins x see ``--ass-use-margins``
|
||||
ass-vsfilter-aspect-compat x see ``--ass-vsfilter-aspect-compat``
|
||||
ass-style-override x see ``--ass-style-override``
|
||||
tv-brightness
|
||||
tv-contrast
|
||||
tv-saturation
|
||||
|
|
|
@ -176,6 +176,14 @@
|
|||
rendering text subtitles. The syntax of the file is exactly like the ``[V4
|
||||
Styles]`` / ``[V4+ Styles]`` section of SSA/ASS.
|
||||
|
||||
--ass-style-override=<yes|no>
|
||||
Control whether user style overrides should be applied.
|
||||
|
||||
:yes: Apply all the ``--ass-*`` style override options. Changing the default
|
||||
for any of these options can lead to incorrect subtitle rendering.
|
||||
(Default.)
|
||||
:no: Render subtitles as forced by subtitle scripts.
|
||||
|
||||
--ass-top-margin=<value>
|
||||
Adds a black band at the top of the frame. The SSA/ASS renderer can place
|
||||
toptitles there (with ``--ass-use-margins``).
|
||||
|
|
|
@ -553,6 +553,8 @@ const m_option_t common_opts[] = {
|
|||
OPT_STRING("ass-border-color", ass_border_color, 0),
|
||||
OPT_STRING("ass-styles", ass_styles_file, 0),
|
||||
OPT_INTRANGE("ass-hinting", ass_hinting, 0, 0, 7),
|
||||
OPT_CHOICE("ass-style-override", ass_style_override, 0,
|
||||
({"no", 0}, {"yes", 1})),
|
||||
{NULL, NULL, 0, 0, 0, 0, NULL}
|
||||
};
|
||||
|
||||
|
|
|
@ -1477,6 +1477,7 @@ static const m_option_t mp_properties[] = {
|
|||
#ifdef CONFIG_ASS
|
||||
M_OPTION_PROPERTY_CUSTOM("ass-use-margins", property_sub_helper),
|
||||
M_OPTION_PROPERTY_CUSTOM("ass-vsfilter-aspect-compat", property_sub_helper),
|
||||
M_OPTION_PROPERTY_CUSTOM("ass-style-override", property_sub_helper),
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_TV
|
||||
|
@ -1576,6 +1577,7 @@ static struct property_osd_display {
|
|||
{ "sub-forced-only", _("Forced sub only") },
|
||||
{ "sub-scale", _("Sub Scale")},
|
||||
{ "ass-vsfilter-aspect-compat", _("Subtitle VSFilter aspect compat")},
|
||||
{ "ass-style-override", _("ASS subtitle style override")},
|
||||
#ifdef CONFIG_TV
|
||||
{ "tv-brightness", _("Brightness"), .osd_progbar = OSD_BRIGHTNESS },
|
||||
{ "tv-hue", _("Hue"), .osd_progbar = OSD_HUE},
|
||||
|
|
|
@ -54,6 +54,7 @@ void set_default_mplayer_options(struct MPOpts *opts)
|
|||
#endif
|
||||
.ass_font_scale = 1,
|
||||
.ass_vsfilter_aspect_compat = 1,
|
||||
.ass_style_override = 1,
|
||||
.use_embedded_fonts = 1,
|
||||
|
||||
.lavc_param = {
|
||||
|
|
|
@ -3739,7 +3739,8 @@ static void play_current_file(struct MPContext *mpctx)
|
|||
}
|
||||
|
||||
#ifdef CONFIG_ASS
|
||||
ass_set_style_overrides(mpctx->ass_library, opts->ass_force_style_list);
|
||||
if (opts->ass_style_override)
|
||||
ass_set_style_overrides(mpctx->ass_library, opts->ass_force_style_list);
|
||||
#endif
|
||||
if (mpctx->video_out && mpctx->video_out->config_ok)
|
||||
vo_control(mpctx->video_out, VOCTRL_RESUME, NULL);
|
||||
|
|
|
@ -116,6 +116,7 @@ typedef struct MPOpts {
|
|||
char *ass_color;
|
||||
char *ass_border_color;
|
||||
char *ass_styles_file;
|
||||
int ass_style_override;
|
||||
int ass_hinting;
|
||||
struct lavc_param {
|
||||
int workaround_bugs;
|
||||
|
|
38
sub/ass_mp.c
38
sub/ass_mp.c
|
@ -47,7 +47,7 @@ ASS_Track *mp_ass_default_track(ASS_Library *library, struct MPOpts *opts)
|
|||
track->PlayResY = 288;
|
||||
track->WrapStyle = 0;
|
||||
|
||||
if (opts->ass_styles_file)
|
||||
if (opts->ass_styles_file && opts->ass_style_override)
|
||||
ass_read_styles(track, opts->ass_styles_file, sub_cp);
|
||||
|
||||
if (track->n_styles == 0) {
|
||||
|
@ -95,7 +95,9 @@ ASS_Track *mp_ass_default_track(ASS_Library *library, struct MPOpts *opts)
|
|||
style->ScaleY = 1.;
|
||||
}
|
||||
|
||||
ass_process_force_style(track);
|
||||
if (opts->ass_style_override)
|
||||
ass_process_force_style(track);
|
||||
|
||||
return track;
|
||||
}
|
||||
|
||||
|
@ -228,20 +230,32 @@ ASS_Track *mp_ass_read_stream(ASS_Library *library, const char *fname,
|
|||
void mp_ass_configure(ASS_Renderer *priv, struct MPOpts *opts,
|
||||
struct mp_eosd_res *dim, bool unscaled)
|
||||
{
|
||||
int hinting;
|
||||
ass_set_frame_size(priv, dim->w, dim->h);
|
||||
ass_set_margins(priv, dim->mt, dim->mb, dim->ml, dim->mr);
|
||||
ass_set_use_margins(priv, opts->ass_use_margins);
|
||||
|
||||
int set_use_margins = 0;
|
||||
int set_sub_pos = 0;
|
||||
float set_line_spacing = 0;
|
||||
float set_font_scale = 1;
|
||||
int set_hinting = 0;
|
||||
if (opts->ass_style_override) {
|
||||
set_use_margins = opts->ass_use_margins;
|
||||
set_sub_pos = 100 - sub_pos;
|
||||
set_line_spacing = opts->ass_line_spacing;
|
||||
set_font_scale = opts->ass_font_scale;
|
||||
if (!unscaled && (opts->ass_hinting & 4))
|
||||
set_hinting = 0;
|
||||
else
|
||||
set_hinting = opts->ass_hinting & 3;
|
||||
}
|
||||
|
||||
ass_set_use_margins(priv, set_use_margins);
|
||||
#if LIBASS_VERSION >= 0x01010000
|
||||
ass_set_line_position(priv, 100 - sub_pos);
|
||||
ass_set_line_position(priv, set_sub_pos);
|
||||
#endif
|
||||
ass_set_font_scale(priv, opts->ass_font_scale);
|
||||
if (!unscaled && (opts->ass_hinting & 4))
|
||||
hinting = 0;
|
||||
else
|
||||
hinting = opts->ass_hinting & 3;
|
||||
ass_set_hinting(priv, hinting);
|
||||
ass_set_line_spacing(priv, opts->ass_line_spacing);
|
||||
ass_set_font_scale(priv, set_font_scale);
|
||||
ass_set_hinting(priv, set_hinting);
|
||||
ass_set_line_spacing(priv, set_line_spacing);
|
||||
}
|
||||
|
||||
void mp_ass_configure_fonts(ASS_Renderer *priv)
|
||||
|
|
|
@ -135,7 +135,9 @@ static void get_bitmaps(struct sh_sub *sh, struct osd_state *osd,
|
|||
return;
|
||||
|
||||
double scale = osd->normal_scale;
|
||||
if (ctx->vsfilter_aspect && opts->ass_vsfilter_aspect_compat)
|
||||
bool use_vs_aspect = opts->ass_style_override
|
||||
? opts->ass_vsfilter_aspect_compat : 1;
|
||||
if (ctx->vsfilter_aspect && use_vs_aspect)
|
||||
scale = osd->vsfilter_scale;
|
||||
ASS_Renderer *renderer = osd->ass_renderer;
|
||||
mp_ass_configure(renderer, opts, &osd->dim, osd->unscaled);
|
||||
|
|
Loading…
Reference in New Issue