# 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) 计划扩展为可转换多种视频格式的通用转换工具
![Version](https://img.shields.io/badge/version-1.0-blue.svg) ![.NET](https://img.shields.io/badge/.NET-9.0-purple.svg) ![Platform](https://img.shields.io/badge/platform-Windows-lightgrey.svg) ![License](https://img.shields.io/badge/license-Proprietary-red.svg) **高效、美观、安全的 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]