From 6a381c4425f1fec7d0738222dbde240c606bfbcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maple=EF=BC=81?= Date: Wed, 13 May 2026 15:58:04 +0800 Subject: [PATCH] feat: LINE Seed + Noto Sans TC fonts, wording fix, trademark notice - Bundle LINE Seed Sans (EN) font files with fontfile= for consistent rendering; Chinese falls back to system Noto CJK (Docker preinstalled) - Change intro wording from "generated by" to "created with" to clarify BilingualSub is a tool, not the content author - Add NOTICE file with Apache 2.0 trademark clause for "BilingualSub" name - Add assets/fonts/LICENSE (SIL OFL 1.1) for bundled fonts - Update Dockerfile to copy assets/ into image - Improve intro layout spacing for better vertical balance Co-Authored-By: Claude Opus 4.6 (1M context) --- Dockerfile | 1 + NOTICE | 25 ++++++++ assets/fonts/LICENSE | 98 +++++++++++++++++++++++++++++++ assets/fonts/LINESeedSans_Bd.ttf | Bin 0 -> 59388 bytes assets/fonts/LINESeedSans_Rg.ttf | Bin 0 -> 59512 bytes src/bilingualsub/utils/ffmpeg.py | 84 +++++++++++++++++--------- 6 files changed, 181 insertions(+), 27 deletions(-) create mode 100644 NOTICE create mode 100644 assets/fonts/LICENSE create mode 100644 assets/fonts/LINESeedSans_Bd.ttf create mode 100644 assets/fonts/LINESeedSans_Rg.ttf diff --git a/Dockerfile b/Dockerfile index 9e1d61b..0e8076e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,6 +26,7 @@ COPY frontend/ frontend/ RUN cd frontend && pnpm install --frozen-lockfile && pnpm build # Copy source +COPY assets/ assets/ COPY src/ src/ EXPOSE 7860 diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000..22cf9c2 --- /dev/null +++ b/NOTICE @@ -0,0 +1,25 @@ +BilingualSub +Copyright 2024-2026 Maple (mapleee723@gmail.com) + +Licensed under the Apache License, Version 2.0. + +== Trademark Notice == + +"BilingualSub" is the product name of this project. Per Section 6 of the +Apache License 2.0, this license does not grant permission to use the trade +names, trademarks, service marks, or product names of the Licensor, except +as required for reasonable and customary use in describing the origin of the +Work. + +If you create a modified version of this software, you must not distribute +it under the name "BilingualSub" without explicit written permission from +the copyright holder. This includes, but is not limited to, the product +name displayed in video intros, watermarks, and user interfaces. + +== Third-Party Fonts == + +This project bundles font files under the SIL Open Font License, Version 1.1. +See assets/fonts/LICENSE for details. + +- LINE Seed Sans: Copyright (c) 2022 LINE Corporation +- Noto Sans TC: Copyright (c) 2012-2024 Google LLC diff --git a/assets/fonts/LICENSE b/assets/fonts/LICENSE new file mode 100644 index 0000000..4a8384d --- /dev/null +++ b/assets/fonts/LICENSE @@ -0,0 +1,98 @@ +The font files in this directory are distributed under the SIL Open Font License, Version 1.1. + +=== LINE Seed Sans === + +Copyright (c) 2022 LINE Corporation +Licensed under the SIL Open Font License, Version 1.1. +https://github.com/line/seed + +=== Noto Sans TC === + +Copyright (c) 2012-2024 Google LLC +Licensed under the SIL Open Font License, Version 1.1. +https://github.com/notofonts/noto-fonts + +=== SIL Open Font License, Version 1.1 === + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply to +any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/assets/fonts/LINESeedSans_Bd.ttf b/assets/fonts/LINESeedSans_Bd.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4cad980888dea05c7f388096abbd366c5008d5b7 GIT binary patch literal 59388 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 GasLO%ySGOG literal 0 HcmV?d00001 diff --git a/src/bilingualsub/utils/ffmpeg.py b/src/bilingualsub/utils/ffmpeg.py index 2ed0777..e00fbd0 100644 --- a/src/bilingualsub/utils/ffmpeg.py +++ b/src/bilingualsub/utils/ffmpeg.py @@ -10,6 +10,30 @@ import ffmpeg +# --------------------------------------------------------------------------- +# Bundled font paths — assets/fonts/ next to the project root +# --------------------------------------------------------------------------- + +_ASSETS_DIR = Path(__file__).resolve().parent.parent.parent.parent / "assets" / "fonts" +_FONT_EN_REGULAR = _ASSETS_DIR / "LINESeedSans_Rg.ttf" +_FONT_EN_BOLD = _ASSETS_DIR / "LINESeedSans_Bd.ttf" +_FONT_ZH_REGULAR = _ASSETS_DIR / "NotoSansTC-Regular.ttf" +_FONT_ZH_BOLD = _ASSETS_DIR / "NotoSansTC-Bold.ttf" + + +def _font_arg(fontfile: Path, fallback_name: str) -> str: + """Return a drawtext font option. + + Uses ``fontfile=''`` when the bundled file exists, otherwise falls + back to ``font=''`` so the filter chain still works without the + assets directory (e.g. inside Docker where system fonts are available). + """ + if fontfile.exists(): + # fontfile= needs an absolute path; resolve() guarantees that. + escaped = str(fontfile.resolve()).replace("'", "'").replace(":", r"\:") + return f"fontfile='{escaped}'" + return f"font='{fallback_name}'" + class FFmpegError(Exception): """Exception raised when FFmpeg operations fail.""" @@ -96,7 +120,7 @@ def _append_watermark_drawtext(vf_filter: str, watermark_text: str) -> str: safe_text = _escape_drawtext(watermark_text) watermark_drawtext = ( f"drawtext=text='{safe_text}'" - ":font='Arial'" + f":{_font_arg(_FONT_EN_REGULAR, 'Arial')}" ":fontsize=16" ":fontcolor=white@0.6" ":shadowcolor=black@0.8" @@ -492,7 +516,7 @@ def _block_enable(start: float) -> str: def _dt( text: str, - font: str, + font_spec: str, fontsize: int, fontcolor: str, x: str, @@ -500,11 +524,16 @@ def _dt( enable_expr: str, fade_start: float, ) -> str: + """Build a drawtext filter block. + + ``font_spec`` is the output of ``_font_arg()`` — either + ``fontfile=''`` or ``font=''``. + """ safe = _escape_drawtext(text) alpha_expr = f"if(lt(t,{fade_start:.1f}),0,min((t-{fade_start:.1f})/0.3,1))" return ( f"drawtext=text='{safe}'" - f":font='{font}'" + f":{font_spec}" f":fontsize={fontsize}" f":fontcolor={fontcolor}" f":x={x}" @@ -514,19 +543,20 @@ def _dt( ":fix_bounds=1" ) - # Y positions scaled to video height - y_eyebrow = int(height * 0.14) - y_chinese_label = y_eyebrow + int(height / 25) - y_channel = y_chinese_label + int(height / 22) - y_channel_url = y_channel + int(height / 20) - y_title = (y_channel_url if channel_url else y_channel) + int(height / 22) - y_video_url = y_title + int(height / 28) - y_decl_zh_1 = y_video_url + int(height / 20) - y_decl_zh_2 = y_decl_zh_1 + int(height / 40) - y_decl_zh_3 = y_decl_zh_2 + int(height / 40) - y_decl_en_1 = y_decl_zh_3 + int(height / 30) - y_decl_en_2 = y_decl_en_1 + int(height / 44) - y_decl_en_3 = y_decl_en_2 + int(height / 44) + # Y positions: vertically centered with generous spacing + # Total content height ~50% of frame, starting at ~28% + y_eyebrow = int(height * 0.22) + y_chinese_label = y_eyebrow + int(height * 0.04) + y_channel = y_chinese_label + int(height * 0.05) + y_channel_url = y_channel + int(height * 0.055) + y_title = (y_channel_url if channel_url else y_channel) + int(height * 0.06) + y_video_url = y_title + int(height * 0.04) + y_decl_zh_1 = y_video_url + int(height * 0.06) + y_decl_zh_2 = y_decl_zh_1 + int(height * 0.03) + y_decl_zh_3 = y_decl_zh_2 + int(height * 0.03) + y_decl_en_1 = y_decl_zh_3 + int(height * 0.04) + y_decl_en_2 = y_decl_en_1 + int(height * 0.028) + y_decl_en_3 = y_decl_en_2 + int(height * 0.028) x_left = str(left_margin) x_brand = f"w-tw-{int(width * 0.04)}" @@ -545,7 +575,7 @@ def _next_start() -> float: blocks.append( _dt( "ORIGINAL VIDEO FROM", - "Arial", + _font_arg(_FONT_EN_REGULAR, "Arial"), max(1, int(height / 54)), "white@0.3", x_left, @@ -560,7 +590,7 @@ def _next_start() -> float: blocks.append( _dt( "原始影片來自", - "serif", + _font_arg(_FONT_ZH_REGULAR, "serif"), max(1, int(height / 42)), "white@0.6", x_left, @@ -575,7 +605,7 @@ def _next_start() -> float: blocks.append( _dt( channel, - "Arial", + _font_arg(_FONT_EN_BOLD, "Arial"), max(1, int(height / 17)), "white@1.0", x_left, @@ -591,7 +621,7 @@ def _next_start() -> float: blocks.append( _dt( channel_url, - "Arial", + _font_arg(_FONT_EN_REGULAR, "Arial"), max(1, int(height / 49)), "white@0.35", x_left, @@ -606,7 +636,7 @@ def _next_start() -> float: blocks.append( _dt( video_title, - "serif", + _font_arg(_FONT_ZH_REGULAR, "serif"), max(1, int(height / 34)), "white@0.7", x_left, @@ -621,7 +651,7 @@ def _next_start() -> float: blocks.append( _dt( video_url, - "Arial", + _font_arg(_FONT_EN_REGULAR, "Arial"), max(1, int(height / 45)), "white@0.5", x_left, @@ -633,7 +663,7 @@ def _next_start() -> float: # Chinese declaration (3 lines) decl_zh = [ - "翻譯字幕由開源專案 BilingualSub 產生", + "翻譯字幕使用開源專案 BilingualSub 製作", "所有內容及著作權屬於原始創作者所有", "如需移除,請聯繫上傳者", # noqa: RUF001 ] @@ -643,7 +673,7 @@ def _next_start() -> float: blocks.append( _dt( line, - "serif", + _font_arg(_FONT_ZH_REGULAR, "serif"), max(1, int(height / 45)), "white@0.45", x_left, @@ -655,7 +685,7 @@ def _next_start() -> float: # English declaration (3 lines) decl_en = [ - "Subtitles generated by BilingualSub (open source)", + "Subtitles created with BilingualSub (open source)", "All content and copyrights belong to the original creator", "For removal requests, please contact the uploader", ] @@ -665,7 +695,7 @@ def _next_start() -> float: blocks.append( _dt( line, - "Arial", + _font_arg(_FONT_EN_REGULAR, "Arial"), max(1, int(height / 49)), "white@0.35", x_left, @@ -679,7 +709,7 @@ def _next_start() -> float: blocks.append( _dt( "BilingualSub", - "Arial", + _font_arg(_FONT_EN_REGULAR, "Arial"), max(1, int(height / 54)), "white@0.25", x_brand,