動画のレターボックス帯をピクセル単位で計算
このレターボックス帯計算ツールは、2つのアスペクト比とキャンバスの高さを、映像レイアウトでそのまま使えるピクセル値に変換します。素材の比率、出力キャンバスの比率、高さを入力してください。帯が画像の上下に入るか左右に入るかを判定し、同じ大きさになる各帯の寸法を示します。2つの比率が一致する場合は、切り抜きや余白なしで全面を満たせるため、正しく0を返します。
無料で実行
素材とキャンバスの比率を指定します
アスペクト比は高さに対する幅を表すため、16:9 と 1.777777 は同じ形状です。保持したい素材画像の比率と、完成するキャンバスの比率を入力してください。キャンバスの高さが実際のピクセル尺度となり、幅は出力側の比率から求められます。W:H、W/H、正の小数に対応しており、4:3、16:9、21:9、2.39:1 などの一般的な表記を利用できます。正確な表示アパーチャーが分かる場合は、通称だけを前提にせず、その値をご使用ください。たとえば 21:9 と呼ばれる形式にも数値が少し異なるものがあり、高解像度では小さな差でも帯が見える場合があります。すべての寸法は正の有限値、キャンバス高は整数のピクセル数である必要があります。両方の比率が同じなら余白は不要で、エラーではなく各帯の寸法が0になります。
上下の帯と左右の帯を判別します
素材は引き伸ばしや内容の欠落を起こさず、全体がキャンバス内に収まるように配置されます。素材が出力キャンバスより横長なら、まず幅が左右の端に達します。配置後の高さはキャンバス高より小さくなり、残った空間が画像の上下に均等に分かれます。結果ではこの向きを top_bottom とし、各帯の高さを示します。素材のほうが縦長なら、先に高さが端へ達して横方向に空間が残ります。その空間を左右に均等配分し、left_right と各側帯の幅を返します。後者は pillarbox とも呼ばれますが、どちらも同じ収まり計算です。bar_size_pixels は2本の合計ではなく、常に1本分の寸法です。上、下、左、右の専用フィールドもあるため、レイアウト処理で向きを解釈し直す必要がありません。
編集やレンダリングに結果を利用します
オーバーレイ、プレビュー画像、エンコード済みマスター、投影レイアウト、CSS や canvas の合成を準備するときに、返された寸法をご利用ください。割り切れない場合は小数ピクセルを保持し、再現可能な方法で小数点以下6桁に丸めます。整数座標だけを扱うツールでは、2本を別々に丸めると最終寸法が1ピクセルずれる可能性があるため、用途に合った丸め方を決めてください。ラスター処理では一方を切り捨て、残りの1ピクセルを反対側へ割り当てられます。ベクターやブラウザーでは小数値を維持できる場合があります。この計算は中央寄せの contain 配置を前提とし、素材全体を保持して切り抜かず、対向する余白を等しくします。アナモルフィックピクセル、回転情報、overscan、セーフエリアは含みません。事前に実効表示比率へ変換してください。API 自動化は1回 $0.002 です。
活用例
シネマ映像を標準フレームに合わせます
横長の素材を 16:9 の納品キャンバスへ配置する前に、上下の余白を同じ寸法で計算します。
左右に帯を付けた保存用マスターを作ります
古い 4:3 映像を現代のワイド画面で保持するため、左右それぞれの帯幅を求めます。
有効画像の外側に要素を配置します
調整済みの素材を隠さず、字幕、ラベル、操作部品に使える既知の帯領域を確保します。
よくある質問
2つのアスペクト比が同じ場合はどうなりますか?
帯が不要なため、向きは none となり、すべての帯寸法に0が返されます。
bar_size_pixels は1本分ですか、それとも2本の合計ですか?
1本分の寸法です。対向する帯は同じ大きさで、各辺の専用フィールドにも個別に示されます。
結果に小数ピクセルが含まれるのはなぜですか?
比率の計算が必ずしも整数ピクセルにならないためです。正確な値を保持し、レンダラー側で適切に丸められます。
素材を切り抜いたり引き伸ばしたりしますか?
いいえ。中央寄せの contain 配置により、素材全体と元の表示比率を保持します。
API での計算料金はいくらですか?
API は1回 $0.002 です。処理は決定的で、動画ファイルの送信や解析は行いません。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/video2/aspect-ratio-letterbox-bars-size \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"source_aspect_ratio":"21:9","target_aspect_ratio":"16:9","canvas_height":1080}'const res = await fetch("https://api.kit.forhosting.com/video2/aspect-ratio-letterbox-bars-size", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"source_aspect_ratio": "21:9",
"target_aspect_ratio": "16:9",
"canvas_height": 1080
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/video2/aspect-ratio-letterbox-bars-size",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"source_aspect_ratio": "21:9",
"target_aspect_ratio": "16:9",
"canvas_height": 1080
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/video2/aspect-ratio-letterbox-bars-size", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"source_aspect_ratio":"21:9","target_aspect_ratio":"16:9","canvas_height":1080}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"source_aspect_ratio":"21:9","target_aspect_ratio":"16:9","canvas_height":1080}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/video2/aspect-ratio-letterbox-bars-size", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"source_aspect_ratio": "21:9",
"target_aspect_ratio": "16:9",
"canvas_height": 1080
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "video2.aspect_ratio_letterbox_bars_size",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |