# M3u8ConversionTool
**Repository Path**: VGfirst/m3u8-conversion-tool
## Basic Information
- **Project Name**: M3u8ConversionTool
- **Description**: # M3U8 转换工具 (M3u8ConversionTool)**高效、美观、安全的 MP4 视频批量转 M3U8/HLS 流媒体格式工具**
[功能特性](#-功能特性) • [快速开始](#-快速开始) • [使用说明](#-使用说明) • [授权管理](#-授权管理) • [技术架构](#-技术架构)
- **Primary Language**: C#
- **License**: AGPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-12-05
- **Last Updated**: 2025-12-05
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# M3U8 转换工具 (M3u8ConversionTool) 计划扩展为可转换多种视频格式的通用转换工具




**高效、美观、安全的 MP4 视频批量转 M3U8/HLS 流媒体格式工具**
[功能特性](#-功能特性) ? [快速开始](#-快速开始) ? [使用说明](#-使用说明) ? [授权管理](#-授权管理) ? [技术架构](#-技术架构)
---
## ?? 文档导航
| 文档 | 说明 |
|------|------|
| ?? [完整说明](README.md) | 当前文档(推荐阅读) |
| ?? [快速入门](GETTING_STARTED.md) | 3 分钟上手指南 |
| ?? [更新日志](CHANGELOG.md) | 版本历史记录 |
| ?? [密钥混淆](LICENSE_KEY_OBFUSCATION.md) | 安全技术详解 |
| ?? [UI 设计](LICENSEDIALOG_UI_IMPROVEMENTS.md) | 界面改进说明 |
| ?? [快速参考](QUICK_REFERENCE.txt) | 速查手册 |
| ??? [文档索引](DOCUMENTATION_INDEX.md) | 完整文档地图 |
| ?? [English](README.en.md) | English Version |
---
## ?? 项目简介
M3u8ConversionTool 是一款基于 WPF 的桌面应用程序,专门用于将 MP4 视频文件批量转换为 M3U8(HLS 流媒体)格式。采用现代化 UI 设计,支持高并发转换,内置安全的授权验证机制。
### ?? 核心价值
- ? **高效并发**:支持 1-8 个任务同时转换,充分利用 CPU 资源
- ?? **现代 UI**:Material Design 风格,渐变配色,圆角卡片设计
- ?? **安全授权**:内置密钥混淆机制,防止简单的反编译破解
- ?? **实时监控**:转换进度、已用时间、预计剩余时间实时显示
- ?? **专业输出**:基于 FFmpeg,输出标准的 HLS 流媒体格式
---
## ? 功能特性
### 1. 批量转换
- ?? 支持选择整个文件夹的 MP4 文件
- ?? 自动扫描并转换所有 MP4 文件
- ?? 为每个视频创建独立的输出目录
### 2. 并发控制
- ?? 可选并发数:1、2、3、4、6、8
- ?? 充分利用多核 CPU 性能
- ??? 根据机器性能灵活调整
### 3. 实时监控
- ?? 整体进度条显示
- ?? 已完成/总数量统计
- ?? 已用时间 + 预计剩余时间
- ?? 详细的转换日志(Consolas 等宽字体)
### 4. 智能输出
- ?? 视频编码:H.264 (libx264)
- ?? 音频编码:AAC (128k)
- ?? 分片时长:3 秒
- ?? 自动生成 index.m3u8 播放列表
### 5. 授权验证
- ?? 启动时自动验证授权
- ??? 基于机器 ID 的唯一授权
- ?? 密钥混淆存储,防止反编译
- ?? 授权缓存,无需重复输入
---
## ?? 快速开始
### 环境要求
| 组件 | 版本要求 |
|------|---------|
| 操作系统 | Windows 10 及以上 |
| .NET Runtime | .NET 9.0 或更高 |
| FFmpeg | 自带或手动配置 |
### 安装步骤
1. **下载发布版本**
```
下载最新的 Release 版本并解压
```
2. **确认 FFmpeg**
```
默认路径:应用目录/FFMpegExe/ffmpeg.exe
或在应用中手动选择 ffmpeg.exe 路径
```
3. **首次运行**
- 双击运行 `M3u8ConversionTool.exe`
- 首次启动会弹出授权验证窗口
- 输入有效的授权密钥
### 获取授权
如需获取授权,请联系管理员并提供以下信息:
- 机器名称
- 安装路径
- 申请用途
---
## ?? 使用说明
### 基本流程
```
选择输入目录 → 设置输出目录 → 选择并发数 → 开始转换 → 等待完成
```
### 详细步骤
#### 1?? 配置 FFmpeg 路径
```
?? 浏览 → 选择 ffmpeg.exe
```
默认会自动检测应用目录下的 `FFMpegExe/ffmpeg.exe`
#### 2?? 选择输入目录
```
?? 选择输入目录 → 选择包含 MP4 文件的文件夹
```
- 只扫描顶层目录的 MP4 文件
- 不递归扫描子目录
- 提示是否自动创建输出子目录
#### 3?? 设置输出目录
```
?? 选择输出目录 → 指定 M3U8 文件的输出位置
```
- 可选择自动创建 `m3u8_output` 子目录
- 每个视频会创建独立的子文件夹
#### 4?? 设置并发数
```
?? 并发数量:1 / 2 / 3 / 4 / 6 / 8
```
- **推荐值**:CPU 核心数 / 2
- **最大值**:8(避免资源耗尽)
#### 5?? 开始转换
```
?? 开始转换
```
- 实时显示转换进度
- 查看详细日志输出
- 随时可以取消转换
#### 6?? 查看结果
```
??? 打开输出目录
```
- 每个视频一个文件夹
- 包含 `index.m3u8` 和多个 `.ts` 分片
---
## ?? 授权管理
### 授权机制
本工具采用基于**机器 ID**的授权验证机制:
```
机器 ID = SHA1(机器名 + 安装目录)
授权密钥 = SHA256(机器 ID + 公司密钥)
```
### 授权流程
#### 方式一:预置授权(推荐)
管理员在发布前预置授权密钥到 `license.json`
#### 方式二:手动授权
1. 启动应用,弹出授权窗口
2. 点击"生成本机秘钥"(可选)
3. 将本机秘钥发送给管理员
4. 管理员生成授权密钥
5. 输入授权密钥并验证
6. 授权成功后自动保存
### 授权文件
```json
license.json
{
"EnableLicenseCheck": true,
"CompanySecret": "CHANGE_ME_SECRET",
"LicensedKey": "8AA4E3A428357B57..."
}
```
### 密钥安全
为防止反编译获取密钥,本工具采用**多层混淆机制**:
1. **密钥拆分**:64 字符密钥拆分为 4 部分
2. **XOR 加密**:每部分使用不同的 XOR 掩码
3. **Base64 编码**:加密结果转为 Base64 存储
4. **运行时解密**:启动时动态解密并重组
**详细说明**:请参阅 [`LICENSE_KEY_OBFUSCATION.md`](LICENSE_KEY_OBFUSCATION.md)
---
## ?? 界面展示
### 主界面
```
╔════════════════════════════════════════════════╗
║ M3U8 转换工具 [—][□][?] ║
║ 高效批量转换 MP4 为 HLS 流媒体格式 ║
╠════════════════════════════════════════════════╣
║ ?? 基本配置 ║
║ ┌──────────────────────────────────────────┐ ║
║ │ FFmpeg 路径: [路径显示........] [?? 浏览] │ ║
║ │ 输入目录: [路径显示........] [?? 选择] │ ║
║ │ 输出目录: [路径显示........] [?? 选择] │ ║
║ └──────────────────────────────────────────┘ ║
║ ║
║ ?? 运行日志 ║
║ ┌──────────────────────────────────────────┐ ║
║ │ 开始: video1 │ ║
║ │ [video1] ...ffmpeg output... │ ║
║ │ 完成: video1 │ ║
║ └──────────────────────────────────────────┘ ║
║ [进度条 ████████????????????? 50%] ║
║ ?? 进度: 5/10 (50%) ║
║ ?? 已用时: 2m 30s ? 预计剩余: 2m 30s ║
║ ║
║ ?? 并发数量: [4 ▼] [?? 开始转换] [?? 取消] ║
╚════════════════════════════════════════════════╝
```
### 授权窗口
```
╔════════════════════════════════╗
║ ?? 授权验证 [?] ║
║ 请输入授权秘钥以继续使用本工具 ║
╠════════════════════════════════╣
║ ?? 授权秘钥 ║
║ [输入框................] [??] ║
║ ║
║ [? 取消] [? 验证并授权] ║
╚════════════════════════════════╝
```
---
## ??? 技术架构
### 技术栈
| 层级 | 技术 | 说明 |
|------|------|------|
| **框架** | .NET 9.0 | 最新的 .NET 平台 |
| **UI** | WPF (Windows Presentation Foundation) | 现代化桌面应用 |
| **语言** | C# 13.0 | 最新 C# 特性 |
| **依赖** | Ookii.Dialogs.Wpf 5.0.1 | 文件夹选择对话框 |
| **编码** | FFmpeg | 视频转换引擎 |
### 项目结构
```
M3u8ConversionTool/
├── App.xaml/cs # 应用程序入口
├── MainWindow.xaml/cs # 主窗口(转换界面)
├── LicenseDialog.xaml/cs # 授权验证窗口
├── LicenseManager.cs # 授权管理核心
├── Tools/
│ └── KeyObfuscationGenerator.cs # 密钥混淆生成器
├── Docs/
│ ├── LICENSE_KEY_OBFUSCATION.md # 密钥混淆技术文档
│ ├── IMPLEMENTATION_SUMMARY.md # 实施总结
│ ├── LICENSEDIALOG_UI_IMPROVEMENTS.md # UI 改进文档
│ └── QUICK_REFERENCE.txt # 快速参考
└── README.md # 项目说明(本文件)
```
### 核心类说明
#### `MainWindow.cs`
- 主界面逻辑
- 文件扫描与并发转换
- 进度监控与日志输出
- FFmpeg 进程管理
#### `LicenseDialog.cs`
- 授权验证界面
- 本机密钥生成
- 授权密钥验证
#### `LicenseManager.cs`
- 授权配置管理
- 密钥生成与验证
- 机器 ID 计算
- 密钥混淆与解密
### 转换参数
```bash
ffmpeg -y -i "input.mp4" \
-c:v libx264 \ # 视频编码:H.264
-preset medium \ # 编码预设:中等
-crf 23 \ # 质量:23(推荐)
-c:a aac \ # 音频编码:AAC
-b:a 128k \ # 音频码率:128k
-hls_time 3 \ # 分片时长:3 秒
-hls_list_size 0 \ # 播放列表大小:无限制
-hls_segment_filename "ts_%02d.ts" \ # 分片文件名
"index.m3u8" # 输出文件
```
### 并发机制
使用 `SemaphoreSlim` 控制并发数:
```csharp
var throttler = new SemaphoreSlim(degree);
var tasks = files.Select(async mp4 =>
{
await throttler.WaitAsync(token);
try
{
await ConvertOneAsync(ffmpeg, mp4, output, token);
}
finally
{
throttler.Release();
}
}).ToList();
await Task.WhenAll(tasks);
```
---
## ?? 配置说明
### license.json
```json
{
"EnableLicenseCheck": true, // 是否启用授权检查
"CompanySecret": "CHANGE_ME_SECRET", // 公司密钥(需修改)
"LicensedKey": "" // 授权密钥(自动填充)
}
```
**重要提示**:
- `CompanySecret` 必须在发布前修改为公司专用密钥
- `LicensedKey` 会在授权成功后自动保存
- 文件位置:应用程序根目录
---
## ?? 开发指南
### 环境准备
1. **安装 Visual Studio 2022**
- 工作负载:.NET 桌面开发
- 组件:.NET 9.0 SDK
2. **克隆项目**
```bash
git clone
cd M3u8ConversionTool
```
3. **安装依赖**
```bash
dotnet restore
```
4. **编译运行**
```bash
dotnet build
dotnet run
```
### 修改授权密钥
如需更换预置密钥:
1. 打开 `Tools\KeyObfuscationGenerator.cs`
2. 修改 `OriginalKey` 常量
3. 取消注释 `Main` 方法
4. 运行生成器获取新的混淆片段
5. 复制 `_keyPart1-4` 到 `LicenseManager.cs`
**详细步骤**:参见 [`LICENSE_KEY_OBFUSCATION.md`](LICENSE_KEY_OBFUSCATION.md)
### 自定义 UI
所有颜色和样式定义在 XAML 的 `Resources` 节点:
```xml
```
修改这些值即可改变整体配色。
---
## ? 常见问题
### Q1: 提示找不到 ffmpeg.exe?
**A:**
1. 确认 FFmpeg 已放置在 `应用目录/FFMpegExe/ffmpeg.exe`
2. 或点击"?? 浏览"手动选择 ffmpeg.exe
### Q2: 转换失败或卡住?
**A:**
1. 检查输入视频是否完整
2. 尝试降低并发数(改为 1)
3. 查看日志中的错误信息
4. 确认 FFmpeg 版本兼容
### Q3: 授权验证失败?
**A:**
1. 确认密钥完整复制(64 个字符)
2. 检查是否为本机对应的密钥
3. 确认未更换机器名或安装目录
4. 联系管理员重新生成密钥
### Q4: 转换速度慢?
**A:**
1. 提高并发数(推荐:CPU 核心数 / 2)
2. 使用 SSD 硬盘
3. 降低视频质量(修改 `-crf` 参数)
4. 使用更快的 FFmpeg 编译版本
### Q5: 输出文件在哪里?
**A:**
```
输出目录/
├── video1/
│ ├── index.m3u8
│ ├── ts_00.ts
│ ├── ts_01.ts
│ └── ...
├── video2/
│ └── ...
```
点击"??? 打开输出目录"可直接打开。
### Q6: 如何批量播放 M3U8?
**A:**
- 使用 VLC Media Player 打开 `index.m3u8`
- 或在 HTML 中使用 HLS.js/Video.js 播放
---
## ?? 性能优化
### 并发数推荐
| CPU 核心数 | 推荐并发数 | 说明 |
|-----------|----------|------|
| 2 核 | 1-2 | 避免卡顿 |
| 4 核 | 2-3 | 平衡性能 |
| 6 核 | 3-4 | 推荐配置 |
| 8 核+ | 4-6 | 高性能 |
### 性能瓶颈
- **CPU**:H.264 编码 CPU 密集
- **磁盘**:大量小文件写入,建议 SSD
- **内存**:FFmpeg 进程内存占用(每个约 100-200MB)
---
## ?? 安全说明
### 密钥保护
本工具采用以下措施保护授权密钥:
1. ? **XOR 混淆**:密钥经过 XOR 加密
2. ? **分段存储**:密钥拆分为 4 部分
3. ? **Base64 编码**:加密结果编码存储
4. ? **动态解密**:运行时才重组密钥
### 注意事项
?? **重要**:这是混淆而非真正加密!
- 有经验的逆向工程师仍可通过动态调试获取
- 主要防御:简单的静态反编译
- 如需更强保护,建议使用专业的代码混淆工具
### 建议
- ?? 定期更换 `CompanySecret`
- ??? 使用 ConfuserEx 等混淆工具
- ?? 考虑实现在线授权验证
- ?? 为密钥添加有效期
---
## ?? 许可证
本项目为**专有软件**,受公司内部许可证约束。
- ? 未经授权禁止复制、分发、修改
- ? 禁止逆向工程、反编译
- ? 仅供公司内部使用
- ? 联系管理员获取授权
---
## ?? 团队与支持
### 开发团队
- **项目负责人**:[联系管理员]
- **技术支持**:[联系管理员]
### 技术支持
遇到问题?请联系:
- ?? 邮箱:[support@company.com]
- ?? 内部群:[技术支持群]
- ?? 电话:[支持电话]
### 贡献指南
本项目为内部项目,代码贡献请遵循:
1. 创建功能分支
2. 提交 Pull Request
3. 通过 Code Review
4. 合并到主分支
---
## ?? 更新日志
### v1.0.0 (2024-xx-xx)
- ? 首次发布
- ? 实现 MP4 到 M3U8 批量转换
- ? 支持 1-8 并发转换
- ? 实时进度监控
- ? 现代化 UI 设计
- ? 授权验证机制
- ? 密钥混淆保护
---
## ?? 致谢
- **FFmpeg**:强大的视频处理工具
- **Ookii.Dialogs.Wpf**:优雅的文件夹选择对话框
- **.NET Team**:提供优秀的开发平台
- **Material Design**:UI 设计灵感来源
---
## ?? 相关文档
- ?? [密钥混淆技术文档](LICENSE_KEY_OBFUSCATION.md)
- ?? [实施总结](IMPLEMENTATION_SUMMARY.md)
- ?? [UI 改进文档](LICENSEDIALOG_UI_IMPROVEMENTS.md)
- ?? [快速参考](QUICK_REFERENCE.txt)
---
**M3U8 转换工具** ? 让视频转换更简单
Made with ?? by [Your Team]