Repository navigation
VideoLingo v3.2.0 🎨
Subtitles that look right in every language, an optional PyTorch-free engine for local Qwen3-ASR, and an installer that leaves your global pip settings alone.
🚀 What's new
- Built-in multilingual subtitle typesetting. Burned-in subtitles no longer use one system font for everything. Each of 33 languages has its own font, size and spacing, whether it is the translated row or the source row. Lines are broken by their rendered width, measured with HarfBuzz, preferably at punctuation and between words; Chinese, Japanese and Thai are split into words with BudouX. Arabic, Devanagari, Thai and other complex scripts are shaped correctly whatever fonts your system has.
- The fonts come with VideoLingo. 4.4 MB of OFL fonts ship in
fonts/. The Chinese and Japanese faces are too large for the repository: they are downloaded once, on first use, and checked by SHA-256, with jsDelivr mirrors as a fallback. Docker images fetch them at build time. - Subtitle length is now a width.
subtitle.max_lengthis measured as the line is drawn: a Latin letter counts about 1, and 80 is one full landscape row (about 35 Chinese characters on the source row). The new defaults aremax_length: 80andtarget_multiplier: 1.0. - The classic filter still works, and no longer runs off the screen. Set a
font_nameto use your own font with FFmpeg'ssubtitlesfilter, as before. The same filter is the fallback when the typesetter can't be used, and it now gets long Chinese, Japanese and Thai lines pre-broken so they stay inside the frame. - Optional audio.cpp engine for local Qwen3-ASR. With
whisper.qwen_engine: audiocpp, recognition and forced alignment go to an audio.cpp server you run yourself (GGUF weights, no PyTorch); its address iswhisper.audiocpp_url. It is opt-in:autonever picks it. - The installer keeps your pip configuration.
--auto-mirrorused to runpip config set global.index-url, which changed the package index for every Python project on the machine. The chosen mirror is now used for this install only. - See where your models are.
installer.py --checkand a finished install list the Hugging Face cache in use with the models already in it, the local model folder, and where FFmpeg comes from. The start guide explains how to reuse models you already have, including those of a standalone WhisperX. - Fixed "Translation not found" warnings for TTS provider names in the sidebar.
⚠️ Before upgrading
- Install the new dependencies
uharfbuzz,budouxandfonttools: run the installer again, orpip install -r requirements.txt. Until then, subtitles are burned the old way and a warning asks you to re-run the installer. - The first Chinese or Japanese burn needs a network connection to download that font (10–20 MB, once). Offline, put the variable font from google/fonts or fonts.google.com in
fonts/, for exampleNotoSansSC[wght].ttforNotoSansJP-VariableFont_wght.ttf. - If your
config.yamlstill hasmax_length: 75andtarget_multiplier: 1.2, click Restore defaults (20/80) under Subtitle length tuning to use the new values. font_sizenow scales the typesetter's own sizes (15 and 17 are its defaults), and the typesetter does not usemargin_v. Setting afont_nameturns the typesetter off for every language.- If an earlier
--auto-mirrorinstall changed your global pip index,pip config listshows it andpip config unset global.index-urlremoves it.
✅ Release validation
- Automated suite: 832 passed, 20 skipped (macOS arm64, Python 3.12, the FFmpeg installed by the installer).
- Subtitles were burned with FFmpeg and libass and compared before and after for Chinese, Japanese, Korean, Russian, Arabic, Hindi and Thai, for the typesetter and for the fallback filter.
VideoLingo v3.2.0 🎨
每种语言的字幕都排得好看;本地 Qwen3-ASR 新增可选的免 PyTorch 推理引擎;安装器不再改动全局 pip 设置。
🚀 这次更新
- 内置多语言字幕排版。 烧录字幕不再所有语言共用一种系统字体。33 种语言无论作译文行还是原文行,都有各自的字体、字号和字距。切行按实际渲染宽度计算(HarfBuzz 测宽),优先在标点和词间断开,中文、日文、泰文用 BudouX 分词。阿拉伯文、天城文、泰文等复杂文字,不管系统装了什么字体都能正确显示。
- 字体随 VideoLingo 提供。
fonts/里自带 4.4 MB 的 OFL 授权字体。中文和日文字体太大,不放进仓库,第一次用到时下载一次,用 SHA-256 校验,GitHub 下载失败时改走 jsDelivr 镜像。Docker 镜像在构建时就会下载好。 - 字幕长度改为按宽度计算。
subtitle.max_length按实际画出来的宽度算:一个拉丁字母约为 1,80 是横屏的一整行(原文行约 35 个汉字)。新的默认值是max_length: 80、target_multiplier: 1.0。 - 原来的滤镜照样能用,长行也不再溢出。 填写
font_name就和以前一样,用 FFmpeg 的subtitles滤镜和你指定的字体。排版器用不了时也会退回这个滤镜;中文、日文、泰文的长行现在会先折好,不会再超出画面。 - 本地 Qwen3-ASR 新增可选的 audio.cpp 引擎。 设置
whisper.qwen_engine: audiocpp后,识别和强制对齐都交给你自己运行的 audio.cpp 服务(GGUF 权重,不需要 PyTorch),地址在whisper.audiocpp_url里设置。需要手动开启,auto不会选它。 - 安装器不再改你的 pip 配置。
--auto-mirror以前会执行pip config set global.index-url,改掉整台电脑上所有 Python 项目的下载源。现在选出的镜像只在这次安装中使用。 - 能看到模型存在哪里。
installer.py --check和安装完成时,会列出正在使用的 Hugging Face 缓存及其中已有的模型、本地模型目录和 FFmpeg 的来源。新手指南说明了怎样复用已有的模型,包括单独安装的 WhisperX 的模型。 - 修复侧边栏对 TTS 服务商名称报 "Translation not found" 的问题。
⚠️ 升级前留意
- 需要安装新依赖
uharfbuzz、budoux和fonttools:重新运行安装器,或执行pip install -r requirements.txt。装好之前,字幕按原来的方式烧录,并提示重新运行安装器。 - 第一次烧录中文或日文字幕时需要联网,下载对应字体(10–20 MB,只下载一次)。离线时,可以从 google/fonts 或 fonts.google.com 下载可变字体放进
fonts/,例如NotoSansSC[wght].ttf或NotoSansJP-VariableFont_wght.ttf。 - 如果你的
config.yaml里还是max_length: 75和target_multiplier: 1.2,请在「字幕长度微调」里点 恢复默认值(20/80),改用新的默认值。 font_size现在是排版器原始字号的缩放比例(15 和 17 就是原始字号),排版器不使用margin_v。填写font_name后,所有语言都不再使用排版器。- 如果以前用
--auto-mirror安装时改了全局 pip 下载源,可以用pip config list查看,用pip config unset global.index-url删除。
✅ 发布验证
- 自动化测试:832 passed,20 skipped(macOS arm64、Python 3.12、安装器装的 FFmpeg)。
- 用 FFmpeg 和 libass 实际烧录,前后对比了中文、日文、韩文、俄文、阿拉伯文、印地文和泰文,包括排版器和退回的原滤镜两种情况。
Full Changelog / 完整改动:v3.1.1...v3.2.0