# Requirement Specification / 需求规格说明

# ffmpeg-video-compress

## Background / 背景

l-tool CLI 已有图片压缩功能，现扩展到视频领域。用户需要能够压缩视频文件以减少存储空间占用或便于网络传输。与有损压缩不同，此功能采用近无损压缩策略，在显著减小文件大小的同时尽可能保持原始画质。

## Goals / 目标

- [x] 实现基于 FFmpeg 的视频压缩功能
- [x] 支持多种输出格式 (MP4, MKV, WebM, MOV, AVI)
- [x] 自动检测 FFmpeg 安装状态，提供安装指引
- [x] 支持自动选择最小文件格式的智能模式

## Scope / 范围

### In Scope / 范围内

- 近无损视频压缩 (CRF 18-31)
- 多格式输出支持
- 自动格式选择（压缩后选择最小的）
- 显示压缩前后大小对比

### Out of Scope / 范围外

- 自定义 CRF 值
- 自定义编码预设
- 批量压缩
- 音频单独压缩

## Constraints / 约束条件

- 依赖外部 FFmpeg 工具
- 仅支持常见视频格式 (mp4, mkv, webm, mov, avi)
- WebM 格式使用 VP9 编码器（压缩速度较慢但压缩率高）

## Acceptance Criteria / 验收标准

- [x] `l ffmpeg compress video.mp4` 能自动选择最小格式压缩
- [x] `l ffmpeg compress video.mp4 -f webm` 能指定格式压缩
- [x] 无 FFmpeg 时显示安装指引并退出
- [x] 显示原始大小、压缩大小和压缩率

## Implementation / 实现

- **文件**: `src/commands/ffmpeg/compress.rs`
- **命令**: `l ffmpeg compress <INPUT> [-o OUTPUT] [-f FORMAT]`
- **状态**: ✅ 已完成

## Technical Details / 技术细节

### 压缩参数

| 格式 | 编码器     | CRF | 预设 |
| ---- | ---------- | --- | ---- |
| MP4  | libx264    | 18  | slow |
| MKV  | libx264    | 18  | slow |
| WebM | libvpx-vp9 | 31  | -    |
| MOV  | libx264    | 18  | slow |
| AVI  | libx264    | 18  | slow |

### 智能模式流程

1. 尝试 MP4、MKV、WebM 三种格式压缩
2. 比较压缩后文件大小
3. 选择最小的格式作为最终输出
4. 删除其他临时文件

## Open Questions / 待澄清问题

- (无)
