This commit is contained in:
fengchuanhn@gmail.com
2026-05-21 00:19:08 +08:00
parent 3215d39a32
commit 3b0a8d777c
63 changed files with 12483 additions and 1114 deletions

View File

@@ -0,0 +1,63 @@
/** 字幕样式预设(对齐 Electron 常用底部白字黑边,供 ffmpeg force_style */
export const SUBTITLE_TEMPLATES = [
{
id: "default",
label: "默认白字黑边",
fontName: "Microsoft YaHei",
fontSize: 24,
primaryColor: "#FFFFFF",
outlineColor: "#000000",
outline: 2,
marginV: 40,
},
{
id: "large",
label: "大号字幕",
fontName: "Microsoft YaHei",
fontSize: 32,
primaryColor: "#FFFFFF",
outlineColor: "#000000",
outline: 3,
marginV: 48,
},
{
id: "yellow",
label: "黄色强调",
fontName: "Microsoft YaHei",
fontSize: 26,
primaryColor: "#FFD700",
outlineColor: "#000000",
outline: 2,
marginV: 42,
},
];
/**
* @param {string} templateId
*/
export function getSubtitleTemplate(templateId) {
return (
SUBTITLE_TEMPLATES.find((t) => t.id === templateId) ||
SUBTITLE_TEMPLATES[0]
);
}
/**
* @param {{ fontName?: string, fontSize?: number, primaryColor?: string, outlineColor?: string, outline?: number, marginV?: number }} tpl
*/
export function buildFfmpegForceStyle(tpl) {
const hexToAss = (hex) => {
const h = hex.replace("#", "");
const r = h.substring(0, 2);
const g = h.substring(2, 4);
const b = h.substring(4, 6);
return `&H00${b}${g}${r}`.toUpperCase();
};
const fontName = tpl.fontName || "Microsoft YaHei";
const fontSize = tpl.fontSize || 24;
const primary = hexToAss(tpl.primaryColor || "#FFFFFF");
const outline = hexToAss(tpl.outlineColor || "#000000");
const outlineW = tpl.outline ?? 2;
const marginV = tpl.marginV ?? 40;
return `FontName=${fontName},FontSize=${fontSize},PrimaryColour=${primary},OutlineColour=${outline},Outline=${outlineW},Alignment=2,MarginV=${marginV}`;
}