OpenClaw 媒体处理:视频、图片、GIF 全搞定

68次阅读

OpenClaw 媒体处理:视频、图片、GIF 全搞定

视频要截图、GIF 要搜索、图片要处理…媒体处理任务繁琐又重复。OpenClaw 集成 video-frames、gifgrep、canvas 等技能,让你自动化处理各种媒体需求。


01 媒体处理自动化是什么?

媒体处理自动化 是指通过 OpenClaw 集成 video-frames、gifgrep、canvas 等技能,实现视频截图、GIF 搜索、数据可视化等媒体任务的自动化处理。

核心能力: – 🎬 视频处理 — 关键帧提取、缩略图生成、格式转换 – 🎭 GIF 处理 — 搜索、下载、转换静态图 – 📊 数据可视化 — Canvas 生成图表、报告 – 🔄 批量处理 — 脚本组合,流水线作业


02 媒体处理场景


03 视频处理(video-frames)

环境准备

# 安装 ffmpeg
brew install ffmpeg

# 验证
ffmpeg -version

基础用法

# 提取第一帧
~/.openclaw/skills/video-frames/scripts/frame.sh video.mp4 --out frame.jpg

# 提取特定时间帧
~/.openclaw/skills/video-frames/scripts/frame.sh video.mp4 \
  --time 00:01:30 \
  --out frame-90s.jpg

实战案例 1:视频内容审核

#!/bin/bash
# video-review.sh

VIDEO="$1"
OUTPUT_DIR="./frames/$(basename $VIDEO .mp4)"
mkdir -p $OUTPUT_DIR

# 每隔 30 秒提取一帧
duration=$(ffprobe -v error -show_entries format=duration -of csv=p=0 "$VIDEO")
duration=${duration%.*}

for ((i=0; i<duration; i+=30)); do
  timestamp=$(printf "%02d:%02d:%02d" $((i/3600)) $((i%3600/60)) $((i%60)))
  ~/.openclaw/skills/video-frames/scripts/frame.sh "$VIDEO" \
    --time $timestamp \
    --out "$OUTPUT_DIR/frame-$(printf "%04d" $i).jpg"
done

echo " 已提取 $((duration/30)) 帧到 $OUTPUT_DIR"

实战案例 2:生成视频缩略图网格

#!/bin/bash
# video-thumbnail-grid.sh

VIDEO="$1"
OUTPUT="${VIDEO%.mp4}-grid.jpg"

# 使用 ffmpeg 生成 3x3 网格
ffmpeg -i "$VIDEO" -vf "fps=1/10,scale=320:180,tile=3x3" -frames:v 1 "$OUTPUT"

echo " 缩略图已生成: $OUTPUT"

04 GIF 处理(gifgrep)

安装 gifgrep

# 安装 gifgrep
brew install steipete/tap/gifgrep

# 或使用 go
go install github.com/steipete/gifgrep/cmd/gifgrep@latest

基础用法

# 搜索 GIF
gifgrep "hello"

# 限制结果数
gifgrep "congrats" --max 5

# JSON 输出
gifgrep "party" --json | jq '.[0].url'

# TUI 模式
gifgrep tui "thank you"

# 下载 GIF
gifgrep "awesome" --download --max 1

实战案例 3:自动回复 GIF

#!/bin/bash
# auto-gif-reply.sh

KEYWORD="$1"

# 搜索并下载 GIF
URL=$(gifgrep "$KEYWORD" --max 1 --format url)

if [-n "$URL"]; then
  # 下载
  curl -s "$URL" -o /tmp/reply.gif

  # 发送到聊天(使用 message 工具)# 注意:实际使用时需要替换为正确的 channel ID
  # message --target "channel_id" --media /tmp/reply.gif

  echo " 已发送 GIF: $KEYWORD"
else
  echo " 未找到相关 GIF"
fi

实战案例 4:GIF 转静态图

#!/bin/bash
# gif-to-still.sh

GIF="$1"

# 提取第 1.5 秒的帧(使用 action 参数)gifgrep --action still "$GIF" --at 1.5s -o still.png

# 生成帧网格(9 帧,3 列)gifgrep --action sheet "$GIF" --frames 9 --cols 3 -o sheet.png

echo " 已生成静态图和帧网格 "

05 Canvas 可视化

基础用法

# 生成简单图表(使用 canvas 工具)# canvas action="eval" --javascript "..."

# 示例 JavaScript 代码:const canvas = document.createElement('canvas');
canvas.width = 800;
canvas.height = 400;
const ctx = canvas.getContext('2d');

// 绘制柱状图
const data = [30, 50, 80, 40, 90];
const barWidth = 100;

data.forEach((value, i) => {
  ctx.fillStyle = '#3498db';
  ctx.fillRect(i * 120 + 50, 350 - value * 3, barWidth, value * 3);

  ctx.fillStyle = '#333';
  ctx.font = '14px Arial';
  ctx.fillText(value, i * 120 + 80, 370);
});

canvas.toDataURL();

实战案例 5:数据报告自动生成

#!/bin/bash
# data-report.sh

# 假设有数据文件
cat > /tmp/data.json << 'JSON'
{"labels": ["Q1", "Q2", "Q3", "Q4"],
  "values": [120, 190, 300, 250]
}
JSON

# 生成图表(使用 canvas 工具)# canvas action="eval" --javascript "..." --out /tmp/chart.png

# 示例 JavaScript 代码:const data = {"labels": ["Q1", "Q2", "Q3", "Q4"], "values": [120, 190, 300, 250]};
const canvas = document.createElement('canvas');
canvas.width = 800;
canvas.height = 400;
const ctx = canvas.getContext('2d');

// 背景
ctx.fillStyle = '#f8f9fa';
ctx.fillRect(0, 0, 800, 400);

// 标题
ctx.fillStyle = '#333';
ctx.font = 'bold 24px Arial';
ctx.fillText('季度销售数据', 50, 40);

// 柱状图
const max = Math.max(...data.values);
const barWidth = 120;
const spacing = 40;

data.values.forEach((value, i) => {const height = (value / max) * 280;
  const x = 80 + i * (barWidth + spacing);
  const y = 350 - height;

  // 柱子
  const gradient = ctx.createLinearGradient(x, y, x, y + height);
  gradient.addColorStop(0, '#667eea');
  gradient.addColorStop(1, '#764ba2');
  ctx.fillStyle = gradient;
  ctx.fillRect(x, y, barWidth, height);

  // 数值
  ctx.fillStyle = '#333';
  ctx.font = '16px Arial';
  ctx.fillText(value, x + barWidth/2 - 15, y - 10);

  // 标签
  ctx.fillText(data.labels[i], x + 40, 380);
});

canvas.toDataURL();

echo " 图表已生成: /tmp/chart.png"

06 综合实战

案例 6:视频内容摘要

#!/bin/bash
# video-summary.sh

VIDEO="$1"
OUTPUT="summary.md"

# 1. 提取关键帧(每 60 秒)FRAME_DIR="./frames"
mkdir -p $FRAME_DIR

ffmpeg -i "$VIDEO" -vf "fps=1/60,scale=640:360" "$FRAME_DIR/frame-%04d.jpg"

# 2. 用 AI 分析每帧(简化示例)echo "# 视频摘要 " > $OUTPUT
echo "" >> $OUTPUT

for frame in $FRAME_DIR/*.jpg; do
  # 这里可以调用 AI 分析图片
  echo "![帧]($frame)" >> $OUTPUT
  echo "" >> $OUTPUT
done

# 3. 提取音频转文字(如果有)ffmpeg -i "$VIDEO" -vn -acodec pcm_s16le -ar 16000 -ac 1 /tmp/audio.wav
~/.openclaw/skills/openai-whisper-api/scripts/transcribe.sh /tmp/audio.wav --out transcript.txt

echo "## 转录 " >> $OUTPUT
cat transcript.txt >> $OUTPUT

echo " 摘要已生成: $OUTPUT"

案例 7:社交媒体素材包

#!/bin/bash
# social-media-kit.sh

VIDEO="$1"
BASE_NAME=$(basename "$VIDEO" .mp4)
OUTPUT_DIR="./$BASE_NAME-kit"
mkdir -p $OUTPUT_DIR

echo "🎬 生成社交媒体素材包: $BASE_NAME"

# 1. 方形视频(Instagram)ffmpeg -i "$VIDEO" -vf "crop=min(iw\,ih):min(iw\,ih),scale=1080:1080" \
  -c:v libx264 -crf 23 "$OUTPUT_DIR/${BASE_NAME}-square.mp4"

# 2. 竖版视频(抖音 /TikTok)ffmpeg -i "$VIDEO" -vf "crop=iw*9/16:ih,scale=1080:1920" \
  -c:v libx264 -crf 23 "$OUTPUT_DIR/${BASE_NAME}-vertical.mp4"

# 3. 封面图
~/.openclaw/skills/video-frames/scripts/frame.sh "$VIDEO" \
  --time 00:00:05 \
  --out "$OUTPUT_DIR/${BASE_NAME}-cover.jpg"

# 4. GIF 预览(前 3 秒)ffmpeg -i "$VIDEO" -t 3 -vf "fps=10,scale=480:-1:flags=lanczos" \
  "$OUTPUT_DIR/${BASE_NAME}-preview.gif"

# 5. 缩略图网格
ffmpeg -i "$VIDEO" -vf "fps=1/5,scale=320:180,tile=3x3" \
  -frames:v 1 "$OUTPUT_DIR/${BASE_NAME}-grid.jpg"

echo "✅ 素材包已生成: $OUTPUT_DIR/"
ls -lh $OUTPUT_DIR

07 常见问题

Q1: ffmpeg 命令找不到

解决:

# macOS
brew install ffmpeg

# Ubuntu
sudo apt install ffmpeg

Q2: 视频提取帧质量差

优化:

# 使用高质量设置
ffmpeg -i video.mp4 -ss 00:01:00 -vframes 1 -q:v 2 output.jpg

Q3: gifgrep 搜索不到结果

检查:

# 确认 API Key
export GIPHY_API_KEY="your_key"
export TENOR_API_KEY="your_key"

Q4: Canvas 生成图片失败

解决:

# 确保在支持的环境中运行
# 或使用 headless 浏览器

08 总结

下一步: – 建立媒体处理流水线 – 结合 AI 实现智能内容分析 – 探索与飞书 /Slack 的媒体分享


本文是 OpenClaw 进阶技能系列第 9 篇,下一篇:《OpenClaw 安全运维:自动化巡检与加固》

#OpenClaw #媒体处理 #视频 #GIF #Canvas #ffmpeg IF #Canvas #ffmpeg 频 #GIF #Canvas #ffmpeg 频 #GIF #Canvas #ffmpeg**

正文完