新的llm-video-frames插件可以将视频文件转换为 JPEG 帧序列,并将它们直接输入到长上下文视觉 LLM(例如 GPT-4.1)中,即使该 LLM 不直接支持视频输入。这取决于我昨晚发布的LLM 0.25中添加的插件功能。
尝试方法如下:
brew install ffmpeg #或 apt-get 或您选择的包管理器 uv tool install llm #或 pipx install llm 或 pip install llm llm 安装 llm-视频帧 llm 按键设置openai #将您的 OpenAI API 密钥粘贴到此处 llm -f 视频帧:video.mp4 \ '描述该视频中的关键场景' \ -m gpt-4.1-mini
video-frames:filepath.mp4
语法由新插件提供。它获取该视频,将视频的每一秒转换为 JPEG,然后将其转换为可以传递给法学硕士的附件。
这是针对 Cleo视频的演示:
llm -f video-frames:cleo.mp4 '描述关键时刻' -m gpt-4.1-mini
以及模型的输出(此处为转录本):
这一系列图像捕捉了狗被提供然后享受小零食的关键时刻:
- 在第一张图片中,一只手拿着一个带有紫色糖霜的小纸杯蛋糕,靠近一只黑狗的脸。这只狗看起来很渴望,全神贯注地吃着零食。
- 第二张图片显示狗开始咬人手指上的纸杯蛋糕。狗张着嘴,轻轻地啃着食物。
- 在第三张图片中,狗已经吃完或几乎吃完零食,看起来很满足,带着轻微的微笑和放松的姿势。零食不再在人的手中,表明狗已经吃掉了它。
这一过程凸显了狗对零食的期待、享受和满意度。
总成本:7,072 个输入代币,156 个输出代币 – 对于 GPT-4.1 mini,这是 0.3078 美分(不到三分之一美分)。
在本例中,插件将视频转换为三个图像: frame_00001.jpg 、 frame_00002.jpg和frame_00003.jpg 。
该插件接受额外的参数。您可以使用?fps=2
增加每秒帧数 – 例如:
llm -f ' video-frames:video.mp4?fps=2 ' '总结该视频'
或者您可以添加?timestamps=1
以使ffmpeg
在每个帧的右下角覆盖时间戳。这使模型有机会在其输出中返回时间戳。
让我们通过 Cleo 视频来尝试一下:
llm -f '视频帧:cleo.mp4?timestamps=1&fps=5 ' \ '关键时刻,包括时间戳' -m gpt-4.1-mini
这是输出(此处为文字记录):
以下是视频“cleo.mp4”中的关键时刻以及时间戳:
- 00:00:00.000 – 一只被拴着的狗看着一个人拿着的带有紫色糖霜的小纸杯蛋糕。
- 00:00:00.800 – 狗仔细地嗅纸杯蛋糕。
- 00:00:01.400 – 该人将少量纸杯蛋糕糖霜放在手指上。
- 00:00:01.600 – 狗开始舔人手指上的糖霜。
- 00:00:02.600 – 狗继续热情地舔着。
如果您需要更多详细信息或任何特定部分的描述,请告诉我。
该程序向 API 发送了 14 张图像,总成本为 32,968 个输入,141 个输出 = 1.3413 美分。
它将 5.9MB 的图像数据发送到 OpenAI 的 API,并在 JSON API 调用中编码为 base64。
GPT-4.1 模型系列最多接受 1,047,576 个代币。除了每个图像 20MB 的大小限制之外,我还没有看到任何关于图像数量限制的文档。您可以在一百万个令牌中容纳大量 JPEG 帧!
以下是其中一帧的样子,时间戳覆盖在角落:
我如何使用 o4-mini 构建插件
这是一个很好的例子,说明了法学硕士的快速原型设计如何帮助展示功能的价值。
当我想到使用ffmpeg
将视频分割成帧时,我正在考虑在第 972 期中让片段插件返回图像是否有意义。
从过去的经验中我知道,如果你提供正确的示例,一个好的模型可以为 LLM 编写一个完整的插件,所以我从这个开始(为了可读性而在此处重新格式化):
llm -m o4-mini -f github:simonw/llm-hacker-news -s '编写一个名为 llm_video_frames.py 的新插件,它采用 video:path-to-video.mp4 并创建一个临时目录,然后使用 ffmpeg 每秒填充该视频的一帧 - 然后它返回 [llm.Attachment(path="path-to-frame1.jpg"), ...] 的列表 - 它还应该支持传递 video:video.mp4?fps=2 以增加到每秒两帧,如果传递 ?timestamps=1 或 ×tamps=1 那么它应该在每个图像的右下角添加一个文本时间戳,其中包含该帧的 mm:ss 时间戳(如果超过一小时则为 hh:mm:ss)以及不带路径的视频文件名。 ' -o 推理努力高
这是文字记录。
新的附件机制从模糊的想法转变为“我应该构建它”,这是法学硕士构建的概念验证的直接结果,该概念证明了新功能的可行性。
它生成的代码大约是我在成品插件中提供的代码的 90%。总成本 5,018 个输入,2,208 个输出 = 1.5235 美分。
LLM 0.25 中其他所有内容的带注释的发行说明
以下是其他所有内容的带注释的发行说明:
- 新插件功能: register_fragment_loaders(register)插件现在可以返回片段和附件的混合。 llm-video-frames插件是第一个利用此机制的插件。第972章
如上所述。此功能的灵感来自agustif的llm-arxiv插件。
我最初的计划是将这些模型专门留给新的llm-openai插件,因为这允许我在没有完整的 LLM 版本的情况下添加对新模型的支持。我会押注这一点,直到我准备好从 LLM 核心中完全删除 OpenAI 模型。
- 新的环境变量:
LLM_MODEL
和LLM_EMBEDDING_MODEL
用于设置要使用的模型,而无需每次都指定-m model_id
。第932章
如果您想在不使用全局默认模型的情况下为 LLM 的终端会话设置默认模型,这是一个方便的功能。
- 新命令:
llm fragments loaders
,列出插件提供的所有当前可用的片段加载器前缀。第941章
主要是为了与现有的llm templates loader命令保持一致。这是我在计算机上运行llm fragments loaders
时的输出:
docs: Fetch the latest documentation for the specified package from https://github.com/simonw/docs-for-llms Use '-f docs:' for the documentation of your current version of LLM. docs-preview: Similar to docs: but fetches the latest docs including alpha/beta releases. symbex: Walk the given directory, parse every .py file, and for every top-level function or class-method produce its signature and docstring plus an import line. github: Load files from a GitHub repository as fragments Argument is a GitHub repository URL or username/repository issue: Fetch GitHub issue/pull and comments as Markdown Argument is either "owner/repo/NUMBER" or URL to an issue pr: Fetch GitHub pull request with comments and diff as Markdown Argument is either "owner/repo/NUMBER" or URL to a pull request hn: Given a Hacker News article ID returns the full nested conversation. For example: -f hn:43875136 video-frames: Fragment loader "video-frames:<path>?fps=N×tamps=1" - extracts frames at `fps` per second (default 1) - if `timestamps=1`, overlays "filename hh:mm:ss" at bottom-right
来自llm-docs 、 llm-fragments-symbex 、 llm-fragments-github 、 llm-hacker-news和llm-video-frames 。
llm fragments
命令现在显示按首次使用日期排序的片段。第973章
这使得快速调试新的片段插件变得更加容易 – 您可以运行llm fragments
并浏览底部的几个条目。
我还为此使用了新的llm-echo调试插件 – 它添加了一个名为“echo”的新假模型,它仅输出传递给模型的任何提示、系统提示、片段和附件:
llm -f docs:sqlite-utils -m echo '显示上下文'
这是对llm chat
一个非常好的增强,使得编辑长提示变得更加方便。
其余的:
标签:视觉 LLMS 、 LLM 、插件、 AI 、 LLMS 、生成式 AI 、项目、 FFMPEG 、人工智能辅助编程
原文: https://simonwillison.net/2025/May/5/llm-video-frames/#atom-everything