[![GitHub stars](https://img.shields.io/github/stars/1596941391qq/anything-to-md?style=social)](https://github.com/1596941391qq/anything-to-md/stargazers) [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) [![Python](https://img.shields.io/badge/Python-3.10%2B-blue.svg)](https://www.python.org/) [![MCP Server](https://img.shields.io/badge/MCP-Server-6e40c9.svg)](#mcp-server)

# Anything-to-MD

> 把任何文件变成 AI 能吃的 Markdown。PDF、Office、图片、音视频、YouTube — 一个命令搞定。

```
anything-to-md file report.pdf -o ./output
```

## 为什么需要这个

LLM 不吃 PDF，不吃 PPT，不吃视频。但你的知识全在这些格式里。

Anything-to-MD 是一个统一转换层：**原始多模态输入 → 结构化、可索引、可总结的 Markdown**。

三种使用方式，同一套引擎：

| 方式 | 场景 |
|------|------|
| CLI | 本地命令行，单文件或批量 |
| MCP Server | Claude Code / Cursor / AionUI 等 MCP 客户端直接调用 |
| Skill | Agent 工作流中作为可复用能力 |

## 架构

```
输入文件
  │
  ├─ PDF ──→ MinerU (OCR级) ──→ MarkItDown ──→ pypdf
  │          布局检测+表格识别     文本提取        纯文本兜底
  │          图片提取+公式识别
  │
  ├─ Office (DOCX/XLSX/PPTX) ──→ MarkItDown ──→ openpyxl 兜底
  │
  ├─ 图片 ──→ MarkItDown + OCR 插件
  │
  ├─ 视频 ──→ VideoRouter (智能路由)
  │     │
  │     ├─ PROBE: 探测字幕轨/音频轨/画面文字
  │     ├─ DECIDE: 选择最优策略
  │     ├─ EXTRACT: 字幕提取 / faster-whisper / 关键帧OCR
  │     └─ FUSE: 时间轴对齐 + 内容去重
  │
  ├─ 音频 ──→ faster-whisper 转写
  │
  ├─ YouTube ──→ yt-dlp 字幕/转写
  │
  └─ HTML/EPUB/CSV/JSON/XML ──→ MarkItDown
                                      │
                                      ▼
                              结构化 Markdown 输出
```

每种格式都有多级降级链。上游失败，自动切下游，不丢内容。

## PDF 三级引擎

这是核心差异化能力。大多数工具只有一个 PDF 后端，遇到扫描件或中文图文混排就歇菜。

| 优先级 | 引擎 | 能力 | 适用场景 |
|--------|------|------|----------|
| 1 | **MinerU** | OCR + 布局检测 + 表格识别 + 图片提取 | 扫描件、中文/CJK、PPT导出、图文混排 |
| 2 | **MarkItDown** | 快速文本提取 | 纯文本 PDF、英文文档 |
| 3 | **pypdf** | 基础文本提取 | 最后兜底 |

MinerU 首次运行会下载 ~2GB 模型（后续秒开）。如果你的 PDF 是纯文本英文，MarkItDown 就够了；但凡涉及中文、扫描件、表格 — MinerU 是质的飞跃。

## 视频智能路由（NEW）

视频不是简单的"转写"就完事。很多视频（教程、PPT录屏、带字幕的讲座）的核心信息在画面上。

### 4 阶段流水线

```
PROBE → DECIDE → EXTRACT → FUSE
```

**Phase 1: PROBE** (< 5 秒)
- ffprobe 探测：内嵌字幕轨、音频轨
- 旁白文件检测：.srt/.vtt
- 采样帧 OCR：5 帧快速 OCR 检测画面文字

**Phase 2: DECIDE** - 智能选路

| 视频类型 | 策略 | 成本 |
|----------|------|------|
| 有内嵌字幕 | `embedded_subtitle` | 极低，秒级 |
| 有旁白 .srt | `sidecar_subtitle` | 极低 |
| 纯人声（播客） | `audio_transcribe` | 中 |
| PPT录屏 + 旁白 | `hybrid` | 高 |
| 硬编码字幕 | `visual_ocr` | 高 |
| 未知/混合 | `full_pipeline` | 最高 |

**Phase 3: EXTRACT**
- **字幕**：ffmpeg 直接提取 SRT
- **音频**：faster-whisper（比 OpenAI Whisper 快 4x）
- **画面**：PySceneDetect 场景检测 + 感知哈希去重 + RapidOCR

**Phase 4: FUSE**
- 时间轴对齐
- 内容去重（字幕 vs 转写 vs OCR）
- 优先级：字幕 > 音频 > OCR

### 关键优化

不要 OCR 每一帧。场景检测 + 感知哈希把 1 小时视频从 ~108,000 帧降到 50-200 关键帧。

## 安装

### 方式一：一键安装（推荐）

**Linux / macOS:**
```bash
git clone https://github.com/1596941391qq/anything-to-md.git
cd anything-to-md
chmod +x install.sh
./install.sh
```

**Windows (PowerShell):**
```powershell
git clone https://github.com/1596941391qq/anything-to-md.git
cd anything-to-md
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\install.ps1
```

安装脚本会：
1. 创建独立虚拟环境
2. 安装基础依赖
3. 询问是否安装 PDF 增强（MinerU）
4. 询问是否安装视频支持
5. 验证安装

### 方式二：手动安装

```bash
# 基础安装（纯文本 PDF、Office、HTML、JSON 等）
pip install -e .

# PDF 增强（中文 PDF、扫描件、表格）
pip install -e ".[pdf]"

# 视频处理支持
pip install -e ".[video]"

# 完整安装（所有功能）
pip install -e ".[full]"
```

### 外部依赖

| 功能 | 依赖 | 安装方法 |
|------|------|----------|
| 视频处理 | ffmpeg | `brew install ffmpeg` / `apt install ffmpeg` / `winget install ffmpeg` |
| PDF OCR | MinerU 模型 (~2GB) | 首次运行自动下载 |

### 常见问题

**NumPy 兼容性:**
```bash
pip install "numpy<2.0"  # 避免 ABI 兼容问题
```

**PyTorch CUDA 问题:**
```bash
# faster-whisper CUDA DLL 加载失败时，自动降级到 openai-whisper
pip install openai-whisper
```

## CLI

```bash
# 单文件转换
anything-to-md file document.pdf -o ./output

# 目录批量转换（保持目录结构）
anything-to-md dir ./my-docs ./my-mds --report

# YouTube 视频转写
anything-to-md youtube "https://www.youtube.com/watch?v=..."

# 查看支持的格式
anything-to-md formats
```

## MCP Server

```bash
# 直接启动
anything-to-md-mcp

# 或
python -m anything_to_md.mcp_server
```

Claude Code 配置：

```json
{
  "mcpServers": {
    "anything-to-md": {
      "type": "stdio",
      "command": "python",
      "args": ["-m", "anything_to_md.mcp_server"]
    }
  }
}
```

MCP 提供 4 个工具：

- `convert_file_to_markdown` — 单文件转换
- `convert_directory_to_markdown` — 批量转换
- `convert_youtube_to_markdown` — YouTube 转写
- `get_supported_formats` — 查看支持格式

## 支持格式

| 类别 | 格式 |
|------|------|
| 文档 | PDF, DOCX, XLSX, PPTX, ODT, ODS, ODP |
| 网页 | HTML, HTM, XHTML |
| 电子书 | EPUB, MOBI |
| 数据 | CSV, TSV, JSON, XML |
| 图片 | PNG, JPG, GIF, BMP, TIFF, WEBP (OCR) |
| 音频 | MP3, WAV, M4A, FLAC, OGG, AAC |
| 视频 | MP4, MKV, AVI, MOV, WEBM |
| URL | YouTube, Wikipedia, RSS |

## Roadmap

- [ ] GPU 加速支持（CUDA/Metal）
- [ ] 并行批处理
- [ ] 更多 OCR 引擎（EasyOCR, Tesseract）

## 致谢 / Acknowledgments

本项目基于以下优秀开源项目构建：

| 项目 | 用途 | 链接 |
|------|------|------|
| **MarkItDown** | 核心文档转换引擎 | [github.com/microsoft/markitdown](https://github.com/microsoft/markitdown) |
| **MinerU (magic-pdf)** | PDF OCR + 布局检测 + 表格识别 | [github.com/opendatalab/MinerU](https://github.com/opendatalab/MinerU) |
| **Video Insight** | 视频智能路由设计灵感 | Claude Code Skill |
| **faster-whisper** | 高效音频转写 | [github.com/systran/faster-whisper](https://github.com/systran/faster-whisper) |
| **RapidOCR** | 中英文 OCR 引擎 | [github.com/RapidAI/RapidOCR](https://github.com/RapidAI/RapidOCR) |
| **PySceneDetect** | 视频场景检测 | [github.com/Breakthrough/PySceneDetect](https://github.com/Breakthrough/PySceneDetect) |
| **imagehash** | 感知哈希去重 | [github.com/JohannesBuchner/imagehash](https://github.com/JohannesBuchner/imagehash) |

特别感谢这些项目的作者和贡献者，让文档转换变得更简单。

## License

MIT
