# VideoCompress 🎬

一个功能强大的视频批量压缩工具，基于 FFmpeg 构建，支持硬件加速和多种压缩配置选项。

## ✨ 主要特性

- **批量处理**: 递归扫描目录，批量压缩多个视频文件
- **硬件加速**: 支持 NVIDIA、AMD、Intel 显卡硬件加速
- **灵活配置**: 支持 CRF 和固定码率两种压缩模式
- **进度显示**: 实时显示压缩进度和预估时间
- **多种界面**: 提供 Tkinter 和 PySide6 两种 GUI 配置界面
- **智能跳过**: 自动跳过已存在的压缩文件
- **格式支持**: 支持 MP4、MKV 等多种视频格式

## 🚀 快速开始

### 环境要求

- Python 3.7+
- FFmpeg（已内置 ffmpeg.exe）

### 安装依赖

```bash
pip install rich PySide6
```

### 基本使用

1. **启动配置界面**：
   ```bash
   python config_ui.py
   ```

2. **直接压缩视频**：
   ```bash
   python main.py <目标目录>
   ```

3. **配置后压缩**：
   ```bash
   python config.py <目标目录>
   ```

## ⚙️ 配置选项

### 基础设置

- **输出方式**：
  - `single`: 所有压缩文件保存到统一的 Compress 文件夹
  - `multi`: 在每个视频文件旁创建独立的 compress 文件夹

- **编码器**：
  - `h264`: H.264 编码（兼容性好）
  - `hevc`: H.265 编码（文件更小）

### 质量设置

- **CRF 模式**（推荐）：
  - 数值范围：0-51
  - 数值越小质量越高，文件越大
  - 推荐值：18-23

- **固定码率模式**：
  - 格式：数字+单位（如 2M、500k）
  - 可以精确控制文件大小

### 硬件加速

- **NVIDIA 显卡**：使用 `h264_nvenc` 或 `hevc_nvenc`
- **AMD 显卡**：使用 `h264_amf` 或 `hevc_amf`  
- **Intel 核显**：使用 `h264_qsv` 或 `hevc_qsv`

## 📁 项目结构

```
VideoCompress/
├── main.py              # 核心压缩引擎
├── config.py            # Tkinter 配置界面
├── config_ui.py         # PySide6 现代化配置界面
├── config.json          # 配置文件
├── ffmpeg.exe           # FFmpeg 可执行文件
├── ffprobe.exe          # FFprobe 可执行文件
├── test.py              # 测试文件
├── pack.bat             # 打包脚本
└── logs/                # 日志文件夹
```

## 🔧 高级用法

### 自定义 FFmpeg 参数

在配置界面的"高级设置"中，可以添加自定义 FFmpeg 参数：

```bash
# 示例：设置线程数
-threads 4

# 示例：自定义预设
-preset slow

# 示例：音频编码设置
-c:a aac -b:a 128k
```

### 手动参数模式

如果需要完全自定义压缩命令，可以在配置文件中设置 `manual` 参数：

```json
{
    "manual": ["-vf", "scale=1280:720", "-c:v", "libx264", "-crf", "20"]
}
```

### 训练模式（实验性）

启用训练模式可以让程序学习压缩时间，提供更准确的时间预估：

```json
{
    "train": true
}
```

## 📊 输出示例

```
2025-08-26 19:20:15 - INFO    - Video Compress started at 2025/08/26 19:20
2025-08-26 19:20:15 - INFO    - 开始验证环境
2025-08-26 19:20:16 - INFO    - 正在获取视频信息 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100%
2025-08-26 19:20:17 - INFO    - 总进度 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 45% 
2025-08-26 19:20:17 - INFO    - test.mp4 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 67%
```

## 🎯 使用场景

- **批量压缩**: 处理大量视频文件，减小存储空间
- **格式转换**: 将各种格式的视频统一转换为 MP4
- **质量优化**: 在保持视觉质量的前提下减小文件体积
- **硬件加速**: 利用显卡加速，提高压缩效率

## ⚠️ 注意事项

1. 确保有足够的磁盘空间存储压缩后的文件
2. 硬件加速需要相应的显卡驱动支持
3. 压缩过程中避免强制退出，可能导致文件损坏
4. 建议先用小批量文件测试配置效果

## 🐛 常见问题

**Q: 压缩后文件变大了？**  
A: 降低 CRF 值或检查原文件是否已经是高压缩格式

**Q: 硬件加速不生效？**  
A: 检查显卡驱动是否支持对应的编码器

**Q: 程序卡在某个文件？**  
A: 检查该文件是否损坏或格式不被支持

## 📝 更新日志

- **v1.2.1**: 优化进度显示，修复时间预估
- **v1.2**: 添加 PySide6 现代化界面
- **v1.1**: 支持硬件加速和多种编码器
- **v1.0**: 基础批量压缩功能

## 📄 许可证

本项目仅供学习和个人使用。

---

💡 **提示**: 如有问题或建议，欢迎提出 Issue 或 Pull Request。