n8n 视频拆解,逐帧分析并生成提示词

AI的出现,是否能替代IT从业者? 10w+人浏览 1.6k人参与

n8n 视频拆解,逐帧分析并生成提示词

通过 n8n 工作流结合 ffmpeg 和 AI 视觉模型,实现视频自动拆解、逐帧分析并生成提示词的完整自动化解决方案

点击关注undsky,回复:n8nfp 获取完整工作流

ffmpeg 提取视频帧

https://mp.weixin.qq.com/s/yhPJ_Nh1oD22EuxamPASGA 中介绍了重构镜像,并安装 ffmpeg。
https://mp.weixin.qq.com/s/Qf-alZiJLCvb-6mGW91L0w 中完成了视频的下载。
现在,我们用 ffmpeg 来提取视频帧。

新建n8n工作流

将下面代码复制到command节点,根据你的实际情况修改视频地址和保存地址

OUTPUT_DIR="/data/frames_$(date +%s)" && mkdir -p $OUTPUT_DIR && ffmpeg -i /data/douyin_video/douyin.wtf_douyin_7561764434223385902.mp4 -vf "fps=1,scale=640:-1" -q:v 5 $OUTPUT_DIR/frame_%04d.jpg && echo "文件已保存到: $OUTPUT_DIR" && ls -lh $OUTPUT_DIR/

运行后将每一帧保存到文件夹中

AI 提取图片提示词

这里我们使用阿里的视觉理解(qwen3-vl-plus)模型来根据图片生成提示词,并保存到 n8n 的 Data tables 中。

创建 table

为了将提示词持久化,我们先创建个数据表。选择 Data tables 选项卡,点击 Create data table

完整工作流

步骤
  1. 使用 Read/Write Files from Disk 节点获取视频帧。
  2. 使用 code 节点将图片转为 base64。
const out = [];
const input = $input.all();

for (let i = 0; i < input.length; i++) {
  const item = input[i];
  const binaryData = item.binary?.data;

  if (!binaryData) continue;

  const fileName = binaryData.fileName ?? 'unknown.jpg';
  const mimeType = binaryData.mimeType ?? 'image/jpeg';

  // 正确:传入 itemIndex + binaryPropertyName
  const binaryBuffer = await this.helpers.getBinaryDataBuffer(i, 'data');
  const base64String = binaryBuffer.toString('base64');

  out.push({
    json: {
      filename: fileName,
      imageBase64: `data:${mimeType};base64,${base64String}`,
      fileSize: binaryData.fileSize ?? binaryBuffer.length,
      mimeType,
      frameNumber: Number((fileName.match(/\d+/) ?? ['0'])[0]),
    },
    pairedItem: i,
  });
}

return out;

  1. 使用 loop 节点循环图片列表。
  2. 使用 http request 节点调用 qwen3-vl-plus 模型。
  3. 使用 code 节点将返回的图片信息解析。
// 提取 choices[0].message.content
const items = [];

for (const item of $input.all()) {
  const response = item.json;
  
  // 提取 content 字段
  const content = response.choices?.[0]?.message?.content || '';
  
  // 尝试解析 JSON(因为 content 是 JSON 字符串)
  let parsedContent = null;
  try {
    parsedContent = JSON.parse(content);
  } catch (error) {
    console.error('Failed to parse content:', error);
  }
  
  // 获取原始文件名
  const filename = item.json.filename || 'unknown';
  
  items.push({
    json: {
      filename: filename,
      prompt: content,  // 原始 JSON 字符串
      visual_style: parsedContent,  // 解析后的对象
      finish_reason: response.choices?.[0]?.finish_reason || '',
      timestamp: new Date().toISOString()
    }
  });
}

return items;

  1. 使用 Data tables Insert row节点将提示词持久化保存。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

undsky_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值