关于 adobe-resize-photos-and-videos
此 Adobe 技能按指定尺寸、比例或预设调整照片与视频,适用于需要处理单个或批量媒体的创作者。它分别提供图像裁切与填充模式,以及视频调整尺寸流程。
主要功能
- 01按尺寸、比例或预设调整媒体
- 02图像重构、填充或提取主体
- 03支持图像批量处理
- 04视频裁切、加边或拉伸
- 05预览输出并上传至 Creative Cloud
适用场景
- 01为图像设置自定义宽高或比例
- 02为多张照片生成不同尺寸版本
- 03将视频调整为目标分辨率
- 04预览并保存处理后的文件
MCP 相关
此技能通过 Adobe 工具工作流处理媒体,并使用 MCP 工具完成文件选择、调整尺寸和预览。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ adobe/ skills --skill adobe-resize-photos-and-videos安装后在 Claude Code 中输入/adobe-resize-photos-and-videos确认已加载。
附带文件assets/intake-form.html
详细介绍
Adobe 调整照片和视频尺寸
将图像或视频调整为用户指定的尺寸、宽高比或命名尺寸。
如需社交媒体平台尺寸套装(Instagram、TikTok 等)→ 请改用 adobe-create-social-variations skill。
工具参考
| 步骤 | 工具 | 备注 |
|---|---|---|
| 打开文件选择器 | asset_add_file | 返回 presignedAssetUrl、assetId 和 mediaType |
| 在 CC 中查找资源 | asset_search | 对图像结果使用 asset_add_file 重新暂存;视频可直接使用 id |
| 渲染 PSD/AI | document_render_vector | 在调整尺寸前转换为 JPEG |
| 调整图像尺寸 | image_crop_and_resize | 每种尺寸调用一次;默认使用 reframe |
| 预览输出 | asset_preview_file | 一次调用即可预览所有输出 |
| 上传到 CC(开始) | asset_initialize_file_upload | 分块上传流程中的首次调用 |
| 上传到 CC(完成) | asset_finalize_file_upload | 第二次调用;返回用于画板的预签名 CC URL |
| 创建 Firefly 画板 | create_firefly_board | 传入带有完成上传 URL 的 import_adobe_storage |
| 调整视频尺寸 | video_resize | 返回用于轮询的 statusId |
| 轮询视频尺寸调整 | resizeVideoPoll | 延迟加载的工具——调用前需先加载 |
工作流
步骤 0 — 初始化 Adobe 工具
首先调用 adobe_mandatory_init。它会返回文件处理规则和工具路由指南,这些是完成后续工作流所必需的。
{ "skill_name": "adobe-resize-photos-and-videos", "skill_version": "1.1.0" }
步骤 1 — 权限检查
现在,adobe_mandatory_init 已确认 “Adobe for creativity” 连接器已启用,请对照上方的工具参考表,检查通过 “Adobe for creativity” 连接器可用的工具。
需要立即采取行动
步骤 1: 如果参数缺失或含糊不清 → 执行多步骤信息收集流程(见下方步骤 2)。
步骤 2: 如果尚未上传文件,执行步骤 3(asset_add_file({}))。
步骤 3: 判断是图像还是视频,并转到相应工作流(步骤 5 图像/视频)。
步骤 2 — 多步骤信息收集
当用户未提供完整参数(类型 + 尺寸 + 适配模式)时执行。 如果用户的消息已包含这三项,则完全跳过。
使用 AskUserQuestion 逐步收集参数。
步骤 2a — 类型
AskUserQuestion([{
question: "Photo or video?",
type: "single_select",
options: ["Photo", "Video"]
}])
步骤 2b — 尺寸
如果是照片(multi_select — 用户可选择一项或多项):
AskUserQuestion([{
question: "Dimensions — select all you need",
type: "multi_select",
options: [
"1080 × 1080 — Instagram square",
"1080 × 1350 — Instagram portrait",
"1080 × 1920 — Stories / Reels",
"1920 × 1080 — YouTube / landscape",
"1280 × 720 — YouTube thumbnail",
"1200 × 675 — X / Twitter post",
"1200 × 630 — Facebook / OG image",
"1080 × 566 — LinkedIn post",
"2560 × 1440 — YouTube banner",
"3840 × 2160 — 4K / UHD",
"400 × 400 — Profile / avatar",
"2480 × 3508 — A4 print (300 dpi)",
"Custom — I'll type it"
]
}])
如果用户选择了“自定义” → 追问:“请输入自定义尺寸(例如 1500×800):”
如果用户选择了多个预设尺寸 → 针对每种尺寸分别调用一次 image_crop_and_resize,
每次都使用相同的源 URI 和参数。最后一起预览所有输出。
如果是视频(multi_select — 用户可选择一项或多项):
AskUserQuestion([{
question: "Dimensions — select all you need",
type: "multi_select",
options: [
"1080 × 1920 — Reels / TikTok / Stories",
"1920 × 1080 — YouTube / landscape",
"1080 × 1080 — Square post",
"1280 × 720 — YouTube 720p",
"3840 × 2160 — 4K / UHD",
"854 × 480 — SD / 480p",
"Custom — I'll type it"
]
}])
如果用户选择了多个视频预设尺寸 → 每种尺寸分别提交一个 video_resize 任务,
轮询直至全部完成,然后一起预览所有输出。
步骤 2c — 适配模式
如果是照片(single_select):
AskUserQuestion([{
question: "Fit mode",
type: "single_select",
options: [
"Reframe — crop to fill",
"Pad — letterbox, no crop",
"Extract — isolate subject"
]
}])
如果是视频(single_select):
AskUserQuestion([{
question: "Fit mode",
type: "single_select",
options: [
"Letterbox — preserve ratio",
"Crop — fill, no bars",
"Stretch — force exact (distort)"
]
}])
步骤 2d — 智能焦点(仅照片)
AskUserQuestion([{
question: "Smart focus — where should the crop center?",
type: "single_select",
options: [
"Subject",
"Face / portrait",
"Upper body",
"Center (geometric)",
"Named object — I'll describe it"
]
}])
如果用户选择了“指定对象” → 追问:“请描述对象(例如‘红色汽车’、‘徽标’):”
步骤 2e — 选项(仅照片)
AskUserQuestion([{
question: "Any additional options?",
type: "multi_select",
options: [
"Batch — multiple images",
"Output: JPEG",
"Output: PNG"
]
}])
步骤 2f — 来源(仅视频)
AskUserQuestion([{
question: "Where is the video?",
type: "single_select",
options: [
"Upload from device",
"From Creative Cloud"
]
}])
步骤 3 — 获取源文件
关键提示 — /mnt/user-data/uploads/ 路径不是可用的 URL。
即使用户已附加文件,且该文件在上下文中显示为 /mnt/user-data/uploads/ 路径,
也不能将此路径传给任何 Adobe 工具。请调用 asset_add_file() 来暂存文件——Adobe 工具无法获取 /mnt/user-data/uploads/ 路径。
WRONG ❌ imageURI: "/mnt/user-data/uploads/photo.jpg"
WRONG ❌ imageURI: "file:///mnt/user-data/uploads/photo.jpg"
CORRECT ✅ call asset_add_file() → use presignedAssetUrl from picker context
尚无文件 → 立即打开文件选择器:
asset_add_file()
根据返回的 mediaType 判断类型:
image/*→ 图像工作流video/*→ 视频工作流
步骤 4 — 确定目标尺寸
| 用户的说法 | 换算为 |
|---|---|
1920×1080、1920x1080 | width: 1920, height: 1080 |
4K | 3840 × 2160 |
HD、1080p | 1920 × 1080 |
720p | 1280 × 720 |
480p | 854 × 480 |
A4 打印 | 2480 × 3508(300 DPI 纵向) |
Letter 打印 | 2550 × 3300(300 DPI 纵向) |
16:9、1:1、4:5、9:16 | 比例字符串 → 作为 output: "16:9" 传入 |
square | output: "1:1" |
仅指定宽度(800px wide) | width: 800,使用比例字符串以保持纵横比 |
如果表单中未指定目标尺寸,且用户消息中也未指定 → 询问:
“您需要什么尺寸?(例如 1920×1080、A4、16:9)”
图像工作流
步骤 5(图像)— 有效的 URI 来源
只有以下来源可用作 imageURI:
asset_add_file()返回的presignedAssetUrl✅- 先前工具调用返回的
outputUrl✅ - 用户提供的公开 HTTPS URL ✅
以下来源不可用作 imageURI:
/mnt/user-data/uploads/路径 ❌- 直接使用
asset_search返回的renditionURL❌ file://URI ❌
| 来源 | 处理方式 |
|---|---|
| 上传的文件 | asset_add_file() → presignedAssetUrl |
| CC 存储资产 | asset_search → 通过 asset_add_file() 重新暂存 → presignedAssetUrl |
| 先前工具的输出 | 直接使用 outputUrl |
| PSD / AI 文件 | document_render_vector(JPEG,300 DPI)→ outputPresignedUrl |
步骤 6(图像)— 适配模式
| 意图 | 模式 | 说明 |
|---|---|---|
| “调整为 WxH 大小”/默认 | reframe | 按目标比例进行最大范围裁剪并居中 — 不变形 |
| “不裁剪”“添加留白”“适应画布” | pad | 用白色填充空白区域 |
| “分离主体”“紧密裁剪” | extract | 紧密裁剪检测到的区域 |
默认值:reframe。 仅在用户明确要求时更改。
⛔
fit: "extract"与显式指定的{ width, height }不兼容——它会拉伸图像。请使用比例字符串或省略output。
步骤 7(图像)— 调用 image_crop_and_resize
image_crop_and_resize({
imageURI: presignedAssetUrl,
options: {
output: { width: 1920, height: 1080 }, // or "16:9"
fit: "reframe",
focus: "subject", // or "face", "upper_body", { prompt: "the car" }, { x:0.5, y:0.5 }
quality: 7
},
outputFileType: "jpeg" // or "png" if transparency needed
})
// result.outputUrl → use for preview or chaining
焦点指南:
"subject"— 默认;全身检测、风景、物体"face"— 肖像、头像"upper_body"— 胸部以上的裁剪{ prompt: "the logo" }— 用户表单输入中指定的对象名称{ x: 0.5, y: 0.5 }— 几何中心(没有明确主体时)
步骤 8(图像)— 批量处理
如果表单中选择了批量处理,或者用户提供了多个文件:
- 对每个文件调用
asset_add_file(),获取各自的预签名 URL - 对每个文件使用相同的参数调用
image_crop_and_resize - 收集所有
outputUrl值 - 在一次调用中,将所有输出传入
asset_preview_file
在此环境中,调用会按顺序运行。对于超过 10 张图像的批次,请在开始前向用户确认。
跨轮次分页(批次超过 20 张): 处理大型批次时,可能会在所有图像处理完成前填满对话上下文, 导致 Claude 在批次处理中途暂停。这是预期情况,并非错误。遇到这种情况时:
- 说明已完成和剩余的数量(例如“已完成 20 / 24 张——回复‘继续’以处理剩余图像”)
- 等待用户确认后再继续
- 恢复时,从下一张尚未处理的图像开始,继续处理直至全部完成
- 仅在处理完最后一张图像后,才一起预览所有输出
步骤 9(图像)— 预览 + 交付 + Firefly 画板
asset_preview_file({
assets: [
{ name: "photo_1920x1080.jpg", presignedAssetUrl: result.outputUrl },
// all successful outputs
]
})
保存到 CC + 创建 Firefly 画板
预览后,使用分块上传流程
(asset_initialize_file_upload → PUT 分块 → asset_finalize_file_upload)将每个输出上传到 CC 存储。
然后使用最终输出 URL 调用 Firefly 画板工具:
create_firefly_board({
import_adobe_storage: [
final_output_url_1,
final_output_url_2,
// ...
]
})
✅ 已确认可用(阶段): 使用
asset_finalize_file_upload返回的预签名 URL 调用import_adobe_storage,可成功填充画板。❌ 无法使用: 使用 CC 资源 ID(
urn:aaid:sc:US:...)调用import_generic_assets——USS 索引延迟会导致画板为空。如果画板创建失败或 URL 格式不正确,请省略画板链接(重试无济于事)。
在画板步骤之后发布完成摘要:
✅ Done! [N] image(s) resized and ready.
📥 Download:
• resized_1920x1080.jpg → <cc_storage_url>
[list individually if N ≤ 3, or single folder link if N > 3]
🎨 View in Firefly Board → <board_url> ← omit if board creation failed
视频工作流
步骤 5(视频)— 获取资源 ID
视频工具需要 assetId,而不是 URL。
| 来源 | 方法 |
|---|---|
通过 asset_add_file 上传 | 使用返回的 assetId |
| CC 存储 | 使用 filters.mediaType: "video/mp4" 调用 asset_search → 使用资源 id |
步骤 6(视频)— 常用目标尺寸
| 名称 | 尺寸 |
|---|---|
| 4K / UHD | 3840 × 2160 |
| 1080p / HD | 1920 × 1080 |
| 720p | 1280 × 720 |
| 480p | 854 × 480 |
| 纵向 9:16 | 1080 × 1920 |
| 正方形 1:1 | 1080 × 1080 |
步骤 7(视频)— 调用 video_resize
⚠️
resizeVideoPoll是延迟加载工具——尝试轮询前请先加载。 未加载便直接调用会失败,并报错“not loaded”。
video_resize({
assetId: videoAssetId,
width: targetW,
height: targetH,
mode: "letterbox" // default; see mode table below
})
// Returns { jobStatus: "pending", statusId }
模式——使用准确的 API 值(而非面向用户的标签):
| 用户说法 | API 值 | 行为 |
|---|---|---|
| “适应”“保持比例”“加黑边” | "letterbox" | 保持比例,并添加黑边(默认) |
| “填充”“裁剪以填满”“不要黑边” | "crop" | 裁剪边缘以精确填满目标尺寸 |
| “拉伸”“强制精确尺寸” | "stretch" | 拉伸画面以精确匹配目标尺寸 |
ℹ️ Claude 目前尚不支持视频自动重新构图,但新工具一直在不断推出。如果需要更多控制,请尝试使用 Adobe Premiere。
**轮询:**调用前先加载延迟工具 resizeVideoPoll——直接调用会报错“not loaded”。
// Step 1: load the deferred tool resizeVideoPoll
// Step 2: poll until complete
resizeVideoPoll({ statusId })
// Repeat until jobStatus === "completed"
// Show progress % to user while waiting
步骤 8(视频)— 预览 + 交付 + Firefly Board
如果轮询成功并返回 outputUrl,请通过分块上传流程将文件上传到 CC 存储
(asset_initialize_file_upload → PUT → asset_finalize_file_upload),以获取预签名 URL,然后:
asset_preview_file({
assets: [{ name: "resized_video.mp4", presignedAssetUrl: result.outputUrl }]
})
create_firefly_board({
import_adobe_storage: [ presignedAssetUrl_from_finalize ]
})
✅ 传入
import_adobe_storage和 finalize 预签名 URL。如果创建 Board 失败,则省略链接。
✅ Done! Video resized to [WxH].
📥 Download → <cc_storage_url>
🎨 View in Firefly Board → <board_url> ← omit if board creation failed
如果无法轮询 → 跳过预览,发送步骤 7 中的 CC 存储备用消息。
错误处理
| 错误 | 操作 |
|---|---|
将 /mnt/user-data/uploads/ 或 file:// 作为 URI 传入 | 停止。先调用 asset_add_file()。 |
| 调整后图像仍过大 | 使用 quality: 5 重新运行 |
未找到视频 assetId | 通过 asset_add_file 重新上传 |
| 源文件尺寸小于目标尺寸 | 提醒用户放大不会增加细节;经确认后继续 |
video_resize 模式无效 | API 仅接受 "letterbox"、"crop" 或 "stretch" — "fit" 和 "fill" 会被拒绝。 |
extract + {W,H} → 拉伸 | 切换为 reframe |
| 未提供尺寸 | 在调用任何工具之前,呈现表单或明确询问 |
| 不支持的格式 | 请用户导出为 JPG/PNG(图像)或 MP4(视频) |
未加载或无法使用 resizeVideoPoll | 当前连接器已知的缺口。跳过轮询。告知用户在 CC Files 中查看输出。 |
常用尺寸参考
| 用途 | 尺寸 |
|---|---|
| 全高清 / 网页主视觉 | 1920 × 1080 |
| 4K | 3840 × 2160 |
| 网页缩略图 | 1280 × 720 |
| 方形 | 1080 × 1080 |
| A4 打印(300 DPI) | 2480 × 3508 |
| US Letter 打印(300 DPI) | 2550 × 3300 |
| 博客精选图 | 1200 × 630 |
| 电子邮件页眉 | 600 × 200 |
| 头像 / 个人资料 | 400 × 400 |
| Instagram 纵向 | 1080 × 1350 |
| Stories / 纵向 | 1080 × 1920 |
资源
assets/intake-form.html — 用于设置调整参数的交互式表单。
在参数缺失或不明确时,于任何调整工作流开始时呈现。
涵盖照片(目标尺寸、适配模式、智能焦点、批处理、输出格式)和视频(目标尺寸、适配模式、源文件)。