GIFのフレーム数と相対サイズを計算
12.5秒のクリップを10 fpsにすると、GIFは125フレームになります。25 fpsの元動画では313フレームなので、元の約5分の2の負担です。変換を始める前に設定を試せます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 継続時間 (秒)
- 12.5
- フレームレート
- 10
- 元のフレームレート
- 25
- フレーム数
- 125
- 元のフレーム数
- 313
- 推定の相対サイズ比
- 0.399361
- 推定の相対サイズ (%)
- 39.936
この計算ツールは、動画区間の長さと出力先のフレームレートから、GIFに含まれる具体的なフレーム数を算出します。さらに、ご指定の元動画のフレームレート、または結果に明記される既定値の30 fpsを使って、元のフレーム数と比較します。相対サイズはフレーム数だけを基準にした計画用の目安であり、エンコード後の正確なバイト数を保証するものではありません。変換を始める前の設定比較にご活用いただけます。
変換前にフレーム数を確認します
GIF変換では、時間が1秒増えるたびに、また1秒当たりのフレームが増えるたびに、アニメーションの時間軸へ完全な画像が追加されるため、データ量や処理負荷が急に大きくなることがあります。まず、対象区間の正確な長さを秒で入力し、使用予定の出力フレームレートをご指定ください。
この計算ツールは両方の値を掛け合わせ、区間内に規則的に配置されるすべてのフレーム時刻を数えるために切り上げます。たとえば、12.5秒の動画を10 fpsにすると125フレームです。区間が整数秒で終わらない場合や、7.5 fpsのような設定を使う処理にも対応できるよう、小数の長さとフレームレートも受け付けます。
長さがゼロなら結果もゼロフレームです。結果には正規化した長さとフレームレートも表示されるため、変換ジョブと一緒に前提条件を確認、保存できます。動画ファイルを開いたり、デコード、アップロード、変更したりする処理は行いません。
実際の変換で計算資源、転送時間、保存容量を使う前に設定を選ぶための、短時間で完了する計画工程です。
相対サイズの推定値を読み取ります
相対サイズの推定値は、作成予定のGIFのフレーム数と、同じ区間に含まれる元動画のフレーム数を比較したものです。元動画の実際のフレームレートが分かる場合は、その値をご入力ください。省略した場合は30 fpsを使用し、その基準値を結果にも表示するため、計算上の前提が隠れることはありません。
比率が0.5で、50パーセントとも表示されている場合、予定するGIFの時間軸には元動画の半分のフレームが含まれます。1を超える場合は、出力側に元動画より多くのフレーム位置を設ける設定です。通常は新しい細部が得られるのではなく、映像情報の複製や補間が発生します。
この比率が表すのはフレーム負荷の目安だけで、完成ファイルのバイト数ではありません。GIFはパレット方式の画像圧縮を使う一方、一般的な動画はフレーム間圧縮を使います。そのため、解像度、動き、色数、ディザリング、透明部分、元のコーデック、エンコーダー設定の影響が比率を上回る場合があります。
同じ区間で候補設定を比べる目的で使用し、圧縮率の保証としては扱わないでください。
用途に合う出力フレームレートを選びます
元動画の数値をそのままコピーするのではなく、GIFを何に使うかを基準にお選びください。短い画面操作の説明やリアクションのループは控えめなフレームレートでも見やすいことが多い一方、高速なカーソル移動、ゲーム映像、細かな身体動作では、目立つ飛びを避けるためにサンプル数を増やす必要があります。同じ長さと元フレームレートのまま、複数の候補を計算してください。
フレーム数からアニメーション負荷の増減を正確に確認でき、相対パーセントから候補同士を簡単に比較できます。15 fpsから10 fpsへ下げてフレーム数が3分の1減っても内容が十分伝わるなら、変換前に簡素化する価値があります。特に写真のような領域やノイズが多い映像では、フレームレートよりも画像寸法やパレットを減らす方がサイズに大きく影響することもあります。
停止部分や不要な冒頭、末尾も切り詰めてください。長さとフレームレートは掛け算されるため、短縮はすべての設定に効きます。最終品質とバイト数は、納品用のエンコーダーで必ずご確認ください。
活用例
書き出し負荷を事前に確認
動画からGIFへの変換ジョブを送信する前に、予想フレーム数を表示できます。
アニメーション設定を比較
同じ動画区間と元データに複数の出力フレームレートを適用し、書き出し設定を選べます。
アップロード時の見込みを明示
要求されたアニメーションが非常に大きくなりそうな場合に、相対フレーム負荷を分かりやすい注意として示せます。
よくある質問
GIFのフレーム数はどのように計算しますか?
秒単位の長さに出力フレームレートを掛け、区間内に予定されるフレームをすべて含めるよう切り上げます。
元動画のフレームレートはなぜ必要ですか?
出力負荷を元動画と比較するためです。省略時は30 fpsを使用し、その既定値を結果に明記します。
相対パーセントから完成GIFのバイト数が分かりますか?
いいえ。 これはフレーム数の比率です。画像寸法、色、動き、ディザリング、透明部分、コーデック、エンコーダー設定もバイト数に影響します。
元動画のフレームレートを入力しないとどうなりますか?
その場合は30 fpsとして比較し、そのことを結果に明記します。前提が隠れることはありません。元の正確なフレームレートが分かるなら、入力すると目安がより正確になります。
比率が1を超えるとはどういう意味ですか?
選んだ出力フレームレートが元動画より多くのフレーム枠を作るという意味です。GIFは新しい情報を得るのではなく、画像を繰り返したり補間したりすることになるので、出力のフレームレートを下げてください。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/video/gif-frame-count \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"duration_seconds":12.5,"framerate":10}'const res = await fetch("https://api.kit.forhosting.com/video/gif-frame-count", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"duration_seconds": 12.5,
"framerate": 10
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/video/gif-frame-count",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"duration_seconds": 12.5,
"framerate": 10
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/video/gif-frame-count", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"duration_seconds":12.5,"framerate":10}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"duration_seconds":12.5,"framerate":10}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/video/gif-frame-count", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"duration_seconds": 12.5,
"framerate": 10
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "video.gif_frame_count",
"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は1回$0.002で、見積もり、フォーム、ジョブのプレビュー、一括計画に使える決定的なJSONを返します。
技術的な質問
フレームレートがゼロまたは負の場合はどうなりますか。
出力フレームレートは正の値でなければならないため、invalid_inputエラーで処理を終了します。
APIリクエストの料金はいくらですか。
APIは1回$0.002です。ブラウザー上の計算ツールでは、同じ決定的な計算をローカルで実行できます。