mirror of https://github.com/mpv-player/mpv
sub: add --ass-style-override=force option
(The old "force" choice of that option is renamed to "force-default".) This allows overriding native ASS script subtitle styles with the style provided by the --sub-text-* options (like --sub-text-font etc.). This is disabled by default, and needs to be explicitly enabled with the --ass-style-override=force option and input property. This uses in fact exactly the same options (--sub-text-*) and semantics as the ones used to configure unstyled text subtitles. It's recommended to combine this with this in the mpv config file: ass-force-style="ScaledBorderAndShadow=1" # work around dumb libass behavior Also, adding a key binding to toggle this behavior should be added, because overriding can easily break: L cycle ass-style-override This would cycle override behavior on Shift+L and allows quickly disabling/enabling style overrides. Note: ASS should be considered a vector format rather than a subtitle format. There is no easy or reliable way to determine whether the style of a given subtitle event can be changed without destroying visuals or not. This patch relies on a simple heuristic, which often works and often breaks.
This commit is contained in:
parent
e82af029a9
commit
015399f696
|
@ -110,6 +110,10 @@ OPTIONS
|
|||
rendering of ASS/SSA subtitles. It can sometimes be useful to forcibly
|
||||
override the styling of ASS subtitles, but should be avoided in general.
|
||||
|
||||
.. note::
|
||||
|
||||
Try using ``--ass-style-override=force`` instead.
|
||||
|
||||
``--ass-force-style=<[Style.]Param=Value[,...]>``
|
||||
Override some style or script info parameters.
|
||||
|
||||
|
@ -158,18 +162,21 @@ OPTIONS
|
|||
|
||||
Using this option may lead to incorrect subtitle rendering.
|
||||
|
||||
``--ass-style-override=<yes|no|force>``
|
||||
``--ass-style-override=<yes|no|force|force-default>``
|
||||
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.
|
||||
:force: Like ``yes``, but also override the style named ``Default`` to
|
||||
make it look like the like text subtitle style implied by the
|
||||
:force-default: Like ``yes``, but also override the style named ``Default``
|
||||
to make it look like the like text subtitle style implied by the
|
||||
``--sub-text-...`` option. This won't always work, because the
|
||||
dialogue style doesn't necessary use this name, and it might break
|
||||
other advanced uses of the ASS format.
|
||||
:force: Try to force the font style as defined by the ``--sub-text-*``
|
||||
options. Requires a modified libass, can break rendering easily.
|
||||
Probably more reliable than ``force``.
|
||||
|
||||
``--ass-use-margins``
|
||||
Enables placing toptitles and subtitles in black borders when they are
|
||||
|
|
|
@ -427,7 +427,7 @@ const m_option_t mp_opts[] = {
|
|||
OPT_CHOICE("ass-shaper", ass_shaper, 0,
|
||||
({"simple", 0}, {"complex", 1})),
|
||||
OPT_CHOICE("ass-style-override", ass_style_override, 0,
|
||||
({"no", 0}, {"yes", 1}, {"force", 2})),
|
||||
({"no", 0}, {"yes", 1}, {"force-default", 2}, {"force", 3})),
|
||||
OPT_FLAG("osd-bar", osd_bar_visible, 0),
|
||||
OPT_FLOATRANGE("osd-bar-align-x", osd_bar_align_x, 0, -1.0, +1.0),
|
||||
OPT_FLOATRANGE("osd-bar-align-y", osd_bar_align_y, 0, -1.0, +1.0),
|
||||
|
|
|
@ -139,6 +139,7 @@ void mp_ass_configure(ASS_Renderer *priv, struct MPOpts *opts,
|
|||
float set_line_spacing = 0;
|
||||
float set_font_scale = 1;
|
||||
int set_hinting = 0;
|
||||
int set_force_override = 0;
|
||||
if (opts->ass_style_override) {
|
||||
set_use_margins = opts->ass_use_margins;
|
||||
#if LIBASS_VERSION >= 0x01010000
|
||||
|
@ -147,6 +148,7 @@ void mp_ass_configure(ASS_Renderer *priv, struct MPOpts *opts,
|
|||
set_line_spacing = opts->ass_line_spacing;
|
||||
set_font_scale = opts->sub_scale;
|
||||
set_hinting = opts->ass_hinting;
|
||||
set_force_override = opts->ass_style_override == 3;
|
||||
}
|
||||
|
||||
ass_set_use_margins(priv, set_use_margins);
|
||||
|
@ -155,6 +157,13 @@ void mp_ass_configure(ASS_Renderer *priv, struct MPOpts *opts,
|
|||
#endif
|
||||
#if LIBASS_VERSION >= 0x01000000
|
||||
ass_set_shaper(priv, opts->ass_shaper);
|
||||
#endif
|
||||
#if LIBASS_VERSION >= 0x01103000
|
||||
ass_set_selective_style_override_enabled(priv, set_force_override);
|
||||
ASS_Style style = {0};
|
||||
mp_ass_set_style(&style, 288, opts->sub_text_style);
|
||||
ass_set_selective_style_override(priv, &style);
|
||||
free(style.FontName);
|
||||
#endif
|
||||
ass_set_font_scale(priv, set_font_scale);
|
||||
ass_set_hinting(priv, set_hinting);
|
||||
|
|
Loading…
Reference in New Issue