ビデオのスナップショット機能を使用すると、ビデオの特定の時点における特定のサイズのスナップショットを取得できます。スナップショットは、ビデオのサムネイル、スプライト、プログレスバーのサムネイルの生成に使用されます。このトピックでは、ApsaraVideo Media Processing(MPS)でビデオのスナップショットを取得するためのスナップショットジョブを送信する方法について説明します。
概要
シナリオ
ビデオのサムネイル:短いビデオのフィードストリームでビデオの最初のフレームをビデオのサムネイルとしてキャプチャしたり、ビデオの特定の時点におけるスナップショットをビデオのサムネイルとしてキャプチャしたりできます。
ビデオのプレビュー:ビデオコンテンツに基づいてサムネイルを作成できます。プレーヤーでビデオのタイムライン上にポインターを移動すると、特定の時点におけるビデオの静的サムネイルが表示されます。これにより、ビデオコンテンツをすばやく閲覧し、目的のコンテンツを探すのに役立ちます。
ビデオのモデレーション:手動または自動レビューのために、ビデオの複数のスナップショットを取得できます。
機能
機能 | 説明 | API操作のパラメーター | MPSコンソール |
静的スナップショット | この機能を使用すると、JPG形式でビデオの特定の時点における特定のサイズのスナップショットを取得できます。次のスナップショットモードが提供されています。
| SnapshotConfig | サポートされています |
スプライトスナップショット | この機能を使用すると、特定のルールに基づいて取得されたスナップショットを単一の画像にマージしてスプライトを作成できます。スプライトはJPG形式です。このタイプのスナップショットは非同期で取得されます。ユーザーは、一度に複数の画像に関する情報を照会するリクエストを送信できます。これにより、画像に対するAPIリクエストの数が大幅に削減され、クライアントのパフォーマンスが向上します。 | TileOut and TileOutputFile | サポートされていません |
WebVTTスナップショット | この機能を使用すると、取得されたスナップショットまたは作成されたスプライトのVTTファイルを生成できます。VTTファイルには、スナップショットが取得された時刻、スナップショットのパス、スプライト内のスナップショットの座標が含まれています。クライアントが画像をリクエストすると、対応するVTTファイルが取得され、解析された後に画像が表示されます。この機能は、プログレスバーにサムネイルを表示するために使用できます。 | SubOut | サポートされています |
キーフレームスナップショット | この機能を使用すると、キーフレームのみを取得できます。指定された時点のフレームがキーフレームでない場合は、隣接するキーフレームが取得されます。 | FrameType | サポートされています |
黒画面検出 | この機能を使用すると、最初のスナップショットが黒画面かどうかを検出できます。この機能を使用するには、Timeパラメーターを0に設定します。これは、ビデオの開始からスナップショットが取得されることを指定します。画像内の黒いピクセルの割合と黒いピクセルの色の値を指定することで、黒画面を定義できます。黒画面検出機能が有効になっている場合、システムはビデオの最初の5秒間のフレームをチェックします。黒以外のフレームが存在する場合、黒以外のフレームが取得されます。それ以外の場合、ジョブが単一スナップショットジョブの場合はジョブは失敗し、ジョブが複数スナップショットジョブの場合は最初の黒いフレームが取得されます。 | BlackLevel and PixelBlackThreshold | サポートされています |
説明
スナップショット料金は、スナップショットの数に基づいて課金されます。詳細については、「音声とビデオのトランスコーディング料金」トピックの「API呼び出しの料金」セクションをご参照ください。
MPSコンソールでスナップショットジョブを送信する
MPSコンソールでは、ワークフローを使用してのみスナップショットジョブを送信できます。
MPSコンソール にログインします。
上部のナビゲーションバーで、ドロップダウンリストからリージョンを選択します。

左側のナビゲーションペインで、 を選択します。
[ワークフローの作成] ページで、[ワークフローの作成] をクリックします。
[入力] ノードで、ビジネス要件に基づいて [入力] ノードを構成します。
[スナップショット] ノードを追加します。

[スナップショット] ノードの横にあるペンアイコンをクリックします。[スナップショット] ダイアログボックスで、次の表に示すパラメーターを構成します。
パラメーター
必須
説明
スナップショットモード
はい
単一:特定の時点におけるビデオのスナップショットを取得します。
複数:一定の間隔でビデオの複数のスナップショットを均等に取得する時間を指定します。各スナップショットは画像ファイルです。複数フレームのスナップショットは、バッチスナップショットまたは序数スナップショットとも呼ばれます。
平均:ビデオを均等に分割し、指定されたスナップショット数に基づいてスナップショットを取得します。
スナップショット間隔(秒)
[スナップショットモード] パラメーターを [複数] に設定した場合、必須です
スナップショットを取得する間隔。単位:秒。
スナップショット
[スナップショットモード] パラメーターを [平均] に設定した場合、必須です
取得するスナップショットの数。
説明[スナップショット] パラメーターが指定されていない場合、ビデオの最後まで指定された間隔でスナップショットが取得されます。
[スナップショット] パラメーターの値が1より大きい場合、スナップショット数が指定された数に達するまで、指定された間隔でスナップショットが取得されます。
[スナップショット] パラメーターのみが指定されている場合、合計時間数をスナップショット数で割った値に基づいて、スナップショットが均等に取得されます。
名前
はい
スナップショットノードの名前。
出力パス
はい
OSSバケットに保存される出力ファイルのパスです。[選択] を [出力パス] フィールドの横にあるクリックします。[出力パスの選択] ダイアログボックスで、[バケット] ドロップダウンリストから OSS バケットを選択します。その後、OSSバケット内のフォルダーが [パス] セクションに自動的に表示されます。出力パスとしてフォルダーを選択します。
説明[スナップショットモード] パラメーターを [単一] に設定した場合、スナップショットは
{SnapshotTime}.jpgの形式で名前が付けられ、OSSバケットの /path/{RunId} フォルダーにエクスポートされます。たとえば、出力パスは http://bucket.oss-cn-hangzhou.aliyuncs.com/path/{RunId}/{SnapshotTime}.jpg のようになります。[スナップショットモード] パラメーターを [複数] または [平均] に設定した場合、{Count} プレースホルダーが使用されます。この場合、出力パスの後半部分は
/{RunId}/{SnapshotTime}/{Count}.jpgの形式になります。
開始時間
いいえ
ワークフローがスナップショットの取得を開始する時刻。ドロップダウンリストから時、分、秒を選択します。
幅 X 高さ
いいえ
スナップショットの幅と高さ。
説明[幅] パラメーターも [高さ] パラメーターも指定されていない場合、出力スナップショットのサイズは入力ビデオのサイズと同じになります。
[幅] パラメーターと [高さ] パラメーターのいずれか一方のみが指定されている場合、指定されていない側は入力ビデオのアスペクト比に基づいてスケーリングされます。これにより、画像の変形を防ぎます。
Webvttインデックスファイルを生成する
[スナップショットモード] パラメーターを [複数] または [平均] に設定した場合、必須です
WebVTT形式のサムネイルを使用するかどうかを指定します。
サムネイルとして設定
いいえ
スナップショットをメディアファイルのサムネイルとして使用するかどかを指定します。スイッチをオンにすると、指定された時点で取得されたスナップショットがサムネイルとして使用されます。複数のスナップショットが取得された場合、デフォルトでは最初のスナップショットがサムネイルとして使用されます。
キーフレーム
いいえ
キーフレームのみをスナップショットとして取得するかどうかを指定します。スイッチをオンにすると、キーフレームのみがスナップショットとして取得されます。指定された時点のフレームがキーフレームでない場合、MPSは最も近いキーフレームのスナップショットを取得します。
黒画面検出
[スナップショットモード] パラメーターを [複数] または [平均] に設定した場合、必須です
ビデオの最初の5秒間を検出するかどうかを指定します。スイッチをオンにして、最初の5秒間に画像が表示された場合、最初の黒以外のフレームコンテンツが取得されます。
[OK] をクリックします。スナップショットノードが構成されます。
[保存] をクリックします。
説明ワークフローの作成後に [入力パス] パラメーターで指定されたパスにファイルがアップロードされると、ワークフローがトリガーされます。ワークフローをトリガーする方法の詳細については、「ワークフローをトリガーする」をご参照ください。
API操作を呼び出してスナップショットジョブを送信する
ビデオをOSSにアップロードします。
スナップショットジョブを送信します。 SubmitSnapshotJob オペレーションを呼び出して、スナップショットジョブを送信できます。 SnapshotConfig パラメーターを設定して、スナップショットジョブを送信し、同期モードまたは非同期モードでスナップショットをキャプチャしたり、スプライトを生成したり、Web Video Text Tracks Format(WebVTT)スナップショットをキャプチャしたりできます。 SnapshotConfig パラメーターの詳細については、「パラメーターの詳細」をご参照ください。
同期モードでスナップショットジョブを送信してスナップショットをキャプチャする
ビデオの 100 ミリ秒目にキーフレームをキャプチャします。出力スナップショットの幅は 1,280 ピクセルで、出力スナップショットの高さは入力ビデオのアスペクト比に基づいて計算されます。スナップショットファイルは JPG 形式で保存されます。 同期モードでスナップショットジョブを送信する場合は、Num パラメーターまたは Interval パラメーターを指定しないでください。同期モードのスナップショットジョブは、WebVTT スナップショットのキャプチャやスプライトの生成には使用できません。 { "Time":"100", "FrameType":"intra", "Width":"1280", "OutputFile":{ "Bucket":"example-bucket", "Location":"oss-cn-hangzhou", "Object":"example.jpg" } }非同期モードでスナップショットジョブを送信してスナップショットをキャプチャする
ビデオの開始時にキーフレームをキャプチャし、黒画面検出機能を有効にします。出力スナップショットの幅と高さは、入力ビデオの幅と高さと同じです。スナップショットファイルは JPG 形式で保存されます。 { "Num":"1", "Time":"0", "FrameType":"intra", "BlackLevel":"100", "PixelBlackThreshold":"30", "OutputFile":{ "Bucket":"example-bucket", "Location":"oss-cn-hangzhou", "Object":"example.jpg" } }スナップショットジョブを送信して複数のスナップショットをキャプチャする
ビデオの開始時から 200 フレームがキャプチャされるかビデオが終了するまで、10 秒ごとに通常のフレームをキャプチャします。 最初のスナップショットに対して黒画面検出機能を有効にします。出力スナップショットの幅と高さは、入力ビデオの幅と高さと同じです。スナップショットには、example{Count}.jpg 形式で名前が付けられます。 { "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 の通常のフレームを均等にキャプチャします。出力スナップショットの幅と高さは、1,280 ピクセルと 720 ピクセルです。スナップショットには、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 の通常のフレームを均等にキャプチャします。出力スナップショットの幅と高さは、1,280 ピクセルと 720 ピクセルです。 スナップショットを 10*10 のレイアウトでスプライトにマージします。スプライトは example-bucket002 という名前のバケットに保存され、元の snapshots は 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 の通常のフレームを均等にキャプチャします。出力スナップショットの幅と高さは、1,280 ピクセルと 720 ピクセルです。出力スナップショットは WebVTT スナップショットです。 { "Num":"200", "Time":"100", "Interval":"0", "FrameType":"normal", "Width":"1280", "Height":"720", // WebVTT スナップショットを生成します。 Object パラメーターの値のファイル名拡張子は .vtt に設定する必要があります。スナップショットファイルのストレージパスは example/snapshot-tile-{Count}.jpg です。 "OutputFile": { "Bucket":"example-bucket", "Location":"oss-cn-hangzhou", "Object":"example.vtt" }, "Format":"vtt", "SubOut":{ "IsSptFrag":"true" } }同期モードでスナップショットジョブを送信する操作を呼び出して単一のスナップショットをキャプチャする場合、ジョブの結果は操作のレスポンスで返されます。非同期モードのスナップショットジョブの場合は、Simple Message Queue (旧称 MNS) (SMQ) コールバックを設定するか、操作を呼び出して結果をクエリする必要があります。
説明入力ファイルのサイズが非常に大きい場合、タイムアウトエラーが発生する可能性があります。ビジネス要件に基づいて再試行メカニズムを設定してください。
推奨。コールバック通知を設定します。
スナップショットジョブの通知機能が有効になっている場合、スナップショットジョブの完了後に Simple Message Queue (formerly MNS) 内の指定されたキューまたはトピックで通知を受信できます。詳細については、「通知の受信」をご参照ください。
スナップショットジョブの結果をクエリします。
QuerySnapshotJobList オペレーションを呼び出すことで、ジョブ ID によってスナップショットジョブの結果をクエリできます。また、スナップショットジョブの状態、ジョブが作成された時刻、ジョブが送信された MPS キューなどの条件に基づいて、ページクエリを実行することもできます。この場合、スナップショットジョブの ID を指定する必要はありません。
SDK を使用してスナップショットジョブを送信する
SDK | リファレンス |
MPS SDK for Java | |
MPS SDK for Python | |
MPS SDK for PHP | |
MPS SDK for PHP (更新バージョン) | |
MPS SDK for Node.js | |
MPS SDK for Go |
FAQ
詳細については、「スナップショットキャプチャに関する FAQ」をご参照ください。