mirror of https://github.com/mpv-player/mpv
sub: mess with styling defaults, change --ass-use-margins behavior
Now --ass-use-margins doesn't apply to normal subtitles anymore. This is probably the inverse from the mpv behavior users expected so far, and thus a breaking change, so rename the option, that the user at least has a chance to lookup the option and decide whether the new behavior is wanted or not. The basic idea here is: - plain text subtitles should have a certain useful defalt behavior, like actually using margins - ASS subtitles should never be broken by default - ASS subtitles should look and behave like plaintext subtitles if the --ass-style-override=force option is used This also subtly changes --sub-scale-with-window and adds the --ass- scale-with-window option. Since this one isn't so important, don't bother with compatibility.
This commit is contained in:
parent
b63503db04
commit
2308b3a2a6
|
@ -1381,8 +1381,11 @@ Property list
|
||||||
``sub-scale`` (RW)
|
``sub-scale`` (RW)
|
||||||
Subtitle font size multiplier.
|
Subtitle font size multiplier.
|
||||||
|
|
||||||
``ass-use-margins`` (RW)
|
``ass-force-margins`` (RW)
|
||||||
See ``--ass-use-margins``.
|
See ``--ass-force-margins``.
|
||||||
|
|
||||||
|
``sub-use-margins`` (RW)
|
||||||
|
See ``--sub-use-margins``.
|
||||||
|
|
||||||
``ass-vsfilter-aspect-compat`` (RW)
|
``ass-vsfilter-aspect-compat`` (RW)
|
||||||
See ``--ass-vsfilter-aspect-compat``.
|
See ``--ass-vsfilter-aspect-compat``.
|
||||||
|
|
|
@ -438,7 +438,8 @@ Program Behavior
|
||||||
Enable the youtube-dl hook-script. It will look at the input URL, and will
|
Enable the youtube-dl hook-script. It will look at the input URL, and will
|
||||||
play the video located on the website. This works with many streaming sites,
|
play the video located on the website. This works with many streaming sites,
|
||||||
not just the one that the script is named after. This requires a recent
|
not just the one that the script is named after. This requires a recent
|
||||||
version of youtube-dl to be installed on the system. (Enabled by default.)
|
version of youtube-dl to be installed on the system. (Enabled by default,
|
||||||
|
except when the client API / libmpv is used.)
|
||||||
|
|
||||||
If the script can't do anything with an URL, it will do nothing.
|
If the script can't do anything with an URL, it will do nothing.
|
||||||
|
|
||||||
|
@ -1155,13 +1156,22 @@ Subtitles
|
||||||
doesn't covert the window fully, e.g. because screen aspect and window
|
doesn't covert the window fully, e.g. because screen aspect and window
|
||||||
aspect mismatch (and the player adds black bars).
|
aspect mismatch (and the player adds black bars).
|
||||||
|
|
||||||
|
Default: yes.
|
||||||
|
|
||||||
This option is misnamed. The difference to the confusingly similar sounding
|
This option is misnamed. The difference to the confusingly similar sounding
|
||||||
option ``--sub-scale-by-window`` is that ``--sub-scale-with-window`` still
|
option ``--sub-scale-by-window`` is that ``--sub-scale-with-window`` still
|
||||||
scales with the approximate window size, while the other option disables
|
scales with the approximate window size, while the other option disables
|
||||||
this scaling.
|
this scaling.
|
||||||
|
|
||||||
|
Affects plain text subtitles only (or ASS if ``--ass-style-override`` is
|
||||||
|
set high enough).
|
||||||
|
|
||||||
|
``--ass-scale-with-window=<yes|no>``
|
||||||
|
Like ``--sub-scale-with-window``, but affects subtitles in ASS format only.
|
||||||
Like ``--sub-scale``, this can break ASS subtitles.
|
Like ``--sub-scale``, this can break ASS subtitles.
|
||||||
|
|
||||||
|
Default: no.
|
||||||
|
|
||||||
``--embeddedfonts``, ``--no-embeddedfonts``
|
``--embeddedfonts``, ``--no-embeddedfonts``
|
||||||
Use fonts embedded in Matroska container files and ASS scripts (default:
|
Use fonts embedded in Matroska container files and ASS scripts (default:
|
||||||
enabled). These fonts can be used for SSA/ASS subtitle rendering.
|
enabled). These fonts can be used for SSA/ASS subtitle rendering.
|
||||||
|
@ -1245,9 +1255,21 @@ Subtitles
|
||||||
options. Requires a modified libass, can break rendering easily.
|
options. Requires a modified libass, can break rendering easily.
|
||||||
Probably more reliable than ``force``.
|
Probably more reliable than ``force``.
|
||||||
|
|
||||||
``--ass-use-margins``
|
``--ass-force-margins``
|
||||||
Enables placing toptitles and subtitles in black borders when they are
|
Enables placing toptitles and subtitles in black borders when they are
|
||||||
available.
|
available, if the subtitles are in the ASS format.
|
||||||
|
|
||||||
|
Default: no.
|
||||||
|
|
||||||
|
``--sub-use-margins``
|
||||||
|
Enables placing toptitles and subtitles in black borders when they are
|
||||||
|
available, if the subtitles are in a plain text format (or ASS if
|
||||||
|
``--ass-style-override`` is set high enough).
|
||||||
|
|
||||||
|
Default: yes.
|
||||||
|
|
||||||
|
Renamed from ``--ass-use-margins``. To place ASS subtitles in the borders
|
||||||
|
too (like the old option did), also add ``--ass-force-margins``.
|
||||||
|
|
||||||
``--ass-vsfilter-aspect-compat=<yes|no>``
|
``--ass-vsfilter-aspect-compat=<yes|no>``
|
||||||
Stretch SSA/ASS subtitles when playing anamorphic videos for compatibility
|
Stretch SSA/ASS subtitles when playing anamorphic videos for compatibility
|
||||||
|
|
|
@ -445,9 +445,9 @@ Available filters are:
|
||||||
|
|
||||||
``<bottom-margin>``
|
``<bottom-margin>``
|
||||||
Adds a black band at the bottom of the frame. The SSA/ASS renderer can
|
Adds a black band at the bottom of the frame. The SSA/ASS renderer can
|
||||||
place subtitles there (with ``--ass-use-margins``).
|
place subtitles there (with ``--sub-use-margins``).
|
||||||
``<top-margin>``
|
``<top-margin>``
|
||||||
Black band on the top for toptitles (with ``--ass-use-margins``).
|
Black band on the top for toptitles (with ``--sub-use-margins``).
|
||||||
|
|
||||||
.. admonition:: Examples
|
.. admonition:: Examples
|
||||||
|
|
||||||
|
|
|
@ -337,7 +337,8 @@ const m_option_t mp_opts[] = {
|
||||||
OPT_FLAG("sub-ass", ass_enabled, 0),
|
OPT_FLAG("sub-ass", ass_enabled, 0),
|
||||||
OPT_FLOATRANGE("sub-scale", sub_scale, 0, 0, 100),
|
OPT_FLOATRANGE("sub-scale", sub_scale, 0, 0, 100),
|
||||||
OPT_FLOATRANGE("ass-line-spacing", ass_line_spacing, 0, -1000, 1000),
|
OPT_FLOATRANGE("ass-line-spacing", ass_line_spacing, 0, -1000, 1000),
|
||||||
OPT_FLAG("ass-use-margins", ass_use_margins, 0),
|
OPT_FLAG("sub-use-margins", sub_use_margins, 0),
|
||||||
|
OPT_FLAG("ass-force-margins", ass_use_margins, 0),
|
||||||
OPT_FLAG("ass-vsfilter-aspect-compat", ass_vsfilter_aspect_compat, 0),
|
OPT_FLAG("ass-vsfilter-aspect-compat", ass_vsfilter_aspect_compat, 0),
|
||||||
OPT_CHOICE("ass-vsfilter-color-compat", ass_vsfilter_color_compat, 0,
|
OPT_CHOICE("ass-vsfilter-color-compat", ass_vsfilter_color_compat, 0,
|
||||||
({"no", 0}, {"basic", 1}, {"full", 2}, {"force-601", 3})),
|
({"no", 0}, {"basic", 1}, {"full", 2}, {"force-601", 3})),
|
||||||
|
@ -353,6 +354,7 @@ const m_option_t mp_opts[] = {
|
||||||
({"no", 0}, {"yes", 1}, {"force", 3}, {"signfs", 4})),
|
({"no", 0}, {"yes", 1}, {"force", 3}, {"signfs", 4})),
|
||||||
OPT_FLAG("sub-scale-by-window", sub_scale_by_window, 0),
|
OPT_FLAG("sub-scale-by-window", sub_scale_by_window, 0),
|
||||||
OPT_FLAG("sub-scale-with-window", sub_scale_with_window, 0),
|
OPT_FLAG("sub-scale-with-window", sub_scale_with_window, 0),
|
||||||
|
OPT_FLAG("ass-scale-with-window", ass_scale_with_window, 0),
|
||||||
OPT_FLAG("osd-bar", osd_bar_visible, 0),
|
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-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),
|
OPT_FLOATRANGE("osd-bar-align-y", osd_bar_align_y, 0, -1.0, +1.0),
|
||||||
|
@ -473,8 +475,6 @@ const m_option_t mp_opts[] = {
|
||||||
OPT_FLAG("keepaspect", vo.keepaspect, 0),
|
OPT_FLAG("keepaspect", vo.keepaspect, 0),
|
||||||
OPT_FLAG("keepaspect-window", vo.keepaspect_window, 0),
|
OPT_FLAG("keepaspect-window", vo.keepaspect_window, 0),
|
||||||
|
|
||||||
//---------------------- mplayer-only options ------------------------
|
|
||||||
|
|
||||||
OPT_FLAG("use-filedir-conf", use_filedir_conf, 0),
|
OPT_FLAG("use-filedir-conf", use_filedir_conf, 0),
|
||||||
OPT_CHOICE("osd-level", osd_level, 0,
|
OPT_CHOICE("osd-level", osd_level, 0,
|
||||||
({"0", 0}, {"1", 1}, {"2", 2}, {"3", 3})),
|
({"0", 0}, {"1", 1}, {"2", 2}, {"3", 3})),
|
||||||
|
@ -658,6 +658,7 @@ const m_option_t mp_opts[] = {
|
||||||
OPT_REMOVED("fixed-vo", "--fixed-vo=yes is now the default"),
|
OPT_REMOVED("fixed-vo", "--fixed-vo=yes is now the default"),
|
||||||
OPT_REPLACED("mkv-subtitle-preroll", "demuxer-mkv-subtitle-preroll"),
|
OPT_REPLACED("mkv-subtitle-preroll", "demuxer-mkv-subtitle-preroll"),
|
||||||
OPT_REPLACED("dtshd", "ad-spdif-dtshd"),
|
OPT_REPLACED("dtshd", "ad-spdif-dtshd"),
|
||||||
|
OPT_REPLACED("ass-use-margins", "sub-use-margins"),
|
||||||
|
|
||||||
{0}
|
{0}
|
||||||
};
|
};
|
||||||
|
@ -706,6 +707,10 @@ const struct MPOpts mp_default_opts = {
|
||||||
.osd_scale = 1,
|
.osd_scale = 1,
|
||||||
.osd_scale_by_window = 1,
|
.osd_scale_by_window = 1,
|
||||||
.sub_scale_by_window = 1,
|
.sub_scale_by_window = 1,
|
||||||
|
.ass_use_margins = 0,
|
||||||
|
.sub_use_margins = 1,
|
||||||
|
.ass_scale_with_window = 0,
|
||||||
|
.sub_scale_with_window = 1,
|
||||||
.use_text_osd = 1,
|
.use_text_osd = 1,
|
||||||
#if HAVE_LUA
|
#if HAVE_LUA
|
||||||
.lua_load_osc = 1,
|
.lua_load_osc = 1,
|
||||||
|
|
|
@ -241,6 +241,7 @@ typedef struct MPOpts {
|
||||||
int osd_scale_by_window;
|
int osd_scale_by_window;
|
||||||
int sub_scale_by_window;
|
int sub_scale_by_window;
|
||||||
int sub_scale_with_window;
|
int sub_scale_with_window;
|
||||||
|
int ass_scale_with_window;
|
||||||
struct osd_style_opts *osd_style;
|
struct osd_style_opts *osd_style;
|
||||||
struct osd_style_opts *sub_text_style;
|
struct osd_style_opts *sub_text_style;
|
||||||
float sub_scale;
|
float sub_scale;
|
||||||
|
@ -249,6 +250,7 @@ typedef struct MPOpts {
|
||||||
int ass_enabled;
|
int ass_enabled;
|
||||||
float ass_line_spacing;
|
float ass_line_spacing;
|
||||||
int ass_use_margins;
|
int ass_use_margins;
|
||||||
|
int sub_use_margins;
|
||||||
int ass_vsfilter_aspect_compat;
|
int ass_vsfilter_aspect_compat;
|
||||||
int ass_vsfilter_color_compat;
|
int ass_vsfilter_color_compat;
|
||||||
int ass_vsfilter_blur_compat;
|
int ass_vsfilter_blur_compat;
|
||||||
|
|
|
@ -3448,7 +3448,8 @@ static const struct m_property mp_properties[] = {
|
||||||
{"sub-visibility", property_osd_helper},
|
{"sub-visibility", property_osd_helper},
|
||||||
{"sub-forced-only", property_osd_helper},
|
{"sub-forced-only", property_osd_helper},
|
||||||
{"sub-scale", property_osd_helper},
|
{"sub-scale", property_osd_helper},
|
||||||
{"ass-use-margins", property_osd_helper},
|
{"sub-use-margins", property_osd_helper},
|
||||||
|
{"ass-force-margins", property_osd_helper},
|
||||||
{"ass-vsfilter-aspect-compat", property_osd_helper},
|
{"ass-vsfilter-aspect-compat", property_osd_helper},
|
||||||
{"ass-style-override", property_osd_helper},
|
{"ass-style-override", property_osd_helper},
|
||||||
|
|
||||||
|
|
|
@ -243,7 +243,8 @@ static const char *const backup_properties[] = {
|
||||||
"options/sub-pos",
|
"options/sub-pos",
|
||||||
"options/sub-visibility",
|
"options/sub-visibility",
|
||||||
"options/sub-scale",
|
"options/sub-scale",
|
||||||
"options/ass-use-margins",
|
"options/sub-use-margins",
|
||||||
|
"options/ass-force-margins",
|
||||||
"options/ass-vsfilter-aspect-compat",
|
"options/ass-vsfilter-aspect-compat",
|
||||||
"options/ass-style-override",
|
"options/ass-style-override",
|
||||||
"options/ab-loop-a",
|
"options/ab-loop-a",
|
||||||
|
|
35
sub/ass_mp.c
35
sub/ass_mp.c
|
@ -126,34 +126,43 @@ ASS_Track *mp_ass_default_track(ASS_Library *library, struct MPOpts *opts)
|
||||||
return track;
|
return track;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mp_ass_configure(ASS_Renderer *priv, struct MPOpts *opts,
|
void mp_ass_configure(ASS_Renderer *priv, struct MPOpts *opts, bool is_ass,
|
||||||
struct mp_osd_res *dim)
|
struct mp_osd_res *dim)
|
||||||
{
|
{
|
||||||
ass_set_frame_size(priv, dim->w, dim->h);
|
ass_set_frame_size(priv, dim->w, dim->h);
|
||||||
ass_set_margins(priv, dim->mt, dim->mb, dim->ml, dim->mr);
|
ass_set_margins(priv, dim->mt, dim->mb, dim->ml, dim->mr);
|
||||||
|
|
||||||
int set_use_margins = 0;
|
bool set_use_margins = false;
|
||||||
int set_sub_pos = 0;
|
int set_sub_pos = 0;
|
||||||
float set_line_spacing = 0;
|
float set_line_spacing = 0;
|
||||||
float set_font_scale = 1;
|
float set_font_scale = 1;
|
||||||
int set_hinting = 0;
|
int set_hinting = 0;
|
||||||
if (opts->ass_style_override) {
|
bool set_scale_with_window = false;
|
||||||
|
bool set_scale_by_window = true;
|
||||||
|
// With forced overrides, apply the --sub-* specific options
|
||||||
|
if (!is_ass || opts->ass_style_override == 3) {
|
||||||
|
set_scale_with_window = opts->sub_scale_with_window;
|
||||||
|
set_use_margins = opts->sub_use_margins;
|
||||||
|
set_scale_by_window = opts->sub_scale_by_window;
|
||||||
|
} else {
|
||||||
|
set_scale_with_window = opts->ass_scale_with_window;
|
||||||
set_use_margins = opts->ass_use_margins;
|
set_use_margins = opts->ass_use_margins;
|
||||||
|
}
|
||||||
|
if (!is_ass || opts->ass_style_override) {
|
||||||
set_sub_pos = 100 - opts->sub_pos;
|
set_sub_pos = 100 - opts->sub_pos;
|
||||||
set_line_spacing = opts->ass_line_spacing;
|
set_line_spacing = opts->ass_line_spacing;
|
||||||
set_hinting = opts->ass_hinting;
|
set_hinting = opts->ass_hinting;
|
||||||
set_font_scale = opts->sub_scale;
|
set_font_scale = opts->sub_scale;
|
||||||
if (opts->sub_scale_with_window) {
|
|
||||||
int vidh = dim->h - (dim->mt + dim->mb);
|
|
||||||
set_font_scale *= dim->h / (float)MPMAX(vidh, 1);
|
|
||||||
}
|
|
||||||
if (!opts->sub_scale_by_window) {
|
|
||||||
double factor = dim->h / 720.0;
|
|
||||||
if (factor != 0.0)
|
|
||||||
set_font_scale /= factor;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
if (set_scale_with_window) {
|
||||||
|
int vidh = dim->h - (dim->mt + dim->mb);
|
||||||
|
set_font_scale *= dim->h / (float)MPMAX(vidh, 1);
|
||||||
|
}
|
||||||
|
if (!set_scale_by_window) {
|
||||||
|
double factor = dim->h / 720.0;
|
||||||
|
if (factor != 0.0)
|
||||||
|
set_font_scale /= factor;
|
||||||
|
}
|
||||||
ass_set_use_margins(priv, set_use_margins);
|
ass_set_use_margins(priv, set_use_margins);
|
||||||
#if LIBASS_VERSION >= 0x01010000
|
#if LIBASS_VERSION >= 0x01010000
|
||||||
ass_set_line_position(priv, set_sub_pos);
|
ass_set_line_position(priv, set_sub_pos);
|
||||||
|
|
|
@ -53,7 +53,7 @@ void mp_ass_add_default_styles(ASS_Track *track, struct MPOpts *opts);
|
||||||
ASS_Track *mp_ass_default_track(ASS_Library *library, struct MPOpts *opts);
|
ASS_Track *mp_ass_default_track(ASS_Library *library, struct MPOpts *opts);
|
||||||
|
|
||||||
struct MPOpts;
|
struct MPOpts;
|
||||||
void mp_ass_configure(ASS_Renderer *priv, struct MPOpts *opts,
|
void mp_ass_configure(ASS_Renderer *priv, struct MPOpts *opts, bool is_ass,
|
||||||
struct mp_osd_res *dim);
|
struct mp_osd_res *dim);
|
||||||
void mp_ass_configure_fonts(ASS_Renderer *priv, struct osd_style_opts *opts,
|
void mp_ass_configure_fonts(ASS_Renderer *priv, struct osd_style_opts *opts,
|
||||||
struct mpv_global *global, struct mp_log *log);
|
struct mpv_global *global, struct mp_log *log);
|
||||||
|
|
|
@ -145,7 +145,7 @@ static void get_bitmaps(struct sd *sd, struct mp_osd_res dim, double pts,
|
||||||
if (isnormal(par))
|
if (isnormal(par))
|
||||||
scale = par;
|
scale = par;
|
||||||
}
|
}
|
||||||
mp_ass_configure(renderer, opts, &dim);
|
mp_ass_configure(renderer, opts, !ctx->is_converted, &dim);
|
||||||
ass_set_aspect_ratio(renderer, scale, 1);
|
ass_set_aspect_ratio(renderer, scale, 1);
|
||||||
#if LIBASS_VERSION >= 0x01020000
|
#if LIBASS_VERSION >= 0x01020000
|
||||||
if (!ctx->is_converted && (!opts->ass_style_override ||
|
if (!ctx->is_converted && (!opts->ass_style_override ||
|
||||||
|
|
Loading…
Reference in New Issue