Douyin Video Fetch
抖音视频下载,下载抖音视频到本地(优先无水印版),支持 URL/视频 ID 和批量输入,为后续视频分析和复刻提供原始素材。
下载抖音视频到本地(无水印优先)。用于给后续视频分析/复刻提供原始素材,支持 URL 或 video_id 输入、批量列表输入与统一输出目录。
clawhub install douyin-video-fetch视频裁剪:按时间范围对视频进行精确的剪裁、切割或片段提取操作。
Use when the user wants to trim, cut, or extract a specific segment from a video by time range — e.g. "cut from 1:30 to 3:00", "trim the first 2 minutes", "e...
# 安装 Skill(会下载 SKILL.md 到 .claude/skills/) clawhub install video-clip # 之后直接对 Claude 说"用 Video Clip 帮我…"即可
# 同样的安装命令,兼容所有支持 SKILL.md 的 AI 编程工具 clawhub install video-clip
此 Skill 兼容 OpenClaw 标准。 安装后自动生成 SKILL.md 文件,任何支持 OpenClaw 协议的 AI Agent(Claude Code、Cursor、Windsurf 等)均可直接调用。
需要注册 Clawhub 账户,视频处理可能需要等待
bash scripts/clip.sh <input> <start> <end_or_+duration> [output]
input | Yes | Path to source video |
| start | Yes | Start time: HH:MM:SS, MM:SS, or seconds |
| end_or_+duration | Yes | End time (same format) or +N for N seconds from start |
| output | No | Output path (default: <name>_clip.<ext>) |# Trim 1:30 → 3:00
bash scripts/clip.sh video.mp4 "1:30" "3:00"
# First 2 minutes (120 seconds from start)
bash scripts/clip.sh video.mp4 "0" "+120"
# Extract a scene with custom output name
bash scripts/clip.sh interview.mp4 "5:00" "7:30" highlight.mp4
# Check if key is configured
echo "Key: ${SPARKI_API_KEY:+configured}${SPARKI_API_KEY:-MISSING}"
# If missing — configure (takes effect immediately, no restart needed):
openclaw config set env.SPARKI_API_KEY "sk_live_your_key_here"
# Get a key: email [email protected]
# Usage: edit_video.sh <file> <tips> [prompt] [aspect_ratio] [duration_seconds]
#
# tips: comma-separated style IDs
# 1 = Energetic / fast-paced
# 2 = Cinematic / slow motion
# 3 = Highlight reel / best moments ← use this for smart extraction
# 4 = Talking-head / interview
#
# Returns: a 24-hour download URL for the AI-processed video (stdout)
SPARKI_API_BASE="https://agent-api-test.aicoding.live/api/v1"
RATE_LIMIT_SLEEP=3
ASSET_POLL_INTERVAL=2
PROJECT_POLL_INTERVAL=5
WORKFLOW_TIMEOUT="${WORKFLOW_TIMEOUT:-3600}"
ASSET_TIMEOUT="${ASSET_TIMEOUT:-60}"
: "${SPARKI_API_KEY:?Error: SPARKI_API_KEY is required. Run: openclaw config set env.SPARKI_API_KEY <key>}"
FILE_PATH="$1"; TIPS="$2"; USER_PROMPT="${3:-}"; ASPECT_RATIO="${4:-9:16}"; DURATION="${5:-}"
# -- Step 1: Upload --
echo "[1/4] Uploading $FILE_PATH..." >&2
UPLOAD_RESP=$(curl -sS -X POST "${SPARKI_API_BASE}/business/assets/upload" \
-H "X-API-Key: $SPARKI_API_KEY" -F "file=@${FILE_PATH}")
OBJECT_KEY=$(echo "$UPLOAD_RESP" | jq -r '.data.object_key // empty')
[[ -z "$OBJECT_KEY" ]] && { echo "Upload failed: $(echo "$UPLOAD_RESP" | jq -r '.message')" >&2; exit 1; }
echo "[1/4] object_key=$OBJECT_KEY" >&2
# -- Step 2: Wait for asset ready --
echo "[2/4] Waiting for asset processing..." >&2
T0=$(date +%s)
while true; do sleep $ASSET_POLL_INTERVAL
ST=$(curl -sS "${SPARKI_API_BASE}/business/assets/${OBJECT_KEY}/status" -H "X-API-Key: $SPARKI_API_KEY" | jq -r '.data.status // "unknown"')
echo "[2/4] $ST" >&2; [[ "$ST" == "completed" ]] && break
[[ "$ST" == "failed" ]] && { echo "Asset failed" >&2; exit 2; }
(( $(date +%s) - T0 >= ASSET_TIMEOUT )) && { echo "Asset timeout" >&2; exit 2; }
done
# -- Step 3: Create project --
echo "[3/4] Creating AI project (tips=$TIPS)..." >&2
sleep $RATE_LIMIT_SLEEP
KEYS_JSON=$(echo "$OBJECT_KEY" | jq -Rc '[.]')
TIPS_JSON=$(echo "$TIPS" | jq -Rc 'split(",") | map(tonumber? // .)')
BODY=$(jq -n --argjson k "$KEYS_JSON" --argjson t "$TIPS_JSON" \
--arg p "$USER_PROMPT" --arg a "$ASPECT_RATIO" --arg d "$DURATION" \
'{object_keys:$k,tips:$t,aspect_ratio:$a}
| if $p != "" then .+{user_prompt:$p} else . end
| if $d != "" then .+{duration:($d|tonumber)} else . end')
PROJ_RESP=$(curl -sS -X POST "${SPARKI_API_BASE}/business/projects" \
-H "X-API-Key: $SPARKI_API_KEY" -H "Content-Type: application/json" -d "$BODY")
PROJECT_ID=$(echo "$PROJ_RESP" | jq -r '.data.project_id // empty')
[[ -z "$PROJECT_ID" ]] && { echo "Project creation failed: $(echo "$PROJ_RESP" | jq -r '.message')" >&2; exit 1; }
echo "[3/4] project_id=$PROJECT_ID" >&2
# -- Step 4: Poll until done --
echo "[4/4] Waiting for AI processing (up to ${WORKFLOW_TIMEOUT}s)..." >&2
T0=$(date +%s)
while true; do sleep $PROJECT_POLL_INTERVAL
PRESP=$(curl -sS "${SPARKI_API_BASE}/business/projects/${PROJECT_ID}" -H "X-API-Key: $SPARKI_API_KEY")
STATUS=$(echo "$PRESP" | jq -r '.data.status // "UNKNOWN"')
echo "[4/4] $STATUS" >&2
if [[ "$STATUS" == "COMPLETED" ]]; then
echo "$PRESP" | jq -r '.data.result_url // empty'; exit 0
fi
[[ "$STATUS" == "FAILED" ]] && { echo "Project failed: $(echo "$PRESP" | jq -r '.data.error')" >&2; exit 4; }
(( $(date +%s) - T0 >= WORKFLOW_TIMEOUT )) && { echo "Timeout. Check manually: project_id=$PROJECT_ID" >&2; exit 3; }
done
# Inline usage (save the block above as edit_video.sh first, or call it directly)
RESULT_URL=$(bash scripts/edit_video.sh speech.mp4 "3" "extract the most insightful moments" "9:16" 120)
echo "Download: $RESULT_URL"
ffmpeg: command not found | ffmpeg not installed | brew install ffmpeg |
| Output file is empty | Start/end times out of range | Check video duration with ffprobe input.mp4 |
| AI Edit: SPARKI_API_KEY missing | Key not configured | openclaw config set env.SPARKI_API_KEY <key> |
| AI Edit: 401 | Invalid key | Check key at [email protected] |clawhub run video-clip --input movie.mp4 --start 00:01:30 --end 00:03:00 --format mp4抖音视频下载,下载抖音视频到本地(优先无水印版),支持 URL/视频 ID 和批量输入,为后续视频分析和复刻提供原始素材。
下载抖音视频到本地(无水印优先)。用于给后续视频分析/复刻提供原始素材,支持 URL 或 video_id 输入、批量列表输入与统一输出目录。
clawhub install douyin-video-fetch