ビデオスナップショットは、動画から指定した時間とサイズでキャプチャした画像です。スナップショットは、動画カバー、スプライト、プレーヤーのプログレスバー用のサムネイルなどのアセットを作成するために使用します。このトピックでは、ApsaraVideo Media Processing (MPS) でスナップショットジョブを送信する方法について説明します。
概要
ユースケース
-
動画カバー:フィード内の短い動画の最初のフレームをカバーとして選択するか、特定のタイムポイントでフレームをキャプチャしてカバーとして使用します。
-
動画プレビュー:動画コンテンツからサムネイルを作成します。ユーザーがプレーヤーのタイムライン上にカーソルを合わせると、プレーヤーはそのタイムポイントの静的サムネイルを表示します。これにより、ユーザーは動画コンテンツをすばやく確認し、関心のあるセクションにジャンプできます。
-
動画モデレーション:手動または自動レビューのためにスナップショットを撮ることで、動画コンテンツをサンプリングします。
機能
機能 | 説明 | 関連 API パラメーター | コンソール操作 |
静的スナップショット | ビデオ内の指定された時点で、指定されたサイズの JPG スナップショットを撮影します。以下のサンプリング方法が利用可能です:
| SnapshotConfig | サポート |
スプライトスナップショット | この機能は、指定されたレイアウトルールに基づいて、静的スナップショットを 1 つの大きな画像 (スプライト) に結合します。出力は JPG 形式です。非同期呼び出しのみがサポートされています。単一のスプライトをリクエストすることで、複数の画像の情報を取得でき、画像リクエストの数を大幅に削減し、クライアント側のパフォーマンスを向上させます。 | TileOut、TileOutputFile | 非サポート |
WebVTT スナップショット | この機能は、一連の静的スナップショットまたはスプライトの VTT ファイルを生成します。VTT ファイルには、各スナップショットのタイムスタンプ、ファイル URL、およびスプライト内の各スナップショットの座標情報が含まれています。画像を表示するには、まず VTT ファイルを取得して解析する必要があります。この機能は、プレーヤーのプログレスバーにサムネイルを表示するのに役立ちます。 | SubOut | サポート |
キーフレームスナップショット | この機能は、キーフレームでのみスナップショットを撮影します。指定された時点がキーフレームでない場合、サービスは代わりに最も近いキーフレームを使用します。 | FrameType | サポート |
先頭フレームのブラックスクリーン検出 | 先頭フレーム (time=0) のブラックスクリーン検出を有効にできます。ブラックスクリーンは、黒ピクセルの割合と色値のしきい値によって定義されます。スナップショットを撮影する際、サービスはビデオの最初の 5 秒間をスキャンします。黒でないフレームが見つかった場合、それがキャプチャされます。それ以外の場合、単一スナップショットジョブではジョブは失敗します。複数スナップショットジョブでは、最初の黒フレームがキャプチャされます。 | BlackLevel、PixelBlackThreshold | サポート |
課金
生成されたスナップショットの数に基づいて API 呼び出しが課金されます。詳細については、「API 呼び出しの料金」をご参照ください。
コンソールでのスナップショットジョブの送信
MPS コンソールでは、ワークフローを使用してのみスナップショットジョブを送信できます。
- ApsaraVideo Media Processing (MPS) コンソールにログインします。
- 上部のナビゲーションバーで、ドロップダウンリストからリージョンを選択します。

-
左側のナビゲーションペインで、 を選択します。
-
[ワークフローの作成] をクリックします。
-
必要に応じて [入力] ノードを設定します。
-
[スナップショット] ノードを追加します。[入力] ノードの右側にある + アイコンをクリックし、ドロップダウンメニューから [スナップショット] を選択します。
-
[スナップショット] ノードの右側にあるペンアイコンをクリックして、パラメーターを設定します。
パラメーター
必須
説明
スナップショットメソッド
必須
単一スナップショット: 特定の時点でビデオフレームをキャプチャします。
複数スナップショット: 指定された間隔で複数のビデオフレームをキャプチャします。各フレームは個別の画像ファイルです。これは、バッチまたはシーケンシャルスナップショットとも呼ばれます。
平均スナップショット: ビデオを均等に分割し、指定された数のフレームをキャプチャします。
スナップショット間隔 (秒)
複数スナップショットに必須
テキストボックスにスナップショット間隔を秒単位で入力します。
スナップショット数
平均スナップショットに必須
テキストボックスにスナップショットの数を入力します。
説明スナップショットの数を設定しない場合、スナップショットは指定された間隔でビデオの最後までキャプチャされます。
スナップショットの数が 1 より大きい場合、スナップショットは指定された間隔で指定された数の画像に達するまでキャプチャされます。
スナップショットの数のみを設定した場合、スナップショットは総再生時間をスナップショットの数で割った間隔でキャプチャされます。
[名前]
必須
このノードの名前をテキストボックスに入力します。
[出力パス]
必須
[選択] をクリックします。[バケット] ドロップダウンリストからバケットを選択します。バケット内のフォルダーが [パス] の下に表示されます。フォルダーを出力パスとして選択します。
説明単一スナップショットのパスフォーマット:
http://bucket.oss-cn-hangzhou.aliyuncs.com/path/{RunId}/{SnapshotTime}.jpg。複数/平均スナップショットのパスフォーマット: {Count} プレースホルダーが必要です。パスは
/{RunId}/{SnapshotTime}/{Count}.jpgです。
[開始時刻]
任意
ドロップダウンリストから時、分、秒で時刻を選択します。
幅 × 高さ
任意
テキストボックスに幅と高さの値を入力します。
説明幅と高さを設定しない場合、画像サイズはビデオサイズと同じになります。
幅または高さのみを設定した場合、もう一方のディメンションはビデオの縦横比を維持し、画像の歪みを避けるためにスケーリングされます。
[webvtt インデックスファイルの生成]
複数および平均スナップショットの場合は任意
スイッチをクリックしてオンにします。これにより、WebVTT インデックスファイルが生成されます。
サムネイルとして設定
任意
スイッチをクリックしてオンにします。キャプチャされた画像は、メディアライブラリ内のメディアアセットのサムネイルとして自動的に設定されます。複数の画像がキャプチャされた場合、デフォルトで最初の画像がサムネイルとして設定されます。
[キーフレーム]
任意
スイッチをクリックしてオンにします。スナップショットタイプがキーフレームの場合、キーフレームのみがキャプチャされます。指定された時点がキーフレームでない場合、最も近いキーフレームが選択されます。
[ブラックスクリーン検出]
複数および平均スナップショットの場合は任意
スイッチをクリックしてオンにします。これにより、ビデオの最初の 5 秒間が検出されます。最初の 5 秒以内に黒画面でないフレームが存在する場合、最初の黒画面でないフレームがキャプチャされます。
-
[OK] をクリックして、スナップショットノードの設定を完了します。
-
[保存] をクリックして、ワークフローの設定を完了します。
説明ワークフローが作成されると、入力基準を満たす新しいファイルが指定されたパスにアップロードされたときに自動的にトリガーされます。ワークフローをトリガーする方法の詳細については、「ワークフローのトリガー」をご参照ください。
API によるスナップショットジョブの送信
-
動画を OSS にアップロードします。
-
スナップショットジョブを送信します。SubmitSnapshotJob API を呼び出し、SnapshotConfig パラメーターを設定して、同期単一スナップショット、非同期単一スナップショット、スプライト、または WebVTT スナップショットのジョブを送信します。以下のセクションでは、SnapshotConfig パラメーター構造 の例を示します。詳細については、「パラメーター詳細」をご参照ください。
同期単一スナップショット
// 動画の 100 ミリ秒時点でキーフレームを 1 つキャプチャします。出力画像の幅は 1280 px で、高さは自動調整されます。画像は JPG 形式で保存します。 // 同期モードは、Num または Interval パラメーターをサポートせず、スプライトまたは WebVTT 出力もサポートしません。 { "Time":"100", "FrameType":"intra", "Width":"1280", "OutputFile":{ "Bucket":"example-bucket", "Location":"oss-cn-hangzhou", "Object":"example.jpg" } }非同期単一スナップショット
// 動画の開始時点でキーフレームを 1 つキャプチャします。先頭フレームの黒画面検出が有効になっています。出力画像の寸法はソース動画と同じで、JPG 形式で保存します。 { "Num":"1", "Time":"0", "FrameType":"intra", "BlackLevel":"100", "PixelBlackThreshold":"30", "OutputFile":{ "Bucket":"example-bucket", "Location":"oss-cn-hangzhou", "Object":"example.jpg" } }サンプリングスナップショット
// 動画の開始から、10 秒ごとに通常フレームを 1 つキャプチャし、最大 200 フレームまたは動画が終了するまで続けます。 // 先頭フレームの黒画面検出が有効になっています。出力画像の寸法はソース動画と同じで、example{Count}.jpg として保存します。 // ファイルが上書きされないように、複数のスナップショットの場合は OutputFile オブジェクトで {Count} プレースホルダーを使用する必要があります。 { "Num":"200", "Time":"0", "Interval":"10", "FrameType":"normal", "BlackLevel":"100", "PixelBlackThreshold":"30", // ファイルが上書きされないように、複数のスナップショットの場合は OutputFile オブジェクトで {Count} プレースホルダーを使用する必要があります。 "OutputFile":{ "Bucket":"example-bucket", "Location":"oss-cn-hangzhou", "Object":"example{Count}.jpg" } }等間隔スナップショット
// 動画の 100 ミリ秒時点から最後まで、等間隔で 200 の通常フレームをキャプチャします。出力画像の幅は 1280 px、高さは 720 px です。画像は example{Count}.jpg として保存します。 { "Num":"200", "Time":"100", "Interval":"0", "FrameType":"normal", "Width":"1280", "Height":"720", // ファイルが上書きされないように、複数のスナップショットの場合は OutputFile オブジェクトで {Count} プレースホルダーを使用する必要があります。 "OutputFile":{ "Bucket":"example-bucket", "Location":"oss-cn-hangzhou", "Object":"example{Count}.jpg" } }スプライト
// 動画の 100 ミリ秒時点から最後まで、等間隔で 200 の通常フレームをキャプチャします。出力画像の幅は 1280 px、高さは 720 px です。 // 小さな画像は 10x10 のレイアウトでスプライトに結合します。スプライトは example-bucket002 に保存し、個々の小さな画像は example-bucket001 に保存します。 { "Num":"200", "Time":"100", "Interval":"0", "FrameType":"normal", "Width":"1280", "Height":"720", // ファイルが上書きされないように、複数のスナップショットの場合は OutputFile オブジェクトで {Count} プレースホルダーを使用する必要があります。 "OutputFile":{ "Bucket":"example-bucket001", "Location":"oss-cn-hangzhou", "Object":"example{Count}.jpg" }, "TileOut":{ "Lines":10, "Columns":10, "Padding":"2", "Margin":"4", "Color":"black", "IsKeepCellPic":"true" }, // ファイルが上書きされないように、OutputFile と TileOutputFile を異なるバケットまたはオブジェクトパスに設定します。また、スプライトの TileOutputFile オブジェクトで {TileCount} プレースホルダーを使用する必要があります。 "TileOutputFile":{ "Bucket":"example-bucket002", "Location":"oss-cn-hangzhou", "Object":"example{TileCount}.jpg" } }WebVTT スナップショット
// 動画の 100 ミリ秒時点から最後まで、等間隔で 200 の通常フレームをキャプチャします。出力画像の幅は 1280 px、高さは 720 px です。VTT ファイルを生成します。 { "Num":"200", "Time":"100", "Interval":"0", "FrameType":"normal", "Width":"1280", "Height":"720", // VTT ファイルを出力するには、Object の拡張子が .vtt である必要があります。対応する画像パスは example/snapshot-tile-{Count}.jpg です。 "OutputFile": { "Bucket":"example-bucket", "Location":"oss-cn-hangzhou", "Object":"example.vtt" }, "Format":"vtt", "SubOut":{ "IsSptFrag":"true" } } -
同期単一スナップショットジョブの場合、API はレスポンスで直接結果を返します。非同期ジョブの場合、メッセージ通知を設定するか、結果をクエリする必要があります。
説明入力ファイルが大きすぎる場合、ジョブがタイムアウトして失敗することがあります。リトライメカニズムを実装することを推奨します。
-
(推奨) コールバック通知の受信。
非同期ジョブが完了した後、メッセージ通知が設定されている場合、システムは Simple Message Queue (formerly MNS) の指定されたキューまたはトピックにメッセージを送信します。詳細については、「メッセージ通知の受信」をご参照ください。
-
ジョブ結果のクエリ。
QuerySnapshotJobList API を呼び出して、ID を指定して 1 つ以上のスナップショットジョブの結果をクエリします。または、ジョブ ID を指定せずに、ステータス、作成時間、または MPS キューに基づいてジョブをフィルタリングして、ページングクエリを実行することもできます。
SDK によるスナップショットジョブの送信
|
SDK |
ガイド |
|
Java SDK |
|
|
Python SDK |
|
|
PHP SDK |
|
|
PHP SDK (新バージョン) |
|
|
Node.js SDK |
|
|
Go SDK |
よくある質問
スナップショットに関するよくあるご質問については、「スナップショットに関する FAQ」をご参照ください。