mcpField
A
adobe-resize-photos-and-videos

adobe-resize-photos-and-videos

github.com/adobe创意与媒体316290 次安装今天更新
代码仓库

关于 adobe-resize-photos-and-videos

此 Adobe 技能按指定尺寸、比例或预设调整照片与视频,适用于需要处理单个或批量媒体的创作者。它分别提供图像裁切与填充模式,以及视频调整尺寸流程。

主要功能

  1. 01按尺寸、比例或预设调整媒体
  2. 02图像重构、填充或提取主体
  3. 03支持图像批量处理
  4. 04视频裁切、加边或拉伸
  5. 05预览输出并上传至 Creative Cloud

适用场景

  1. 01为图像设置自定义宽高或比例
  2. 02为多张照片生成不同尺寸版本
  3. 03将视频调整为目标分辨率
  4. 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/AIdocument_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、1920x1080width: 1920, height: 1080
4K3840 × 2160
HD、1080p1920 × 1080
720p1280 × 720
480p854 × 480
A4 打印2480 × 3508(300 DPI 纵向)
Letter 打印2550 × 3300(300 DPI 纵向)
16:9、1:1、4:5、9:16比例字符串 → 作为 output: "16:9" 传入
squareoutput: "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(图像)— 批量处理

如果表单中选择了批量处理,或者用户提供了多个文件:

  1. 对每个文件调用 asset_add_file(),获取各自的预签名 URL
  2. 对每个文件使用相同的参数调用 image_crop_and_resize
  3. 收集所有 outputUrl 值
  4. 在一次调用中,将所有输出传入 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 / UHD3840 × 2160
1080p / HD1920 × 1080
720p1280 × 720
480p854 × 480
纵向 9:161080 × 1920
正方形 1:11080 × 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
4K3840 × 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 — 用于设置调整参数的交互式表单。 在参数缺失或不明确时,于任何调整工作流开始时呈现。 涵盖照片(目标尺寸、适配模式、智能焦点、批处理、输出格式)和视频(目标尺寸、适配模式、源文件)。

评论

支持 Markdown