开源项目地址:https://gitee.com/mou18/DukeyYG

DukeyYG 是一款专为短视频创作者设计的自动化合成工具。它能够智能提取视频标题,利用 AI 生成高质量的多语言互动评论,并结合 FFmpeg 实现专业级的视频渲染与合成。

🚀 核心功能

  • 智能标题提取:自动从文件名中提取纯净标题,智能过滤序号(如 001_)、标签(#)、技术后缀及标点符号。
  • AI 驱动评论:集成智谱 AI (GLM-4),根据视频标题自动生成符合外网风格的多语言(中英/中泰等)互动评论。
  • 专业级合成:基于 FFmpeg 实现视频渲染,支持:
    • 自动换行标题:标题超长自动换行,完美适配 UI。
    • 双语字幕渲染:支持自定义位置、颜色、阴影及描边。
    • 画中画布局:支持背景视频与覆盖层的比例调整。
  • 批量处理:支持文件夹级批量导入,多线程并发处理(可控并发数)。
  • 缓存管理:自动管理隐藏缓存文件夹 _videocache,保持输出目录整洁。

🛠️ 环境要求

  1. 运行时.NET 8.0 Desktop Runtime
  2. FFmpeg:程序会自动寻找 bin/ffmpeg/ffmpeg.exe,或请确保系统 PATH 中已安装 FFmpeg。
  3. API Key:需准备 智谱 AI 的有效 API Key。

📖 使用指南

  1. 初始化配置
    • 运行程序,在设置中填入智谱 AI 的 API Key。
  2. 导入视频
    • 点击“浏览”选择包含待处理视频的文件夹。
  3. 参数微调(可选):
    • 在界面上调整 AI 提示词(Prompt)或评论内容。
    • 选择预设的视频模板(位于 tpl/ 目录下)。
  4. 开始生成
    • 点击“一键生成视频”,程序将自动完成:提取标题 -> AI 生成评论 -> FFmpeg 合成 -> 输出到指定目录。

📁 项目结构

  • Services/: 包含 VideoService (视频处理) 和 ZhipuAIService (AI 接口)。
  • ViewModels/: 基于 MVVM 架构的界面逻辑处理。
  • tpl/: 视频模板资源库,每个模板包含 my.json 配置、字体及背景图。
  • .docs/: 详细的开发文档更新日志

⚠️ 注意事项

  • 路径限制:请避免在路径中使用过多的特殊字符,以免 FFmpeg 处理异常。
  • 并发建议:根据机器配置,建议并发任务数设置为 1-3 个,以平衡生成速度与系统负载。

DukeyYG/

├── .docs/                      # 开发文档与更新日志

│   ├── 开发文档.md

│   └── 更新日志.md

├── Models/                     # 数据模型

│   ├── CommentInfo.cs         # 评论信息模型

│   └── VideoFileInfo.cs       # 视频文件信息模型

├── Services/                   # 服务层

│   ├── VideoService.cs        # 视频处理核心(FFmpeg 复杂滤镜构建)

│   └── ZhipuAIService.cs      # 智谱AI服务(线程安全请求)

├── ViewModels/                 # 视图模型

│   └── MainViewModel.cs       # 业务逻辑与 UI 绑定

├── tpl/                        # 视频模板资源库

│   └── ygpl1/                  # 模板实例(含配置、字体、素材)

├── App.xaml                    # 全局样式与资源

├── MainWindow.xaml             # 主窗口界面(Fluent Design 风格)

└── DukeyYG.csproj              # 项目文件

```

## 依赖包

| 包名 | 版本 | 用途 |

|------|------|------|

| FFMpegCore | 5.4.0 | FFmpeg 视频处理封装 |

| Newtonsoft.Json | 13.0.3 | 配置与数据序列化 |

| System.Text.Json | 8.0.x | 现代高性能 JSON 处理(处理 JsonElement) |

## 核心逻辑说明

### 1. FFmpeg 复杂滤镜构建 (VideoService)

针对标题长文本换行,采用了将标题写入临时文件,并利用 `textfile` 参数加载的方式:

// 示例:构建 drawtext 滤镜

string drawtextFilter = $"drawtext=fontfile='{fontPath}':textfile='{tempTitleFile}':" +

                      $"fontcolor={color}:fontsize={size}:x={x}:y={y}:" +

                      $"line_spacing=5:borderw=1:bordercolor=black";

```



### 2. 线程安全 AI 请求 (ZhipuAIService)



为了防止多线程环境下并发修改 `HttpClient.DefaultRequestHeaders` 导致的崩溃,采用 `HttpRequestMessage` 实例化的方式:



```csharp

using var request = new HttpRequestMessage(HttpMethod.Post, "https://open.bigmodel.cn/api/paas/v4/chat/completions");

request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", _apiKey);

request.Content = new StringContent(JsonConvert.SerializeObject(body), Encoding.UTF8, "application/json");

var response = await _httpClient.SendAsync(request);

```

    temperature = 0.7

};

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐