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 Resize Photos and Videos
画像や動画のサイズを、ユーザー指定の寸法、アスペクト比、または名前付きサイズに変更します。
ソーシャルメディアプラットフォームのセット(Instagram、TikTok など)には、代わりに adobe-create-social-variations スキルを使用してください。
ツールリファレンス
| ステップ | ツール | 備考 |
|---|---|---|
| ファイルピッカーを開く | asset_add_file | presignedAssetUrl、assetId、mediaType を返します |
| CC 内でアセットを検索 | asset_search | 画像の場合は asset_add_file で検索結果を再ステージングします。動画の場合は id を直接使用します |
| PSD/AI をレンダリング | document_render_vector | サイズ変更の前に JPEG に変換します |
| 画像のサイズを変更 | image_crop_and_resize | 寸法ごとに 1 回呼び出します。デフォルトでは reframe を使用します |
| 出力をプレビュー | asset_preview_file | すべての出力を 1 回の呼び出しにまとめます |
| CC にアップロード(開始) | asset_initialize_file_upload | ブロックアップロードパイプラインの最初の呼び出しです |
| CC にアップロード(完了) | asset_finalize_file_upload | 2 回目の呼び出しです。ボード用の presigned CC URL を返します |
| Firefly ボードを作成 | create_firefly_board | finalize 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 — 複数ステップのヒアリング
ユーザーから必要なパラメーター(種類+寸法+フィットモード)がすべて提供されていない場合に実行します。 ユーザーのメッセージにすでに 3 つすべてが含まれている場合は、完全にスキップします。
AskUserQuestion を使用して、パラメーターを段階的に収集します。
ステップ 2a — 種類
AskUserQuestion([{
question: "Photo or video?",
type: "single_select",
options: ["Photo", "Video"]
}])
ステップ 2b — 寸法
写真の場合(multi_select — ユーザーは 1 つ以上選択できます):
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 を 1 回実行し、
毎回同じソース URI とパラメーターを使用します。最後にすべての出力をまとめてプレビューします。
動画の場合(multi_select — ユーザーは 1 つ以上選択できます):
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() を呼び出してファイルをステージングしてください。/mnt/user-data/uploads/ のパスは Adobe ツールから取得できません。
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の値を収集します - すべての出力をまとめて 1 回の呼び出しで
asset_preview_fileに渡します
この環境では、呼び出しは順次実行されます。画像が 10 枚を超える場合は、開始前にユーザーに確認してください。
ターンをまたいだページネーション(バッチが 20 件を超える場合): 大規模なバッチでは、すべての画像の処理が完了する前に会話のコンテキストがいっぱいになり、 Claude がバッチの途中で一時停止することがあります。これは想定内の動作であり、エラーではありません。この場合:
- 完了した数と残りの数を伝えます(例:「24 件中 20 件完了しました。残りを処理するには「続けて」と入力してください」)
- 再開する前に、ユーザーの確認を待ちます
- 再開後は、次の未処理の画像から最後まで処理を続けます
- すべての画像の処理が完了してから、すべての出力をまとめてプレビューします
ステップ 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,
// ...
]
})
✅ 動作確認済み(Stage):
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 を取得
動画ツールで必要なのは URL ではなく assetId です。
| ソース | 方法 |
|---|---|
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 値 | 動作 |
|---|---|---|
| 「fit」「preserve ratio」「letterbox」 | "letterbox" | 比率を維持し、黒帯を追加します(デフォルト) |
| 「fill」「crop to fill」「no bars」 | "crop" | 端を切り抜いてターゲットにぴったり合わせます |
| 「stretch」「force exact」 | "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
Step 8(動画)— プレビュー、納品、Firefly Board
ポーリングが成功し、outputUrl が返された場合は、ブロックアップロードパイプライン(asset_initialize_file_upload → PUT → asset_finalize_file_upload)を使って CC ストレージにアップロードし、署名付き URL を取得してから、次の操作を行います。
asset_preview_file({
assets: [{ name: "resized_video.mp4", presignedAssetUrl: result.outputUrl }]
})
create_firefly_board({
import_adobe_storage: [ presignedAssetUrl_from_finalize ]
})
✅ finalize の署名付き URL を指定して
import_adobe_storageを渡します。ボードの作成に失敗した場合は、リンクを省略してください。
✅ Done! Video resized to [WxH].
📥 Download → <cc_storage_url>
🎨 View in Firefly Board → <board_url> ← omit if board creation failed
ポーリングを利用できない場合 → プレビューをスキップし、Step 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 をチェックするようユーザーに伝えます。 |
一般的な寸法の参考
| 用途 | 寸法 |
|---|---|
| フル HD/Web ヒーロー画像 | 1920 × 1080 |
| 4K | 3840 × 2160 |
| Web サムネイル | 1280 × 720 |
| 正方形 | 1080 × 1080 |
| A4 印刷(300 DPI) | 2480 × 3508 |
| US レター印刷(300 DPI) | 2550 × 3300 |
| ブログのアイキャッチ画像 | 1200 × 630 |
| メールヘッダー | 600 × 200 |
| アバター/プロフィール画像 | 400 × 400 |
| Instagram 縦長画像 | 1080 × 1350 |
| ストーリーズ/縦型 | 1080 × 1920 |
アセット
assets/intake-form.html — リサイズパラメーターを入力するためのインタラクティブフォームです。
パラメーターが不足している、または曖昧なリサイズワークフローの開始時に表示します。
写真(ターゲットサイズ、フィットモード、スマートフォーカス、一括処理、出力形式)と動画(ターゲットサイズ、フィットモード、ソース)に対応しています。