動画のアスペクト比に合う中央切り取り範囲を計算
動画を別の表示形式へ合わせるには、目標のアスペクト比を保ちながら、どの中央長方形なら最大の面積を残せるかを正確に求める必要があります。この計算ツールへ元動画のピクセル幅と高さ、9:16、1:1、16:9などの目標比率をご入力いただくと、切り取りの開始位置と寸法を返します。動画のアップロード、デコード、サイズ変更、加工は行いません。得られた座標は、編集工程、トランスコード用コマンド、メディア処理、プレビュー画面へ直接お渡しいただけます。
無料で実行
元フレームから最大の適合範囲を求めます
デコード後の動画について、幅と高さをピクセル単位でご入力いただき、目標比率を幅対高さの順にコロンで区切って指定してください。たとえば1920×1080は一般的な横長フレームを表し、9:16は短いモバイル動画に適した縦長の結果を指定します。本ツールは元の比率と指定比率を比較し、収まりを制限している側の寸法を維持します。元動画が横に広すぎる場合は高さをすべて残して幅を縮め、縦に高すぎる場合は幅をすべて残して高さを縮めます。この方法により、引き伸ばしや余白の追加、元フレームからのはみ出しを起こさず、内部に収まる最大の長方形を取得できます。xとyは左上角の位置を示し、widthとheightは範囲の大きさを示します。この4値で、解像度が一定の動画の各フレームに使える完全な切り取り枠になります。計算対象はフレームの幾何情報だけですので、動画データ自体は必要ありません。
中央配置と小数のピクセル値をご確認ください
中央切り取りでは、向かい合う両端から同じ量を除きます。横長の元動画を狭くする場合、xは除外する横方向の幅の半分となり、yはゼロのままです。フレームを低くする場合は、yが除外する縦方向の高さの半分となり、xはゼロのままです。寸法と比率の組み合わせによっては、座標や大きさが小数になります。これは意図した結果です。厳密な数学上の中心や指定比率が、物理ピクセルの境界間に位置する場合があるためです。小数の幾何情報を返すことで、エンコーダー、画像ライブラリ、編集ソフトに合わない丸め規則を勝手に適用することを避けています。値は小数点以下9桁に正規化し、同じリクエストの結果を安定させ、浮動小数点の誤差がマニフェストやテストへ混入しないようにします。後段のツールが整数だけを受け付ける場合は、その仕様に記載された丸め方を連携時に適用し、最終的な出力寸法をご確認ください。
動画制作工程で安全にご利用いただけます
返される内容は加工済み動画ではなく、再利用できる幾何情報としてお取り扱いください。x、y、width、heightを、トランスコーダー、ノンリニア編集ソフト、canvasレンダラー、サムネイル生成器、メディアサービスなどの切り取り工程へ渡します。連携先が左上を原点とし、xは右方向、yは下方向へ増える方式かをご確認ください。本ツールはこの一般的な方式を採用しています。ファイル名、プレーヤーの表示枠、古い管理情報ではなく、実際にデコードされた動画ストリームから幅と高さを取得してください。スマートフォンの動画には向きのメタデータが含まれる場合がありますので、回転を切り取りの前後どちらで適用するかを決め、同じ処理段階の寸法をご指定ください。比率はコロンで区切った2つの正の有限数だけを受け付けます。誤記、別の区切り、ゼロ、負数、余分な文字列は推測せず拒否します。この厳格な検証により、一括処理で多数の誤った構図が生成される事態を防げます。
活用例
横長動画を縦型配信向けに整えます
横長のマスターから媒体別の動画を生成する前に、最大の中央9:16範囲を計算できます。
動画サムネイルの構図を統一します
固定形状のプレーヤーを余白なく満たすプレビューやサムネイルに、決定的な計算結果を使用できます。
自動トランスコード設定を検証します
負荷の高いメディア処理を始める前に、元情報から座標を確認し、不正な比率を拒否できます。
よくある質問
動画のアップロードや変更も行われますか?
いいえ。幅、高さ、比率から幾何情報を返すだけで、動画の受信、デコード、保存、変換は行いません。
計算の料金はいくらですか?
APIは1回 $0.002 です。同じ決定的な計算をブラウザー内でも実行していただけます。
どのような比率表記を利用できますか?
9:16、16:9、1:1、1.85:1のように、2つの正数をコロンで区切ってください。別の記号や追加文字は無効です。
切り取り値が小数になるのはなぜですか?
厳密な中心や比率がピクセル間に位置する場合があるためです。小数値なら丸めを強制せず最大の中央範囲を保てます。
切り取り範囲が元フレームを超えることはありますか?
ありません。一方の寸法は必ず元動画と一致し、もう一方だけを指定比率に合わせて縮小します。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/video/aspect-ratio-crop \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"width":1920,"height":1080,"ratio":"9:16"}'const res = await fetch("https://api.kit.forhosting.com/video/aspect-ratio-crop", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"width": 1920,
"height": 1080,
"ratio": "9:16"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/video/aspect-ratio-crop",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"width": 1920,
"height": 1080,
"ratio": "9:16"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/video/aspect-ratio-crop", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"width":1920,"height":1080,"ratio":"9:16"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"width":1920,"height":1080,"ratio":"9:16"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/video/aspect-ratio-crop", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"width": 1920,
"height": 1080,
"ratio": "9:16"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "video.aspect_ratio_crop",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_mb | 500 |
max_minutes | 60 |
max_megapixels | 3.9 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |