360 Secure SkillHub
360 安全技能中心

ReelTalk

接收视频链接,经 shell 步骤用 yt-dlp 抓取元数据与音频、ffmpeg 按 300 秒分片、Whisper base 模型转写,合并后生成英文摘要;无语音时用 ffmpeg 抽帧加 Tesseract OCR 兜底。X/Twitter 走 fxtwitter 取视频直链。需 yt-dlp、whisper、tesseract、ffmpeg,声明支持 darwin/linux。

ameshalexk
ameshalexk
热度 67.80
最近更新 2026-05-11 17:46:13
分类:效率依赖:代码执行 / 读写文件 / 第三方 API / 内部调用大模型应用场景:摘要总结 / 数据处理 / 文件转换 / 自动化脚本

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add reeltalk
Metadata
name
reeltalk
description
Helper for processing shared video links. Takes a URL, downloads the audio track, creates a text transcript, and produces a summary. Supports all major platforms. Good for understanding video content without watching it.
metadata
{"openclaw":{"emoji":"🎬","os":["darwin","linux"],"requires":{"bins":["yt-dlp","whisper","tesseract","ffmpeg"]},"install":[{"id":"brew-yt-dlp","kind":"brew","formula":"yt-dlp","bins":["yt-dlp"],"label":"Install yt-dlp (brew)"},{"id":"brew-whisper","kind":"brew","formula":"whisper","bins":["whisper"],"label":"Install Whisper (brew)"},{"id":"brew-tesseract","kind":"brew","formula":"tesseract","bins":["tesseract"],"label":"Install Tesseract OCR (brew)"},{"id":"brew-tesseract-lang-hin","kind":"brew","formula":"tesseract-lang","bins":[],"label":"Install Hindi language pack for Tesseract (brew)"}]}}

ReelTalk

Process a video link: download audio, transcribe, and summarize. Falls back to image text extraction when no speech is present.

⚠️ Videos longer than 5 minutes will take roughly 1 min of processing per minute of video on CPU. Warn the user before starting.

Steps

0. Fresh start

rm -rf /tmp/reeltalk_*
mkdir -p /tmp/reeltalk_work

1. Validate URL

Store the user-provided URL in a variable and reject anything that looks like a shell injection. Only allow http://, https://, or www. prefixes. Reject inputs containing shell metacharacters (;, |, &, `, $, (, )).

URL="<url>"
# Reject shell metacharacters
if printf '%s' "$URL" | grep -qE '[;|&`$()]'; then
  echo "Invalid URL: contains disallowed characters"
  exit 1
fi

2. Get metadata

yt-dlp --print title --print description --print uploader "$URL" \
  2>/dev/null > /tmp/reeltalk_work/metadata.txt

3. Audio

yt-dlp -f "bestaudio" -o "/tmp/reeltalk_work/audio.%(ext)s" "$URL"

4. Check length & split

ffprobe -v error -show_entries format=duration -of \
  default=noprint_wrappers=1:nokey=1 /tmp/reeltalk_work/audio.m4a

If duration > 300, warn user, then split:

ffmpeg -i /tmp/reeltalk_work/audio.m4a -f segment -segment_time 300 \
  -acodec pcm_s16le -ac 1 -ar 16000 /tmp/reeltalk_work/chunk_%03d.wav

4. Transcribe

Use the base Whisper model (memory-efficient on 8GB machines).

for chunk in /tmp/reeltalk_work/chunk_*.wav; do
  base=$(basename "$chunk" .wav)
  whisper "$chunk" --model base --language en --task transcribe \
    2>/dev/null > "/tmp/reeltalk_work/transcript_${base}.txt"
done

For short videos, transcribe directly:

whisper /tmp/reeltalk_work/audio.m4a --model base --language en --task transcribe \
  2>/dev/null > /tmp/reeltalk_work/full_transcript.txt

5. Assemble

> /tmp/reeltalk_work/full_transcript.txt
for f in /tmp/reeltalk_work/transcript_chunk_*.txt; do
  echo "=== $(basename "$f" .txt) ===" >> /tmp/reeltalk_work/full_transcript.txt
  cat "$f" >> /tmp/reeltalk_work/full_transcript.txt
  echo "" >> /tmp/reeltalk_work/full_transcript.txt
done

7. OCR fallback

If transcript is empty or under 20 words:

yt-dlp -f "bv*+ba/b" -o "/tmp/reeltalk_work/video.mp4" "$URL"
mkdir -p /tmp/reeltalk_work/frames
ffmpeg -i /tmp/reeltalk_work/video.mp4 -vf "fps=1" -vsync vfr \
  -q:v 2 /tmp/reeltalk_work/frames/frame_%04d.jpg
for f in /tmp/reeltalk_work/frames/frame_*.jpg; do
  tesseract "$f" stdout --psm 6 2>/dev/null
done > /tmp/reeltalk_work/ocr_output.txt

7. Summarize

Combine metadata + transcript (or OCR) into a plain English summary.

Platform notes

  • X/Twitter: use fxtwitter API (yt-dlp fails). Extract the user and status ID from the original URL, then call the API with a constructed URL (do not pass the raw user URL to curl):
    curl -sL "https://api.fxtwitter.com/<user>/status/<id>" | jq -r '.media.videos[0].url'
    
    Validate the returned video URL (must start with https://) before downloading with curl.
  • TikTok: yt-dlp handles fine.
  • Instagram: yt-dlp handles fine.

Requirements

  • yt-dlp (brew), whisper (brew), tesseract (brew), ffmpeg (brew)
  • Whisper cache: ~/.cache/whisper/ (base model ~142MB)