gazou-compressor.jp

動画プレビュー(VTTサムネイル/スプライト)設計と実装

シーク時のプレビューは体感を大きく左右します。重い個別画像を大量に読ませるのではなく、VTT + スプライトで“1枚の画像から座標を切り出す”方式にすれば、往復を抑えつつ安定して速い体験を提供できます。

先に結論
スプライトはバージョン付きで長寿命、VTTはs-maxage+SWR。プレーヤーには kind="metadata"<track> を追加し、ポスター/LQIP と併用して空白感を隠蔽。

要点(TL;DR)

背景:高速プレビューは“滞留”を減らす

プレビューの反応が遅いと、ユーザーはシークをためらい目的区間にたどり着けません。スプライト方式はネットワーク往復を減らし、安定して一貫した反応を保証しやすくなります。

UI観点では アクセシビリティ を守りつつ、低遅延設計や ABR と干渉しないよう留意します。

設計:抽出→スプライト→VTT→配信→UI→計測

  1. フレーム抽出 — 1〜2秒間隔で取得。被写体ブレ/暗所は径路に注意。
  2. スプライト生成 — 列×行/余白/圧縮率を指示。サブサンプリングで文字潰れに注意。
  3. VTT作成 — WEBVTTに各期間+座標を列挙。xywhで領域指定。
  4. 配信 — 画像=immutable、VTT=SWR。署名URL適用可。
  5. UI統合kind="metadata" を追加し、プラグイン/実装でプレビュー描画。
  6. 計測指標に TTFB/成功率/離脱を追加し回帰を検知。

実装:VTTとHTMLの最小例

1) WEBVTT(xywh)

WEBVTT

00:00:00.000 --> 00:00:02.000
thumbnails.jpg#xywh=0,0,160,90

00:00:02.000 --> 00:00:04.000
thumbnails.jpg#xywh=160,0,160,90

00:00:04.000 --> 00:00:06.000
thumbnails.jpg#xywh=320,0,160,90

2) HTMLの track 追加

<!-- プレーヤーにメタデータトラックを追加(プラグインが VTT を解釈) -->
<video id="player" controls preload="metadata" poster="/poster.jpg">
  <source src="/video/stream.m3u8" type="application/x-mpegURL" />
  <track kind="metadata" src="/thumbs/thumbnails.vtt" label="プレビュー" default>
</video>

3) 配信ヘッダの例

# 配信・キャッシュ(例)
# スプライト画像:内容はビルドで固定 → 1年 + immutable
Cache-Control: public, max-age=31536000, immutable

# VTT:準静的 → ユーザー短命/共有長命 + SWR
Cache-Control: public, max-age=300, s-maxage=86400, stale-while-revalidate=600

互換性とフォールバック

NG/落とし穴

公開前チェックリスト

まとめ

VTTサムネイル/スプライトは、軽さと速さを両立する現実解です。配信/キャッシュ/保護とあわせて“最小で速い”設計にまとめ、メトリクスで効果を継続確認しましょう。

FAQ

FAQ(よくある質問)

1VTTの書式(xywhフラグメント)

各キューに sprite.jpg#xywh=x,y,w,h を書き、時間範囲に対応する領域を示します。多くのプレーヤー/プラグインがこの慣習に対応しています。

2配信とキャッシュの基本

スプライトはバージョン付きパスで immutable、VTTは s-maxage+SWR を推奨。署名URL と組み合わせて保護も可能。

3アクセシビリティの配慮

プレビューは補助であり、字幕/キャプション を省略しないこと。UIはキーボード操作とフォーカス可視を担保。

gazou-compressor.jp 編集部

画像圧縮・変換・背景除去などの実践テクニックと、Webで“速く・軽く・崩さない”ためのノウハウを発信しています。

関連記事

トピック/更新日の近いコンテンツ