MarkItDown 完整指南:一条命令,把 PDF、PPT、扫描件统统变成 Markdown
公司群里每天甩来一堆 PDF 论文、PPT 汇报、Excel 表格,还有拍成照片的发票——你要把它们喂给 RAG 知识库,第一反应大概率是"一个个转"。MarkItDown 就是为这一刻而生的:一条命令,把这些格式各异的文件统一变成结构化 Markdown,标题、列表、表格、链接都尽量保留,让 LLM 和文本分析管线能直接吃进去。
它能替你干的四类脏活
- 文档转文本:PDF、Word、PPT、Excel 里的正文、表格、列表,转出来就是带结构的 Markdown,而不是糊成一片的纯文字。
- 图片变描述:传入一张 JPG,配合视觉模型(如
gpt-4o)可以直接生成图像内容的文字描述;测试库里那张"红圆 + 蓝方块"的图就是为这个场景准备的验证用例。 - 音频变文字:MP3、WAV 走语音转录,连 YouTube 链接也能拉取字幕文本。
- 归档批量拆包:ZIP 传入即逐个遍历转换;HTML、RSS、EPUB、CSV/JSON/XML 也各有对应转换器,不用为每种格式单独写解析代码。
三步装好并验证
环境要求只有一个:Python 3.10 以上(建议用虚拟环境隔离依赖)。
- 激活你的虚拟环境(venv / uv / conda 均可)。
- 安装:
pip install 'markitdown[all]',[all]会装齐全部格式的可选依赖。 - 验证:
markitdown --version能打印版本号即成功。
只处理两三种格式的话,可以只装需要的依赖,比如 pip install 'markitdown[pdf, docx]',体积更小、升级更快。
一次真实演示:论文 PDF 转 Markdown
拿一篇典型的学术论文 PDF(多栏排版、带图表和脚注)试一下:
markitdown paper.pdf -o paper.md
预期结果:paper.md 里标题层级、作者信息、图表说明文字都被保留为 Markdown 结构,可以直接丢进分块器切 chunk。不想落盘的话,也可以管道式喂给下游:
cat paper.pdf | markitdown
上面这张 AutoGen 论文首页就是项目测试集里的真实样例——多栏、脚注、图注混排,正好用来检验转换质量。
进阶玩法与能力边界
进阶用法(按需取用,不用全上):
- 扫描件 / 复杂表格:装
markitdown-ocr插件后,PDF、DOCX、PPTX、XLSX 里的内嵌图像可以用 LLM Vision 提文字,无需额外 ML 依赖;命令行加--use-plugins即可启用。 - 云端增强:
-d参数接 Azure Document Intelligence,或--use-cu接 Azure Content Understanding,后者还能抽取结构化字段(发票金额、日期等,以 YAML front matter 输出),并且是内置能力之外唯一支持视频的路径。 - 插件机制:
markitdown --list-plugins查看已装插件,社区插件可以自行开发接入。
边界要心里有数:
- 输出面向机器消费,官方明说这不是高保真人读排版——别拿它当 LaTeX 转 Word 用。
- 内置转换器没有视频支持;音频只覆盖基础转录。
- 每次
convert()走云端分析器都是计费调用,混合场景下建议用cu_file_types限定哪些格式走云。
内部一瞥
所有格式转换器都平铺在 converters 目录 里,一个格式一个文件(_pdf_converter.py、_pptx_converter.py……),想加格式或改行为,从这里入手最顺。
避坑与经验
- 扫描版 PDF 转出来是空白或乱码 → 文件里没有文本层,走
markitdown-ocr插件或 Azure Document Intelligence,别纠结调参数。 - 某格式报错或结果缺内容 → 多半是缺可选依赖,按格式补装,如
pip install 'markitdown[pdf, xlsx]';从 stdin 读流时记得用-x .pdf给个扩展名提示。 - 处理用户上传的不可信文件 → 别直接调宽松的
convert(),改用最小权限的convert_local()/convert_stream(),并先校验路径和 URI,官方安全章节对此有明确要求。
写在最后
如果你在搭 RAG、做文档批量入库,或者只是想少写一堆格式解析代码,MarkItDown 就是那个"装完就能用"的免费方案:依赖轻、一条命令起步、扩展路径清晰——剩下的时间留给真正的内容工作。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





