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,83 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
批量生成封面模板预览图CLI对齐 Electron 资源目录生成)
"""
import os
import sys
import json
import argparse
import subprocess
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
COVER_GENERATOR = os.path.join(SCRIPT_DIR, "cover_generator.py")
COVER_STYLES = ["default", "blur-bg", "outline", "gradient", "split"]
STYLE_CONFIGS = {
"default": {"titlePosition": "top", "titleColor": "#FFFFFF", "titleFontSize": 72},
"blur-bg": {"titlePosition": "top", "titleColor": "#FFFFFF", "backgroundBlurEnabled": True},
"outline": {
"titlePosition": "top",
"titleColor": "#FFFFFF",
"titleStrokeWidth": 4,
"titleStrokeColor": "#000000",
},
"gradient": {"titlePosition": "top", "titleColor": "#FFFFFF"},
"split": {"titlePosition": "center", "titleColor": "#FFFFFF"},
}
def generate_all_cover_previews(video_path: str, preview_dir: str, demo_title: str) -> bool:
os.makedirs(preview_dir, exist_ok=True)
python_exe = os.environ.get("AICLIENT_PYTHON_PATH") or sys.executable
ok_count = 0
for style in COVER_STYLES:
out_path = os.path.join(preview_dir, f"cover-preview-{style}.jpg")
config = dict(STYLE_CONFIGS.get(style, STYLE_CONFIGS["default"]))
cmd = [
python_exe,
COVER_GENERATOR,
"--video",
video_path,
"--title",
demo_title,
"--output",
out_path,
"--config",
json.dumps(config, ensure_ascii=False),
"--timestamp",
"1",
]
try:
r = subprocess.run(cmd, cwd=SCRIPT_DIR, capture_output=True, text=True, timeout=120)
if r.returncode == 0 and os.path.isfile(out_path):
print(f"{out_path}", file=sys.stderr)
ok_count += 1
else:
print(f"{style}: {r.stderr or r.stdout}", file=sys.stderr)
except Exception as e:
print(f"{style}: {e}", file=sys.stderr)
return ok_count > 0
def main():
parser = argparse.ArgumentParser(description="Generate cover template preview images")
parser.add_argument("--video", required=True, help="Source video path")
parser.add_argument("--output-dir", required=True, help="Output directory")
parser.add_argument("--title", default="封面预览标题示例", help="Demo title text")
args = parser.parse_args()
if not os.path.isfile(args.video):
print(f"Error: video not found: {args.video}", file=sys.stderr)
sys.exit(1)
success = generate_all_cover_previews(args.video, args.output_dir, args.title)
sys.exit(0 if success else 1)
if __name__ == "__main__":
main()