# SVG to PNG 渲染工具 ## 功能 将 SVG 矢量图文件渲染为 PNG 位图,解决本机缺少 SVG 渲染工具、FFmpeg 无 SVG 解码器的问题。 ## 依赖 - Python 3.8+ - CairoSVG 2.9.0+ - Pillow 12.0.0+ - 系统 cairo 库(macOS: `brew install cairo`) ## 安装 ```bash # 1. 安装系统 cairo 库(macOS) brew install cairo # 2. 安装 Python 依赖 pip install cairosvg Pillow ``` ## 用法 ### 单文件转换 ```bash # 基本用法(自动读取 SVG 原始尺寸) python tools/svg-to-png.py input.svg output.png # 指定输出宽度(高度等比缩放) python tools/svg-to-png.py input.svg output.png --width 1920 # 指定输出高度(宽度等比缩放) python tools/svg-to-png.py input.svg output.png --height 1080 # 指定缩放因子(基于 SVG 原始尺寸放大/缩小) python tools/svg-to-png.py input.svg output.png --scale 2 # 透明背景 python tools/svg-to-png.py input.svg output.png --background none ``` ### 批量转换 ```bash # 转换目录下所有 SVG 文件 python tools/svg-to-png.py ./svg-dir/ ./png-dir/ --batch # 批量转换并指定缩放因子 python tools/svg-to-png.py ./svg-dir/ ./png-dir/ --batch --scale 2 ``` ### 作为模块导入 ```python from tools.svg_to_png import convert_svg_to_png # 转换单个文件 convert_svg_to_png("input.svg", "output.png", scale=2) # 指定宽度(高度等比) convert_svg_to_png("input.svg", "output.png", width=1920) ``` ## 路径 ``` video-ai-system/tools/svg-to-png.py ``` ## 视频处理流水线集成 在视频处理流水线中,使用该工具将 SVG 字幕/特效渲染为 PNG 序列,再通过 FFmpeg 合成到视频中: ```bash # 1. 渲染 SVG 字幕为 PNG 序列 python tools/svg-to-png.py ./subtitles/ ./subtitles-png/ --batch --width 1920 # 2. 用 FFmpeg 将 PNG 序列合成到视频 ffmpeg -i input.mp4 -i ./subtitles-png/frame-%04d.png -filter_complex overlay output.mp4 ``` ## 故障排查 ### OSError: no library called "cairo-2" was found **原因**:Python 找不到系统 cairo 库。 **解决**: ```bash # macOS(Apple Silicon) export DYLD_LIBRARY_PATH="/opt/homebrew/lib:$DYLD_LIBRARY_PATH" # macOS(Intel) export DYLD_LIBRARY_PATH="/usr/local/lib:$DYLD_LIBRARY_PATH" # 然后重新运行 python tools/svg-to-png.py input.svg output.png ``` ### 建议在 `~/.zshrc` 中添加: ```bash # video-ai-system SVG 渲染工具依赖 export DYLD_LIBRARY_PATH="/opt/homebrew/lib:$DYLD_LIBRARY_PATH" ``` ## 更新记录 - 2026-06-23:初始版本,支持单文件/批量 SVG→PNG 转换