動画の透かし位置計算
1920×1080の画面の右下に、32画素の余白で240×120のロゴを置くと、左上の位置はx 1648、y 928です。ロゴが画面内に完全に収まるかも確認します。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
処理はブラウザ内で完結します。ファイルは送信されません。無料でご利用いただけます。
動画透かし位置計算ツールは、ロゴやブランド画像を指定したコーナーへ置くための左上ピクセル座標を返します。動画と透かしの寸法、コーナー、均一な余白をご入力いただくと、レンダリングやエンコードに使える決定的な x、y 値を取得できます。画像全体がフレーム内に収まることも検証するため、切れや欠落を事前に防げます。
座標結果の読み方
一般的な合成システムは、オーバーレイの左上ピクセルを基準に配置します。本ツールも同じ規則を採用し、x はフレーム左端からの水平距離、y は上端からの垂直距離です。左上では両方が指定余白になります。
右上では y が余白のまま、x は動画幅から透かし幅と余白を引いた値です。下側の配置も同じ考え方を縦方向へ適用します。結果は動画フィルター、キャンバス、モーショングラフィックス、エンコード処理へそのまま渡せます。
値はすべて整数ピクセルで、小数座標や暗黙の丸めはありません。応答には位置と適用余白も含まれるため、処理記録も読みやすくなります。画像内容や透明部分は解析せず、元ファイルも変更しません。
寸法と安全な余白の選び方
プレーヤーの表示サイズではなく、実際にエンコードされるフレーム寸法をご使用ください。1920 × 1080 の素材は、小さく表示されても明示的に縮小しない限り同じ座標系です。透かし寸法には、重ね合わせ時点の画像サイズをご指定ください。
事前にロゴを縮小する場合は、縮小後の幅と高さを入力します。余白は選択したコーナーの縦横両端から内側へ均等に適用されます。ゼロなら矩形が端に接し、正の値なら内側へ移動します。
透かしがフレームより大きい場合や、余白によって全体が収まらない場合はエラーになります。縦長動画、大きなロゴ、比率が混在する一括処理で特に有効です。透明ピクセルも矩形に含まれるため、見た目が離れすぎる場合は不要な透明縁を切り取ってください。
制作工程での利用方法
サイズ変更や向きの正規化を終えた後、オーバーレイ工程へ x と y を設定してください。横長フレームで計算した後に回転や切り抜きを行うと、見た目のコーナーが変わったり、透かしが画面外へ出たりします。最終形状で計算するか、幅や高さが変わるたびに再計算してください。
一括処理ではコーナーと余白を共通ルールにし、各素材の実寸だけを渡せます。横長、正方形、縦長、独自形式でも一定の端間隔を保てます。タイトルセーフ領域、端末の切り欠き、字幕、テロップ、重要な被写体は判定しませんので、編集条件に応じて余白やコーナーをご調整ください。
特定エンコーダー用の式は生成しないため、座標は各種ツールで利用できます。
活用例
エンコード指示の作成
変換やレンダリング処理へロゴを追加する前に、移植可能な x、y 値を算出します。
ブランド動画の統一
横長、正方形、縦長の各動画へ同じコーナーと端間隔の規則を適用します。
自動レイアウトの検証
負荷の高いメディア処理を始める前に、大きすぎる画像や不可能な余白を検出します。
よくある質問
x と y は何を表しますか?
動画の左上を基準に測った、透かし矩形の左上コーナーのピクセル座標です。
余白はどのように適用されますか?
選択したコーナーの水平端と垂直端から内側へ、同じ非負のピクセル値を適用します。
透かしが動画より大きい場合はどうなりますか?
画像全体をフレーム内に収められないため、無効な入力としてエラーを返します。
透かしを端に接触させられますか?
はい。 余白をゼロにすると、選択したコーナーの両端へ矩形境界を揃えられます。
動画へ透かしを追加または縮小しますか?
いいえ。 位置のみを計算し、メディアの送信、デコード、縮小、描画、変更は行いません。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/video/watermark-position \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"video_width":1920,"video_height":1080,"watermark_width":240,"watermark_height":120,"position":"bottom_right"}'const res = await fetch("https://api.kit.forhosting.com/video/watermark-position", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"video_width": 1920,
"video_height": 1080,
"watermark_width": 240,
"watermark_height": 120,
"position": "bottom_right"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/video/watermark-position",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"video_width": 1920,
"video_height": 1080,
"watermark_width": 240,
"watermark_height": 120,
"position": "bottom_right"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/video/watermark-position", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"video_width":1920,"video_height":1080,"watermark_width":240,"watermark_height":120,"position":"bottom_right"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"video_width":1920,"video_height":1080,"watermark_width":240,"watermark_height":120,"position":"bottom_right"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/video/watermark-position", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"video_width": 1920,
"video_height": 1080,
"watermark_width": 240,
"watermark_height": 120,
"position": "bottom_right"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "video.watermark_position",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
制作工程での利用方法
API の計算料金は $0.002 で、ブラウザー版は同じ計算をローカルで実行します。
技術的な質問
API リクエストの料金はいくらですか?
API リクエストは 1 回 $0.002 です。同じ決定的計算をブラウザーでも実行できます。