本トピックでは、Intelligent Media Management (IMM) のメディアトランスコーディング機能を使用してビデオスプライトを生成する方法について説明します。
はじめに
ビデオスプライト生成は、ビデオから複数のキーフレームを抽出し、スプライトと呼ばれる 1 つの画像に結合する技術です。スプライトを生成することで、ビデオ内のさまざまなシーンの概要をすばやく提供でき、ユーザーはより効率的にコンテンツを閲覧および選択できます。

ユースケース
-
ビデオプレビューとコンテンツナビゲーション:スプライトはビデオコンテンツのクイックプレビューを提供し、ユーザーはキーフレームをスキャンして、関心のある部分に簡単にジャンプできます。
-
ビデオプレイリスト:スプライトを使用して、プレイリスト内の各ビデオのサムネイルを表示できます。これにより、よりクリーンで視覚的に魅力的なインターフェイスが作成され、ユーザーエクスペリエンスが向上します。
-
ソーシャルメディアでの共有:ソーシャルメディアでビデオを共有する際、スプライトをカバー画像として使用することで、視聴者がビデオの内容をすばやく理解できるようになり、クリック率と再生回数を向上させることができます。
-
ライブストリームとイベントリプレイ:ライブイベントや録画されたコンテンツの場合、スプライトを使用すると、視聴者はハイライトをすばやく見つけることができ、リプレイの視聴がより便利になります。
サポートされているオーディオおよびビデオフォーマット
カテゴリ | フォーマット |
オーディオ | AAC、MP3、WAV、FLAC、WMA、AC3、OPUS などのすべての主流フォーマット。 |
ビデオ | MP4、MPEG-TS、MKV、MOV、AVI、FLV、M3U8、WebM、WMV、RM、VOB などのすべての主流フォーマット。 |
操作手順
前提条件
AccessKey を作成します。詳細については、「AccessKey の作成」をご参照ください。
Object Storage Service (OSS) を有効化し、バケットを作成します。詳細については、「バケットの作成」をご参照ください。
Intelligent Media Management (IMM) を有効化します。詳細については、「IMM の有効化」をご参照ください。
IMM コンソールでプロジェクトを作成します。詳細については、「プロジェクトの作成」をご参照ください。
説明API オペレーションを呼び出してプロジェクトを作成することもできます。詳細については、「プロジェクトの作成」をご参照ください。
ListProjects オペレーションを呼び出して、指定されたリージョンで作成されたすべてのプロジェクトをリスト表示できます。
ステップ 1:ファイルのアップロード
OSS コンソールを使用して、IMM プロジェクトと同じリージョンにあるバケットにメディアファイルをアップロードします。
バケットの [ファイル管理] ページで、[ファイルのアップロード] をクリックします。[ファイルのアップロード] パネルで、[ファイルのスキャン] をクリックしてアップロードするメディアファイルを選択します。ACL 設定はデフォルトの [バケットから継承] のままにして、[ファイルのアップロード] をクリックしてアップロードを完了します。コンソールからアップロードできるファイルの最大サイズは 5 GB です。より大きなファイルをアップロードするには、ossutil、OSS SDK、または OSS API を使用してください。
ステップ 2:ビデオスプライトの生成
CreateMediaConvertTask オペレーションを呼び出して、ビデオスプライト生成タスクを作成します。
パラメーターの例
ビデオスプライトを生成するプロセスには、通常、次のステップが含まれます:
-
フレーム抽出:サービスはビデオから指定されたキーフレームを抽出します。
-
画像処理:サービスは抽出されたフレームのサイズを変更して変換し、一貫性を確保して出力要件を満たします。
-
スプライト生成:サービスは処理されたフレームをグリッドに配置し、それらを 1 つの画像にマージしてスプライトを形成します。
以下の例では、IMM プロジェクト test-project とファイル oss://test-bucket/video-demo/sample-video.mov を使用してビデオスプライトを生成します。
メディア処理機能とその使用方法の詳細については、「メディアトランスコーディング」をご参照ください。
-
OpenAPI Explorer を使用して、ビデオファイルを処理し、SDK コードのサンプルを表示できます。
-
ビデオスプライトの生成には、
Target.URIおよびTarget.Containerパラメーターを設定しないでください。 -
ビデオスプライトの生成では、複数のスプライト画像が生成される場合があります。正確な数は、サブ画像の数とスプライトの行と列の構成によって異なります。
-
スプライトの出力 URI を
oss://bucket/objectPrefix-{index}.{autoext}に設定します。{index} 変数を含めないと、出力画像が互いに上書きされる可能性があります。変数の詳細については、「TargetURI テンプレート」をご参照ください。
ビデオ全体からのスプライト生成
この例では、ビデオ全体から 2 秒ごとに 1 フレームをキャプチャしてスプライトを生成します。各スプライトには 3x3 のグリッドのサブ画像が含まれ、各サブ画像の解像度は 200x150 ピクセルです。

トランスコーディング情報
-
スプライトフォーマット:jpg
-
フレームキャプチャ間隔:2 秒
-
スプライトのサブ画像レイアウト:3x3
-
サブ画像の解像度:200x150
-
サブ画像間のパディング (Pad):0
-
サブ画像とスプライトエッジ間のマージン (Margin):0
-
サブ画像のスケーリング方法:スケールとクロップ。詳細については、「スケーリング方法」をご参照ください。
-
出力ファイルパス:
oss://test-bucket/video-demo/sprites-{index}.{autoext} -
完了通知:MNS メッセージを MNS トピック test-mns-topic に送信します。
SDK の例については、OpenAPI Explorer をご参照ください。サンプルパラメーターは事前に入力されています。必要に応じてデバッグ前に変更できます。
リクエストパラメーター
{
"ProjectName": "test-project",
"Notification": {
"MNS": {
"TopicName": "test-mns-topic"
}
},
"Sources": [
{
"URI": "oss://test-bucket/video-demo/sample-video.mov"
}
],
"Targets": [
{
"Image": {
"Sprites": [
{
"Format": "jpg",
"Interval": 2,
"Margin": 0,
"Pad": 0,
"ScaleHeight": 150,
"ScaleType": "crop",
"ScaleWidth": 200,
"TileHeight": 3,
"TileWidth": 3,
"URI": "oss://test-bucket/video-demo/sprites-{index}.{autoext}"
}
]
}
}
]
}特定の時間範囲からのスプライト生成
この例では、ビデオの 5 秒目から 30 秒目まで、2 秒ごとに 1 フレームをキャプチャしてスプライトを生成します。各スプライトには 3x5 のグリッドのサブ画像が含まれ、各サブ画像のディメンションはソースビデオの 1/10 にスケーリングされます。

トランスコーディング情報
スプライトフォーマット:jpg
キャプチャ開始時刻:5 秒
キャプチャ持続時間:25 秒
フレームキャプチャ間隔:2 秒
スプライトのサブ画像レイアウト:3x5
サブ画像の解像度:ソースビデオの 1/10
サブ画像間のパディング (Pad):4
サブ画像とスプライトエッジ間のマージン (Margin):5
サブ画像のスケーリング方法:黒枠なしでサイズに合わせる。詳細については、「スケーリング方法」をご参照ください。
出力ファイルパス:
oss://test-bucket/video-demo/sprites-{index}.{autoext}完了通知:MNS メッセージを MNS トピック test-mns-topic に送信します。
SDK の例については、OpenAPI Explorer をご参照ください。サンプルパラメーターは事前に入力されています。必要に応じてデバッグ前に変更できます。
リクエストパラメーター
{
"ProjectName": "test-project",
"Notification": {
"MNS": {
"TopicName": "test-mns-topic"
}
},
"Sources": [
{
"Duration": 25,
"StartTime": 5,
"URI": "oss://test-bucket/video-demo/sample-video.mov"
}
],
"Targets": [
{
"Image": {
"Sprites": [
{
"Format": "jpg",
"Interval": 2,
"Margin": 5,
"Pad": 4,
"ScaleHeight": 0.1,
"ScaleType": "fit",
"ScaleWidth": 0.1,
"TileHeight": 5,
"TileWidth": 3,
"URI": "oss://test-bucket/video-demo/sprites-{index}.{autoext}"
}
]
}
}
]
}等間隔フレームでのスプライト生成
この例では、DetectMediaMeta オペレーションを使用してビデオの持続時間を取得し、特定の数の等間隔フレームでスプライトを生成する方法を示します。
ステップ 1:ビデオの持続時間の取得
DetectMediaMeta オペレーションを呼び出して、ビデオの持続時間を取得します。SDK の例については、OpenAPI Explorer をご参照ください。サンプルパラメーターは事前に入力されています。必要に応じてデバッグ前に変更できます。
リクエストパラメーター
{
"ProjectName": "test-project",
"SourceURI": "oss://test-bucket/video-demo/sample-video.mov"
}レスポンスパラメーター
{
"Addresses": [],
"AudioStreams": [],
"Bitrate": 45521134,
"Duration": 31.64,
"FormatLongName": "QuickTime / MOV",
"FormatName": "mov,mp4,m4a,3gp,3g2,mj2",
"ProduceTime": "2014-12-19T14:20:38Z",
"RequestId": "94A9AF46-B403-51D5-988F-D9B4939DEF39",
"Size": 180036088,
"StreamCount": 2,
"Subtitles": [],
"VideoHeight": 1080,
"VideoStreams": [
{
"AverageFrameRate": "25/1",
"BitDepth": 8,
"Bitrate": 45517646,
"CodecLongName": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10",
"CodecName": "h264",
"CodecTag": "0x31637661",
"CodecTagString": "avc1",
"ColorPrimaries": "bt709",
"ColorRange": "tv",
"ColorSpace": "bt709",
"ColorTransfer": "bt709",
"Duration": 31.64,
"FrameCount": 791,
"FrameRate": "25/1",
"HasBFrames": 1,
"Height": 1080,
"Language": "eng",
"Level": 50,
"PixelFormat": "yuv420p",
"Profile": "Main",
"TimeBase": "1/2500",
"Width": 1920
}
],
"VideoWidth": 1920
}ステップ 2:等間隔フレームでのスプライト生成
ビデオの持続時間は 31.64 秒です。9 つの等間隔のサブ画像をキャプチャするには、フレームキャプチャ間隔は 31.64 / (9 - 1) = 3.955 秒と計算されます。スプライトは 3x3 のレイアウトで、各サブ画像のディメンションはソースビデオの 1/10 にスケーリングされます。
トランスコーディング情報
スプライトフォーマット:jpg
フレームキャプチャ間隔:3.955 秒
スプライトのサブ画像レイアウト:3x3
サブ画像の解像度:ソースビデオの 1/10
サブ画像間のパディング (Pad):4
サブ画像とスプライトエッジ間のマージン (Margin):5
サブ画像のスケーリング方法:黒枠なしでサイズに合わせる。詳細については、「スケーリング方法」をご参照ください。
出力ファイルパス:
oss://test-bucket/video-demo/sprites-{index}.{autoext}完了通知:MNS メッセージを MNS トピック test-mns-topic に送信します。
SDK の例については、OpenAPI Explorer をご参照ください。サンプルパラメーターは事前に入力されています。必要に応じてデバッグ前に変更できます。
リクエストパラメーター
{
"ProjectName": "test-project",
"Notification": {
"MNS": {
"TopicName": "test-mns-topic"
}
},
"Sources": [
{
"URI": "oss://test-bucket/video-demo/sample-video.mov"
}
],
"Targets": [
{
"Image": {
"Sprites": [
{
"Format": "jpg",
"Interval": 3.955,
"Margin": 5,
"Pad": 4,
"ScaleHeight": 0.1,
"ScaleType": "fit",
"ScaleWidth": 0.1,
"TileHeight": 3,
"TileWidth": 3,
"URI": "oss://test-bucket/video-demo/sprites-{index}.{autoext}"
}
]
}
}
]
}