继续AI编排实战:带截图的连麦切片文章生成

相比于前面的单纯通过声音洗新闻稿件的文字内容,本次我们提升了一定的难度,面向连麦切片场景。

你怎么知道我喜欢看听勇哥和大冰的连麦?

那么,我们要处理的核心难点包括:

  1. 区分不同的发言人
  2. 最好能配一些连麦截图到文章里

先看看成品效果:

1. 架构总览

这套工作流通过 并行处理 极大提高了效率:

  • 输入端:支持 YouTube URL 下载或本地视频文件。

  • 音频线:提取音频 -> Deepgram (语音转文字 + 角色分离) -> 文本清洗。

  • 视频线:智能截图 (FFmpeg) -> Qshell (上传七牛云) -> 生成图片链接。

  • 汇聚端:文本 + 图片链接 -> DeepSeek (AI 深度改写与排版) -> 本地 Markdown 文件。

2. 环境准备

可以参考我之前的文章,基于node 16构建一个 debian 镜像,并内置 yt-dlpFFmpeg。 除此之外,需要安装一个 OSS 工具,因为我用的七牛云,所以是 Qshell,这个根据自己的情况定制就行。

以下是我的 Dockerfile,仅供参考吧:

dockerfile 复制代码
FROM node:20-bookworm

# 1. 接收构建参数
ARG HTTP_PROXY
ARG HTTPS_PROXY

USER root

# 2. 【系统层代理】
ENV http_proxy=${HTTP_PROXY}
ENV https_proxy=${HTTPS_PROXY}

# 安装系统工具 (Debian环境)
# 增加了 unzip,虽然 tar 也可以,但 unzip 处理某些 zip 包更方便,不过 qshell 是 tar.gz,这里只用 tar 即可
RUN apt-get update && \
    apt-get install -y python3 python3-pip ffmpeg wget && \
    rm -rf /var/lib/apt/lists/*

# -------------------------------------------------------
# 2.5 安装工具集:yt-dlp 和 Qshell (七牛命令行)
# -------------------------------------------------------
# 安装 yt-dlp
RUN wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -O /usr/local/bin/yt-dlp && \
    chmod a+rx /usr/local/bin/yt-dlp

# 安装 Qshell (添加到这里)
# Qshell v2.13.0 是目前比较稳定的版本
RUN wget https://devtools.qiniu.com/qshell-v2.13.0-linux-amd64.tar.gz -O /tmp/qshell.tar.gz && \
    tar -zxvf /tmp/qshell.tar.gz -C /tmp && \
    # 注意:解压后的文件夹名称通常包含版本号,移动并重命名为 qshell
    mv /tmp/qshell /usr/local/bin/qshell && \
    chmod +x /usr/local/bin/qshell && \
    rm /tmp/qshell.tar.gz
# -------------------------------------------------------

# 3. 【NPM 层代理】安装 n8n
RUN npm config set proxy ${HTTP_PROXY} && \
    npm config set https-proxy ${HTTPS_PROXY} && \
    npm install -g n8n && \
    npm config delete proxy && \
    npm config delete https-proxy

# 4. 权限与清理
RUN mkdir -p /home/node/.n8n /files && \
    chown -R node:node /home/node/.n8n /files

# 清理环境变量
ENV http_proxy=""
ENV https_proxy=""

USER node
ENTRYPOINT ["n8n"]

启动命令 (在 docker-compose.yml 所在目录):

bash 复制代码
docker-compose up -d --build

3. 核心节点配置详解

看看节点布置吧。

3.1 截图节点 (Execute Command)

首先是截图,相比于新闻类的视频,连麦视频对于截图的精准性要求低很多。

以"大冰"的连麦视频为例,反正截来截去就是大冰一张瘦脸怼在哪里,所以啥时候截图问题不大,关键有图效果就会好很多。

不使用固定秒数,而是基于视频时长的 33%66% 处截图,并加上 日期时间戳 防止文件名冲突。

  • Command Shell 脚本:
bash 复制代码
#!/bin/sh

# ---------------- 配置区域 ----------------
VIDEO_PATH="{{ $json.full_path }}"
FOLDER_NAME="{{ $json.clean_name }}"

# 1. 确定输出目录
PARENT_DIR=$(dirname "$VIDEO_PATH")
OUTPUT_DIR="$PARENT_DIR/$FOLDER_NAME"
mkdir -p "$OUTPUT_DIR"

# 2. 获取视频时长 & 计算切入点
DURATION=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$VIDEO_PATH")
T1=$(awk "BEGIN {print $DURATION * 0.33}")
T2=$(awk "BEGIN {print $DURATION * 0.66}")

# 3. 生成当前系统时间戳 (防止文件名重复)
# 格式: 20250114-103005
NOW_STR=$(date +"%Y%m%d-%H%M%S")

# 4. 定义文件名 (带上序号)
IMG1="$OUTPUT_DIR/${NOW_STR}-1.jpg"
IMG2="$OUTPUT_DIR/${NOW_STR}-2.jpg"

# 5. 执行极速截图 (-ss 放在 -i 之前)
ffmpeg -ss "$T1" -i "$VIDEO_PATH" -frames:v 1 -q:v 2 -y "$IMG1" > /dev/null 2>&1
ffmpeg -ss "$T2" -i "$VIDEO_PATH" -frames:v 1 -q:v 2 -y "$IMG2" > /dev/null 2>&1

# 6. 输出 JSON 给后续节点
echo "{\"img1_path\": \"$IMG1\", \"img2_path\": \"$IMG2\", \"folder_path\": \"$OUTPUT_DIR\", \"clean_name\": \"$FOLDER_NAME\"}"

3.2 上传节点 (Execute Command - Qshell)

直接调用七牛云 CLI 上传文件夹,比 n8n 原生 S3 节点更稳定。

  • Command Shell 脚本:
bash 复制代码
#!/bin/sh

# -------- 配置区域 --------
AK="你的AccessKey"
SK="你的SecretKey"
BUCKET="你的存储桶名称"
DOMAIN="https://你的域名" # 注意:末尾不要带斜杠
# -------------------------

LOCAL_FOLDER="{{ JSON.parse($json.stdout).folder_path }}"

# 1. 登录七牛 (清理旧配置以防报错)
rm -rf ~/.qshell/account.db > /dev/null 2>&1
qshell account "$AK" "$SK" default

# 2. 遍历上传并生成链接
IMG_URLS=""
for file in "$LOCAL_FOLDER"/*.jpg; do
    if [ -f "$file" ]; then
        FILENAME=$(basename "$file")
        # 构造云端路径: pic/n8n/文件夹名/文件名
        KEY="pic/n8n/{{ JSON.parse($json.stdout).clean_name }}/$FILENAME"
        
        qshell fput "$BUCKET" "$KEY" "$file" --overwrite > /dev/null 2>&1
        IMG_URLS="$IMG_URLS $DOMAIN/$KEY"
    fi
done

# 3. 输出 URL 列表
echo "$IMG_URLS"

3.3 音频处理 (Deepgram)

Deepgram 是目前最强的声音处理AI厂商,关键还能白嫖200刀的额度。比如说连麦场景,它可以轻松分辨出不同发言人的声音。

这对我们的场景来说非常关键。

  • Method: POST
  • URL : https://api.deepgram.com/v1/listen?model=nova-2&language=zh&diarize=true
  • 关键点 : 必须开启 diarize=true 才能区分不同说话人。

3.4 数据汇聚 (Merge Node - 关键)

为了让 DeepSeek 同时拿到"文本"和"图片",必须正确设置 Merge 节点。

  • Mode (模式) : Combine (合并)
  • Combine By (合并方式) : Merge By Position (按位置合并)
  • 效果: 将上游两条线的数据合并为同一个 JSON 对象。

3.5 AI 写作 (DeepSeek Chat Model)

这是赋予文章灵魂的一步。

  • System Prompt: 设定为资深科技主笔。
  • User Prompt (Expression 模式):
javascript 复制代码
【对话素材】
{{ $json.text }} 

【可用配图列表】
{{ $json.markdown_list }}
(共 {{ $json.count }} 张图片)

【任务】
请基于以上对话素材撰写文章,并遵循以下规则:
1. **智能配图**:你拥有 {{ $json.count }} 张图片的支配权。请根据文章篇幅和叙事节奏,将这些图片**均匀地**插入到文中(例如:文章前1/3处插入第一张,后1/3处插入第二张)。必须原样输出Markdown图片链接。
2. **角色识别**:
   - 核心观点输出者是"{{ $('表单').item.json.player1 }}"(例如:大冰)。
   - 寻求建议者是"{{ $('表单').item.json.player2 }}"(例如:连麦人)。
   - 请识别文本中的 [发言人0] 和 [发言人1] 分别对应谁,并在文章中正确称呼,不要使用"发言人0"这种代号。
3. **风格要求**:拒绝流水账,使用深度分析或故事叙述风格,自动提炼小标题。

4. 使用说明

  1. 启动工作流 :点击 n8n 界面上的 Test Workflow 或使用 Webhook。
  2. 填写表单
    • Mode : 选择 download (下载 YouTube) 或 local_video (处理 Docker 目录下的文件)。
    • URL: 视频链接或文件名。
    • 核心角色: 填入"大冰"或"罗翔"等。
    • 对话人: 填入"连麦观众"或"学生"等。
  3. 查看结果
    • 运行结束后,在 Docker 挂载的 /files 目录下会生成一个 视频文件名__对话.md 文件。
    • 文件内已自动排版并插入了七牛云的图片链接。

5. 常见问题排查

  • Qshell 报错 executable file not found :
    • 说明 Docker 镜像没构建好。请确保运行了 docker-compose up -d --build
  • DeepSeek 读不到文本或图片 :
    • 检查 Merge 节点是否设置为了 Combine + Merge By Position。这是最常见的错误点。
  • 文件无法写入 :
    • 检查 Docker 挂载目录的权限。宿主机上执行 chmod -R 777 ./local_files 解决权限问题。
相关推荐
子兮曰6 小时前
OpenClaw入门:从零开始搭建你的私有化AI助手
前端·架构·github
Victor3566 小时前
https://editor.csdn.net/md/?articleId=139321571&spm=1011.2415.3001.9698
后端
吴仰晖6 小时前
使用github copliot chat的源码学习之Chromium Compositor
前端
1024小神6 小时前
github发布pages的几种状态记录
前端
Victor3566 小时前
Hibernate(89)如何在压力测试中使用Hibernate?
后端
灰子学技术8 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
不像程序员的程序媛8 小时前
Nginx日志切分
服务器·前端·nginx
Daniel李华8 小时前
echarts使用案例
android·javascript·echarts
北原_春希8 小时前
如何在Vue3项目中引入并使用Echarts图表
前端·javascript·echarts
JY-HPS8 小时前
echarts天气折线图
javascript·vue.js·echarts