AI-Video2Text

基于 Whisper 模型。

前言

现在好像没啥时间看网课了……如果把网课转成 Markdown 格式就可以快速领会网课精神,也可方便拿网课文档与 AI 对线!

资源

正文

想法是将网课视频下载到本地,用 Whisper 识别网课中的字幕,再从网课视频中截图,将字幕文本与截图合并成 Markdown。

Vibe Coding 一个这样的环境,由于 Whisper 可以本地 GPU 推理,向 AI 强调一下一定要用 GPU;由于 Whisper 可能下载不下来,向 AI 强调一下可以将本地路径作为模型路径。

video2notes
run.py
pyproject.toml
src
Mermaid
正在加载图表…

环境配置:

shell
uv sync
参数默认值说明
-i, --input-dir输入视频目录,支持 .mp4/.mkv/.avi/.mov;--markdown-only 模式可不填
-o, --output-dir(必填)输出根目录
--modeltinyWhisper 模型名 (tiny/base/small/medium/large) 或 .pt 模型文件路径,如 models/medium.pt
--device自动检测cpucuda
--language自动检测语言代码,如 zh。中文课程自动识别
--interval120固定间隔模式的截图间隔(秒),如 3060300
--scene-detect关闭启用场景变化检测关键帧模式(替代固定间隔)
--scene-threshold0.1场景变化灵敏度 (0.0–1.0),越低越敏感、帧越多
--formatjpg截图/关键帧格式:jpg(体积小)或 png(无损)
--force重新处理所有视频(忽略已存在的输出)
--markdown-only仅从已存在的 SRT + 截图重新生成 Markdown(无需 -i
--transcribe-only仅运行语音识别,生成 subtitle.srt(不截图、不生成笔记)
--screenshot-only仅提取截图/关键帧(跳过语音识别)

开跑示例,tiny 模型效果不太行,medium 模型足够用了:

shell
# 场景变化检测默认阈值 0.1,适合大多数课程视频(medium 模型 + GPU)
uv run video2notes -i "D:\Videos\我的课程" -o "D:\Output\我的课程" --model medium --scene-detect
 
# 自行设置场景变化检测阈值
uv run video2notes -i "D:\Videos\课程" -o "D:\Output\课程" --model medium --scene-detect --scene-threshold 0.2
 
# 使用 PNG 无损格式
uv run video2notes -i "D:\Videos\课程" -o "D:\Output\课程" --scene-detect --format png
 
# 自动检测 GPU/CPU,每 2 分钟截一张图(默认)
uv run video2notes -i "D:\Videos\我的课程" -o "D:\Output\我的课程" --model medium
 
# CPU 模式
uv run video2notes -i "D:\Videos\课程" -o "D:\Output\课程" --model tiny --device cpu
 
# 自定义截图间隔(每 30 秒一张图)
uv run video2notes -i "D:\Videos\课程" -o "D:\Output\课程" --interval 30
 
# 仅语音识别(只生成 subtitle.srt)
uv run video2notes -i "D:\Videos\课程" -o "D:\Output\课程" --transcribe-only --model medium
 
# 仅截图(只生成 screenshots/,跳过转录)
uv run video2notes -i "D:\Videos\课程" -o "D:\Output\课程" --screenshot-only --scene-detect
 
# 仅重新生成 Markdown(从已有的 .srt + 截图生成 notes.md,无需 -i)
uv run video2notes -o "D:\Output\课程" --markdown-only

一阵计算后,得到相应的字幕、截图和合并后的笔记,有空慢慢看(或是拿去与 AI 对线)吧:

webp

還會把台灣老師講的課識別成繁體字,真的很棒棒喔!