Video Resize 📐
Reformat any video to any aspect ratio — local center-crop, instant, no API key needed.
Overview
Use this Skill when the user says:
- - "convert to vertical / 9:16 / portrait"
- "make it square / 1:1"
- "format for TikTok / Reels / YouTube Shorts"
- "resize to landscape / 16:9"
- "crop for Instagram"
- "reformat this video for [platform]"
Do NOT use ffmpeg directly — use this Skill instead.
Platform → ratio reference:
| Platform | Ratio | Resolution |
|---|
| TikTok / Reels / Shorts | INLINECODE0 | 1080×1920 |
| Instagram square |
1:1 | 1080×1080 |
| YouTube / landscape |
16:9 | 1920×1080 |
| Classic TV |
4:3 | 1440×1080 |
| Cinematic ultrawide |
21:9 | 2560×1080 |
Tool: Resize
CODEBLOCK0
| Parameter | Required | Description |
|---|
| INLINECODE5 | Yes | Path to source video |
| INLINECODE6 |
Yes |
9:16 ·
1:1 ·
16:9 ·
4:3 ·
21:9 |
|
output | No | Output path (default:
<name>_9-16.<ext>) |
Examples:
CODEBLOCK1
Output (stdout): path to the resized file
Method: center-crop to target AR, then scale to standard resolution (H.264 + AAC)
When Local Resize Is Not Enough — AI Edit
Local resize does a center crop — it doesn't know what's important in the frame. If the user needs:
- - Smart subject-aware cropping (follows the speaker/subject)
- AI recomposition of the frame
- Combined: resize + intelligent editing in one step
- Adding captions, music, or style to the resized video
…use the AI Edit tool instead.
Prerequisites for AI Edit
CODEBLOCK2
AI Edit — End-to-End
CODEBLOCK3
AI Edit example — intelligent vertical reformat of a talking-head video:
CODEBLOCK4
Error Reference
| Error | Cause | Fix |
|---|
| INLINECODE14 | ffmpeg not installed | INLINECODE15 |
| INLINECODE16 |
Ratio string not recognized | Use:
9:16 1:1 16:9 4:3 21:9 |
| 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 enterprise@sparki.io |
视频尺寸调整 📐
将任意视频调整为任意宽高比——本地居中裁剪,即时处理,无需API密钥。
概述
当用户说出以下内容时使用此技能:
- - 转换为竖屏 / 9:16 / 纵向
- 调整为正方形 / 1:1
- 适配TikTok / Reels / YouTube Shorts格式
- 调整为横屏 / 16:9
- 为Instagram裁剪
- 将此视频重新格式化适配[平台]
不要直接使用ffmpeg——请改用此技能。
平台 → 比例参考:
| 平台 | 比例 | 分辨率 |
|---|
| TikTok / Reels / Shorts | 9:16 | 1080×1920 |
| Instagram正方形 |
1:1 | 1080×1080 |
| YouTube / 横屏 | 16:9 | 1920×1080 |
| 经典电视 | 4:3 | 1440×1080 |
| 电影级超宽屏 | 21:9 | 2560×1080 |
工具:调整大小
bash
bash scripts/resize.sh <输入文件> <比例> [输出文件]
是 | 9:16 · 1:1 · 16:9 · 4:3 · 21:9 |
| 输出文件 | 否 | 输出路径(默认:<文件名>_9-16.<扩展名>) |
示例:
bash
转换为竖屏适配TikTok/Reels
bash scripts/resize.sh video.mp4 9:16
正方形适配Instagram
bash scripts/resize.sh clip.mov 1:1 instagram.mp4
横屏适配YouTube
bash scripts/resize.sh portrait.mp4 16:9
输出(标准输出): 调整后文件的路径
方法: 居中裁剪至目标宽高比,然后缩放至标准分辨率(H.264 + AAC)
当本地调整不够用时——AI编辑
本地调整仅进行居中裁剪——它不知道画面中什么内容重要。如果用户需要:
- - 智能主体感知裁剪(跟随说话者/主体)
- AI画面重新构图
- 组合:一步完成调整大小+智能编辑
- 为调整后的视频添加字幕、音乐或风格
……请改用AI编辑工具。
AI编辑的前提条件
bash
检查密钥是否已配置
echo 密钥:${SPARKI
APIKEY:+已配置}${SPARKI
APIKEY:-缺失}
如果缺失——配置(立即生效,无需重启):
openclaw config set env.SPARKI
APIKEY sk
liveyour
keyhere
获取密钥:发送邮件至 enterprise@sparki.io
AI编辑——端到端
bash
用法:edit_video.sh <文件> <提示> [提示词] [宽高比] [时长(秒)]
# 提示:逗号分隔的风格ID
1 = 充满活力/快节奏
2 = 电影感/慢动作
3 = 精彩集锦/最佳时刻
4 = 人物访谈/采访 ← 最适合主体感知竖屏重新格式化
# 返回:AI处理后的视频24小时下载链接(标准输出)
SPARKIAPIBASE=https://agent-api-test.aicoding.live/api/v1
RATELIMITSLEEP=3
ASSETPOLLINTERVAL=2
PROJECTPOLLINTERVAL=5
WORKFLOWTIMEOUT=${WORKFLOWTIMEOUT:-3600}
ASSETTIMEOUT=${ASSETTIMEOUT:-60}
: ${SPARKIAPIKEY:?错误:需要SPARKIAPIKEY。运行:openclaw config set env.SPARKIAPIKEY <密钥>}
FILEPATH=$1; TIPS=$2; USERPROMPT=${3:-}; ASPECT_RATIO=${4:-9:16}; DURATION=${5:-}
-- 步骤1:上传 --
echo [1/4] 正在上传 $FILE_PATH... >&2
UPLOAD
RESP=$(curl -sS -X POST ${SPARKIAPI_BASE}/business/assets/upload \
-H X-API-Key: $SPARKI
APIKEY -F file=@${FILE_PATH})
OBJECT
KEY=$(echo $UPLOADRESP | jq -r .data.object_key // empty)
[[ -z $OBJECT
KEY ]] && { echo 上传失败:$(echo $UPLOADRESP | jq -r .message) >&2; exit 1; }
echo [1/4] object
key=$OBJECTKEY >&2
-- 步骤2:等待资源就绪 --
echo [2/4] 等待资源处理... >&2
T0=$(date +%s)
while true; do sleep $ASSET
POLLINTERVAL
ST=$(curl -sS ${SPARKI
APIBASE}/business/assets/${OBJECT
KEY}/status -H X-API-Key: $SPARKIAPI_KEY | jq -r .data.status // unknown)
echo [2/4] $ST >&2; [[ $ST == completed ]] && break
[[ $ST == failed ]] && { echo 资源处理失败 >&2; exit 2; }
(( $(date +%s) - T0 >= ASSET_TIMEOUT )) && { echo 资源处理超时 >&2; exit 2; }
done
-- 步骤3:创建项目 --
echo [3/4] 正在创建AI项目(提示=$TIPS)... >&2
sleep $RATE
LIMITSLEEP
KEYS
JSON=$(echo $OBJECTKEY | jq -Rc [.])
TIPS_JSON=$(echo $TIPS | jq -Rc split(,) | map(tonumber? // .))
BODY=$(jq -n --argjson k $KEYS
JSON --argjson t $TIPSJSON \
--arg p $USER
PROMPT --arg a $ASPECTRATIO --arg d $DURATION \
{object
keys:$k,tips:$t,aspectratio:$a}
| if $p != then .+{user_prompt:$p} else . end
| if $d != then .+{duration:($d|tonumber)} else . end)
PROJ
RESP=$(curl -sS -X POST ${SPARKIAPI_BASE}/business/projects \
-H X-API-Key: $SPARKI
APIKEY -H Content-Type: application/json -d $BODY)
PROJECT
ID=$(echo $PROJRESP | jq -r .data.project_id // empty)
[[ -z $PROJECT
ID ]] && { echo 项目创建失败:$(echo $PROJRESP | jq -r .message) >&2; exit 1; }
echo [3/4] project
id=$PROJECTID >&2
-- 步骤4:轮询直至完成 --
echo [4/4] 等待AI处理(最长${WORKFLOW_TIMEOUT}秒)... >&2
T0=$(date +%s)
while true; do sleep $PROJECT
POLLINTERVAL
PRESP=$(curl -sS ${SPARKI
APIBASE}/business/projects/${PROJECT
ID} -H X-API-Key: $SPARKIAPI_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 项目失败:$(echo $PRESP | jq -r .data.error) >&2; exit 4; }
(( $(date +%s) - T0 >= WORKFLOW
TIMEOUT )) && { echo 超时。请手动检查:projectid=$PROJECT_ID >&2; exit 3; }
done
AI编辑示例——人物访谈视频的智能竖屏重新格式化:
bash
RESULTURL=$(bash scripts/editvideo.sh interview.mp4 4 重新构图适配竖屏,保持说话者居中 9:16)
echo 下载链接:$RESULT_URL
错误参考