从视频到 PPT:AI 工具如何让内容整理变得如此简单?

原文转自:从视频到 PPT:AI 工具如何让内容整理变得如此简单?

前几天,有个朋友跟我说:“我手上有一批培训视频,可我实在没空看。有没有什么办法能把视频内容的语音总结一下,变成文章或者 PPT,这样我就能快速浏览一下重点呢?”我一听,这事儿挺有意思的,就琢磨开了。结合 AI 技术能轻松实现批量化处理,今天就来跟大家分享一下。

Image

1、文章整理总结

Image

先来说说文章整理的事。咱们可以用像通义千问那样的音视频速读功能,把录音变成文字稿。我试过好几个工具,发现 DeepSeek 总结得最好。所以,直接把录音稿扔给 DeepSeek,让它帮忙总结。

我有个提示词,大家可以参考一下:

请帮我把录音稿总结出完整的文章,去掉与中心主题无关或广告成分的内容,最终变成一篇完整干货的稿子,需要确保文章通顺,逻辑严谨,内容确保与录音稿一致。下面是录音稿:<此处粘贴全部录音稿>

Image

这样就能轻松搞定一篇干干净净的文章,全是干货,没多余的东西。

Image

2、转化为结构化大纲

接下来,要把它变成结构化的 PPT 大纲。同样还是使用 DeepSeek 把长篇文章提炼成适合 Marp 用的 PPT 结构化内容。

下面是我使用的提示词,大家可以参考一下:

你是一位专业教学设计师,擅长将长篇文章提炼成适合Marp的PPT结构化内容。请严格遵循以下规则处理:---### **核心任务**  将输入的完整课程文章转换为**Marp兼容的Markdown格式**,要求:  1. **信息提炼**:提取核心论点,删除冗余解释  2. **逻辑分页**:每个二级标题模块必须独立成页  3. **Marp语法**:正确使用分页符和图片占位  ---### **Marp格式规范**  ```# 课程标题(自动提取关键词生成)<!-- 首页自动生成 -->---## 模块1标题![模块1相关图片]  ● 核心论点  - 关键证据1  - 关键证据2  ---## 模块2标题  1. 第一步  2. 第二步  3. 第三步  ![流程图示意]  ```---### **关键规则**  1. **分页控制**:     - 每个`## 二级标题`前必须加`---`分页符     - 标题与内容之间空一行     - 图片独占一行(不嵌入列表)  2. **内容处理**:     - 将长段落拆分为`●`论点 + `-`论据     - 流程性内容用`1. 2. 3.`编号     - 保留硬数据(如"准确率提升15%")  3. **视觉优化**:     - 每个模块开头插入`![图片描述]`占位     - 复杂概念旁添加图片提示(如`![神经网络结构图]`)  ---### **禁止项**  ❌ 三级及以上标题  ❌ 未分页的连续内容  ❌ 代码块包裹标记(```)  ❌ "谢谢观看"等非内容元素  ---### **示例对比**  [输入文章]  "卷积神经网络(CNN)包含卷积层、池化层和全连接层。其中卷积层通过滤波器提取特征..."  [输出格式]  ```# 深度学习核心模型---## 卷积神经网络结构  ![CNN架构示意图]  ● 核心组件  - 卷积层(特征提取)  - 池化层(降维)  - 全连接层(分类)  ---## 训练流程  1. 前向传播  2. 损失计算  3. 反向传播  ![训练过程图]  ```请处理以下课程文章:  {{course_article}}  

最终生成的大纲如下:

Image

3、生成 PPT 方法

现在网上有很多在线生成 PPT 的方法,但我今天要分享的是用 Marp 来批量生产 PPT,还能自定义主题。

在 Mac 上安装

  1. 1. 安装 Node.js(如果尚未安装):
    brew install node
  2. 2. 安装 Marp CLI:
    npm install -g @marp-team/marp-cli
  3. 3. 安装 Python 依赖:
    pip install Pillow pdf2image
  4. 4. 安装 Poppler:
    brew install poppler

参考代码

把下面的代码复制到md_to_ppt.py文件里。

import argparseimport osimport subprocessfrom pdf2image import convert_from_pathimport shutilimport sys
def inject_marp_header(input_file, output_file, theme_file):    with open(input_file, 'r', encoding='utf-8') as file:        content = file.read()
    marp_header = f"""---marp: truetheme: {os.path.abspath(theme_file)}paginate: truesize: 16:9---
"""    with open(output_file, 'w', encoding='utf-8') as file:        file.write(marp_header + content)
def convert_md_to_formats(input_file, output_dir, formats, theme_file):    input_file = os.path.abspath(input_file)    output_dir = os.path.abspath(output_dir)    theme_file = os.path.abspath(theme_file)
    if not os.path.exists(output_dir):        os.makedirs(output_dir)
    filename = os.path.splitext(os.path.basename(input_file))[0]    preprocessed_file = os.path.join(output_dir, f"preprocessed_{filename}.md")
    # 创建预处理的 Markdown 文件    inject_marp_header(input_file, preprocessed_file, theme_file)
    try:        pdf_generated = False        for format in formats:            output_file = os.path.join(output_dir, f"{filename}.{format}")
            if format in ['pdf', 'pptx', 'html']:                marp_command = [                    "marp", "--html", "--allow-local-files",                    "--theme", theme_file,                    "--output", output_file,                    preprocessed_file                ]                print(f"执行命令: {' '.join(marp_command)}")                result = subprocess.run(marp_command, check=False, cwd=os.path.dirname(input_file), capture_output=True, text=True)                if result.returncode != 0:                    print(f"错误: Marp 命令失败")                    print(f"标准输出: {result.stdout}")                    print(f"标准错误: {result.stderr}")                    sys.exit(1)                print(f"已生成 {output_file}")                if format == 'pdf':                    pdf_generated = True
            elif format in ['png', 'jpeg']:                if not pdf_generated:                    pdf_file = os.path.join(output_dir, f"{filename}.pdf")                    marp_command = [                        "marp", "--html", "--allow-local-files",                        "--theme", theme_file,                        "--output", pdf_file,                        preprocessed_file                    ]                    print(f"执行命令: {' '.join(marp_command)}")                    result = subprocess.run(marp_command, check=False, cwd=os.path.dirname(input_file), capture_output=True, text=True)                    if result.returncode != 0:                        print(f"错误: Marp 命令失败")                        print(f"标准输出: {result.stdout}")                        print(f"标准错误: {result.stderr}")                        sys.exit(1)                    pdf_generated = True
                pages = convert_from_path(pdf_file, dpi=300)                for i, page in enumerate(pages):                    image_file = os.path.join(output_dir, f"{filename}_{i + 1}.{format}")                    page.save(image_file, format.upper())                print(f"已生成 {format.upper()} 文件在 {output_dir}")
    except Exception as e:        print(f"发生错误: {str(e)}")        sys.exit(1)
def process_input(input_path, output_dir, formats, theme_file):    input_path = os.path.abspath(input_path)    output_dir = os.path.abspath(output_dir)    theme_file = os.path.abspath(theme_file)
    if os.path.isfile(input_path):        convert_md_to_formats(input_path, output_dir, formats, theme_file)    elif os.path.isdir(input_path):        for filename in os.listdir(input_path):            if filename.endswith('.md'):                file_path = os.path.join(input_path, filename)                file_output_dir = os.path.join(output_dir, os.path.splitext(filename)[0])                convert_md_to_formats(file_path, file_output_dir, formats, theme_file)    else:        print(f"错误:{input_path} 既不是文件也不是目录")
if __name__ == "__main__":    parser = argparse.ArgumentParser(description="将Markdown文件转换为指定格式(PDF、PPTX、HTML、PNG和JPEG)")    parser.add_argument("input_path", help="输入的Markdown文件或目录路径")    parser.add_argument("output_dir", help="输出目录路径")    parser.add_argument("--formats", nargs='+', default=['pdf', 'pptx', 'png'],                        help="输出格式,可选 pdf, pptx, html, png, jpeg,可以多选")    parser.add_argument("--theme", default="default", help="自定义主题CSS文件路径")    args = parser.parse_args()
    process_input(args.input_path, args.output_dir, args.formats, args.theme)

使用方法

  1. 1. 转换单个文件到所有格式:
    python md_to_ppt.py input.md output_dir
  2. 2. 转换单个文件到指定格式:
    python md_to_ppt.py input.md output_dir --formats pdf png
  3. 3. 使用自定义主题:
    python md_to_ppt.py input.md output_dir --theme path/to/custom-theme.css
  4. 4. 处理整个目录:
    python md_to_ppt.py input_directory output_dir
  5. 5. 组合使用:
    python md_to_ppt.py input_directory output_dir --formats pptx png --theme custom-theme.css

自定义主题

如果想自定义主题,就创建一个custom-theme.css文件,来调整演示文稿的样式。比如:

/* custom-theme.css */@import 'default';section {  background: #f5f5f5;  font-family: Arial, sans-serif;}h1 {  color: #333;  font-size: 2.5em;}h2 {  color: #666;  font-size: 2em;}

4、效果

直接用 AI 生成的 Markdown 大纲,按照上面的方法,就能直接生成 PPT。

Image

5、总结

用这个方法,朋友的培训视频内容很快就整理成了文章和 PPT,只能说现在 AI 真的是太提效了!


往期精彩

从公式到语音:如何用 AI 把 LaTeX 数学试卷变成自然语言讲稿?

自媒体人必备!公众号文章自动采集神器,3 步搞定批量离线保存

从 AI 生成试卷到专业 Word 排版:MD2WD 高效解决方案

AI 编程小白必看:如何批量下载公众号文章为 Markdown 格式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值