summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Oscarsson <DanOscarsson@users.noreply.github.com>2017-02-01 13:19:09 +0100
committerwm4 <wm4@nowhere>2017-02-01 16:42:58 +0100
commitf1c9032ddf5eba1241d9616656b4c36bc4043283 (patch)
tree6c7e84dbca6d3631ac4330ed32987eb609deab8c
parentbbf01346ff684f0f6a8cc8489b00920956dc16eb (diff)
downloadmpv-f1c9032ddf5eba1241d9616656b4c36bc4043283.tar.bz2
mpv-f1c9032ddf5eba1241d9616656b4c36bc4043283.tar.xz
sub: add justify of subtitles
To make it easier for the eyes, multi line subtitles should be left justified (for most languages). This adds an option to define how subtitles are to be justified inpendently of how they are aligned. Also add option to enable --sub-justify to be applied on ASS subtitles.
-rw-r--r--DOCS/interface-changes.rst2
-rw-r--r--DOCS/man/options.rst12
-rw-r--r--options/options.c1
-rw-r--r--options/options.h1
-rw-r--r--sub/ass_mp.c3
-rw-r--r--sub/osd.c2
-rw-r--r--sub/osd.h1
-rw-r--r--sub/sd_ass.c4
8 files changed, 26 insertions, 0 deletions
diff --git a/DOCS/interface-changes.rst b/DOCS/interface-changes.rst
index 13b51ad4ba..3423d737ec 100644
--- a/DOCS/interface-changes.rst
+++ b/DOCS/interface-changes.rst
@@ -32,6 +32,8 @@ Interface changes
- "vo-drop-frame-count" to "frame-drop-count"
The old names still work, but are deprecated.
- remove the --stream-capture option and property. No replacement.
+ - add --sub-justify
+ - add --sub-ass-justify
--- mpv 0.23.0 ---
- remove deprecated vf_vdpaurb (use "--hwdec=vdpau-copy" instead)
- the following properties now have new semantics:
diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst
index a6034e512e..1ad2f18b02 100644
--- a/DOCS/man/options.rst
+++ b/DOCS/man/options.rst
@@ -1976,6 +1976,18 @@ Subtitles
Vertical position (default: ``bottom``).
Details see ``--sub-align-x``.
+``--sub-justify=<auto|left|center|right>``
+ Control how multi line subs are justified irrespective of where they
+ are aligned (default: ``auto`` which justifies as defined by
+ ``--sub-align-y``).
+ Left justification is recommended to make the subs easier to read
+ as it is easier for the eyes.
+
+``--sub-ass-justify=<yes|no>``
+ Applies justification as defined by ``--sub-justify`` on ASS subtitles
+ if ``--sub-ass-style-override`` is not set to ``no``.
+ Default: ``no``.
+
``--sub-shadow-color=<color>``
See ``--sub-color``. Color used for sub text shadow.
diff --git a/options/options.c b/options/options.c
index 6547f06074..5166ef6940 100644
--- a/options/options.c
+++ b/options/options.c
@@ -500,6 +500,7 @@ const m_option_t mp_opts[] = {
({"none", 0}, {"light", 1}, {"normal", 2}, {"native", 3})),
OPT_CHOICE("sub-ass-shaper", ass_shaper, UPDATE_OSD,
({"simple", 0}, {"complex", 1})),
+ OPT_FLAG("sub-ass-justify", ass_justify, 0),
OPT_CHOICE("sub-ass-style-override", ass_style_override, UPDATE_OSD,
({"no", 0}, {"yes", 1}, {"force", 3}, {"signfs", 4}, {"strip", 5})),
OPT_FLAG("sub-scale-by-window", sub_scale_by_window, UPDATE_OSD),
diff --git a/options/options.h b/options/options.h
index b0687ac9e5..82a8f92d48 100644
--- a/options/options.h
+++ b/options/options.h
@@ -281,6 +281,7 @@ typedef struct MPOpts {
int ass_style_override;
int ass_hinting;
int ass_shaper;
+ int ass_justify;
int sub_clear_on_seek;
int teletext_page;
diff --git a/sub/ass_mp.c b/sub/ass_mp.c
index 84a706b681..6d85ac1f28 100644
--- a/sub/ass_mp.c
+++ b/sub/ass_mp.c
@@ -78,6 +78,9 @@ void mp_ass_set_style(ASS_Style *style, double res_y,
style->ScaleX = 1.;
style->ScaleY = 1.;
style->Alignment = 1 + (opts->align_x + 1) + (opts->align_y + 2) % 3 * 4;
+#ifdef ASS_JUSTIFY_LEFT
+ style->Justify = opts->justify;
+#endif
style->Blur = opts->blur;
style->Bold = opts->bold;
style->Italic = opts->italic;
diff --git a/sub/osd.c b/sub/osd.c
index bf6233a0b1..a35380d99f 100644
--- a/sub/osd.c
+++ b/sub/osd.c
@@ -62,6 +62,8 @@ static const m_option_t style_opts[] = {
OPT_FLOATRANGE("blur", blur, 0, 0, 20),
OPT_FLAG("bold", bold, 0),
OPT_FLAG("italic", italic, 0),
+ OPT_CHOICE("justify", justify, 0,
+ ({"auto", 0}, {"left", 1}, {"center", 2}, {"right", 3})),
{0}
};
diff --git a/sub/osd.h b/sub/osd.h
index aef1c60b33..7572ec0360 100644
--- a/sub/osd.h
+++ b/sub/osd.h
@@ -134,6 +134,7 @@ struct osd_style_opts {
float blur;
int bold;
int italic;
+ int justify;
};
extern const struct m_sub_options osd_style_conf;
diff --git a/sub/sd_ass.c b/sub/sd_ass.c
index 31c66a6087..9b4d3763c5 100644
--- a/sub/sd_ass.c
+++ b/sub/sd_ass.c
@@ -333,6 +333,10 @@ static void configure_ass(struct sd *sd, struct mp_osd_res *dim,
if (converted)
set_force_flags |= ASS_OVERRIDE_BIT_ALIGNMENT;
#endif
+#ifdef ASS_JUSTIFY_AUTO
+ if ((converted || opts->ass_style_override) && opts->ass_justify)
+ set_force_flags |= ASS_OVERRIDE_BIT_JUSTIFY;
+#endif
ass_set_selective_style_override_enabled(priv, set_force_flags);
ASS_Style style = {0};
mp_ass_set_style(&style, 288, opts->sub_style);