このページでは、コード変換する動画のフレームを含むスプライト シートを生成する方法について説明します。この縮小サイズのフレーム(サムネイルとも呼ばれます)は、コンテンツの整理やプレビューに役立ちます。スプライト シートを生成するには、JobConfig
テンプレートの spriteSheets
配列を使用します。
スプライト シートの生成には、次の 2 つの方法があります。
- 入力された動画タイムライン全体に均等に分配されるサムネイル画像を設定した数だけ生成する。
- サムネイル画像を定期的に生成する。通常は、動画入力のタイムラインを n 秒間隔で繰り返します。
設定した数のサムネイル画像を生成する
次の構成では、大きな画像の 10x10 スプライト シートと、小さな画像の 10x10 スプライト シートがそれぞれ 100 個(サムネイル)生成されます。 スプライト シートでは、ジョブ構成に少なくとも 1 つの VideoStream
が必要です。
この構成をジョブ テンプレートに追加するか、アドホック ジョブ構成に含めることができます。
リクエストのデータを使用する前に、次のように置き換えます。
: IAM 設定に記載されている Google Cloud プロジェクト ID。PROJECT_ID
: ジョブを実行するロケーション。サポートされているリージョンのいずれかを使用します。LOCATION ロケーションを表示us-central1
us-west1
us-west2
us-east1
us-east4
southamerica-east1
northamerica-northeast1
asia-east1
asia-northeast1
asia-northeast3
asia-south1
asia-southeast1
australia-southeast1
europe-west1
europe-west2
europe-west4
me-west1
me-central1
me-central2
: 作成した Cloud Storage バケットの名前。STORAGE_BUCKET_NAME
: コード変換する Cloud Storage バケット内の動画の名前(STORAGE_INPUT_VIDEO my-vid.mp4
など)。このフィールドでは、バケットで作成したフォルダ(input/my-vid.mp4
など)を考慮する必要があります。
: エンコードされた動画出力を保存する Cloud Storage フォルダ名。STORAGE_OUTPUT_FOLDER
リクエストを送信するには、次のいずれかのオプションを展開します。
curl(Linux、macOS、Cloud Shell)
リクエスト本文を request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。
cat > request.json << 'EOF' { "config": { "inputs": [ { "key": "input0", "uri": "gs://STORAGE_BUCKET_NAME /STORAGE_INPUT_VIDEO " } ], "elementaryStreams": [ { "key": "video-stream0", "videoStream": { "h264": { "heightPixels": 360, "widthPixels": 640, "bitrateBps": 550000, "frameRate": 60 } } }, { "key": "audio-stream0", "audioStream": { "codec": "aac", "bitrateBps": 64000 } } ], "muxStreams": [ { "key": "sd", "container": "mp4", "elementaryStreams": [ "video-stream0", "audio-stream0" ] } ], "output": { "uri": "gs://STORAGE_BUCKET_NAME /STORAGE_OUTPUT_FOLDER /" }, "spriteSheets": [ { "filePrefix": "small-sprite-sheet", "spriteHeightPixels": 32, "spriteWidthPixels": 64, "columnCount": 10, "rowCount": 10, "totalCount": 100 }, { "filePrefix": "large-sprite-sheet", "spriteHeightPixels": 72, "spriteWidthPixels": 128, "columnCount": 10, "rowCount": 10, "totalCount": 100 } ] } } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://transcoder.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /jobs"
PowerShell(Windows)
リクエスト本文を request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。
@' { "config": { "inputs": [ { "key": "input0", "uri": "gs://STORAGE_BUCKET_NAME /STORAGE_INPUT_VIDEO " } ], "elementaryStreams": [ { "key": "video-stream0", "videoStream": { "h264": { "heightPixels": 360, "widthPixels": 640, "bitrateBps": 550000, "frameRate": 60 } } }, { "key": "audio-stream0", "audioStream": { "codec": "aac", "bitrateBps": 64000 } } ], "muxStreams": [ { "key": "sd", "container": "mp4", "elementaryStreams": [ "video-stream0", "audio-stream0" ] } ], "output": { "uri": "gs://STORAGE_BUCKET_NAME /STORAGE_OUTPUT_FOLDER /" }, "spriteSheets": [ { "filePrefix": "small-sprite-sheet", "spriteHeightPixels": 32, "spriteWidthPixels": 64, "columnCount": 10, "rowCount": 10, "totalCount": 100 }, { "filePrefix": "large-sprite-sheet", "spriteHeightPixels": 72, "spriteWidthPixels": 128, "columnCount": 10, "rowCount": 10, "totalCount": 100 } ] } } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://transcoder.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /jobs" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
{ "name": "projects/PROJECT_NUMBER /locations/LOCATION /jobs/JOB_ID ", "config": { ... }, "state": "PENDING", "createTime":CREATE_TIME , "ttlAfterCompletionDays": 30 }
- ジョブ フィールドを定義する
request.json
ファイルを作成します。gcloud
コマンドを次のように置き換えます。STORAGE_BUCKET_NAME : 作成した Cloud Storage バケットの名前。STORAGE_INPUT_VIDEO : コード変換する Cloud Storage バケット内の動画の名前(my-vid.mp4
など)。このフィールドでは、バケットで作成したフォルダ(input/my-vid.mp4
など)を考慮する必要があります。LOCATION : ジョブを実行するロケーション。次に挙げるロケーションの 1 つを使用します。ロケーションを表示us-central1
us-west1
us-west2
us-east1
us-east4
southamerica-east1
northamerica-northeast1
asia-east1
asia-northeast1
asia-northeast3
asia-south1
asia-southeast1
australia-southeast1
europe-west1
europe-west2
europe-west4
me-west1
me-central1
me-central2
STORAGE_OUTPUT_FOLDER : エンコードされた動画出力を保存する Cloud Storage フォルダ名。
{ "config": { "inputs": [ { "key": "input0", "uri": "gs://
STORAGE_BUCKET_NAME /STORAGE_INPUT_VIDEO " } ], "elementaryStreams": [ { "key": "video-stream0", "videoStream": { "h264": { "heightPixels": 360, "widthPixels": 640, "bitrateBps": 550000, "frameRate": 60 } } }, { "key": "audio-stream0", "audioStream": { "codec": "aac", "bitrateBps": 64000 } } ], "muxStreams": [ { "key": "sd", "container": "mp4", "elementaryStreams": [ "video-stream0", "audio-stream0" ] } ], "output": { "uri": "gs://STORAGE_BUCKET_NAME /STORAGE_OUTPUT_FOLDER /" }, "spriteSheets": [ { "filePrefix": "small-sprite-sheet", "spriteHeightPixels": 32, "spriteWidthPixels": 64, "columnCount": 10, "rowCount": 10, "totalCount": 100 }, { "filePrefix": "large-sprite-sheet", "spriteHeightPixels": 72, "spriteWidthPixels": 128, "columnCount": 10, "rowCount": 10, "totalCount": 100 } ] } } - 次のコマンドを実行します。
次のようなレスポンスが表示されます。gcloud transcoder jobs create --location=
LOCATION --file="request.json"{ "name": "projects/
PROJECT_NUMBER /locations/LOCATION /jobs/JOB_ID ", "config": { ... }, "state": "PENDING", "createTime":CREATE_TIME , "ttlAfterCompletionDays": 30 }
このサンプルを試す前に、クライアント ライブラリを使用した Transcoder API クイックスタートにある C# の設定手順を行ってください。 詳細については、Transcoder API C# の API のリファレンス ドキュメントをご覧ください。
Transcoder API への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
このサンプルを試す前に、クライアント ライブラリを使用した Transcoder API クイックスタートにある Go の設定手順を行ってください。 詳細については、Transcoder API Go の API のリファレンス ドキュメントをご覧ください。
Transcoder API への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
このサンプルを試す前に、クライアント ライブラリを使用した Transcoder API クイックスタートにある Java の設定手順を行ってください。 詳細については、Transcoder API Java の API のリファレンス ドキュメントをご覧ください。
Transcoder API への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
このサンプルを試す前に、クライアント ライブラリを使用した Transcoder API クイックスタートにある Node.js の設定手順を行ってください。 詳細については、Transcoder API Node.js の API のリファレンス ドキュメントをご覧ください。
Transcoder API への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
このサンプルを試す前に、クライアント ライブラリを使用した Transcoder API クイックスタートにある PHP の設定手順を行ってください。 詳細については、Transcoder API PHP の API のリファレンス ドキュメントをご覧ください。
Transcoder API への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
このサンプルを試す前に、クライアント ライブラリを使用した Transcoder API クイックスタートにある Python の設定手順を行ってください。 詳細については、Transcoder API Python の API のリファレンス ドキュメントをご覧ください。
Transcoder API への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
このサンプルを試す前に、クライアント ライブラリを使用した Transcoder API クイックスタートにある Ruby の設定手順を行ってください。 詳細については、Transcoder API Ruby の API のリファレンス ドキュメントをご覧ください。
Transcoder API への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
サンプル動画でこの構成を使用して、次のスプライトシートを生成します。
図 1.小さい画像のスプライトシート(100 個のサムネイル)
図 2.大きい画像のスプライトシート(100 個のサムネイル)
定期的にサムネイル画像を生成する
次の構成は、小さな画像のスプライトシートと、大きな画像のスプライト シートを生成します。各スプライト シートには、入力動画から 7 秒ごとに生成されたサムネイルが含まれます。 スプライト シートでは、ジョブ構成に少なくとも 1 つの VideoStream
が必要です。
この構成をジョブ テンプレートに追加するか、アドホック ジョブ構成に含めることができます。
リクエストのデータを使用する前に、次のように置き換えます。
: IAM 設定に記載されている Google Cloud プロジェクト ID。PROJECT_ID
: ジョブを実行するロケーション。サポートされているリージョンのいずれかを使用します。LOCATION ロケーションを表示us-central1
us-west1
us-west2
us-east1
us-east4
southamerica-east1
northamerica-northeast1
asia-east1
asia-northeast1
asia-northeast3
asia-south1
asia-southeast1
australia-southeast1
europe-west1
europe-west2
europe-west4
me-west1
me-central1
me-central2
: 作成した Cloud Storage バケットの名前。STORAGE_BUCKET_NAME
: コード変換する Cloud Storage バケット内の動画の名前(STORAGE_INPUT_VIDEO my-vid.mp4
など)。このフィールドでは、バケットで作成したフォルダ(input/my-vid.mp4
など)を考慮する必要があります。
: エンコードされた動画出力を保存する Cloud Storage フォルダ名。STORAGE_OUTPUT_FOLDER
リクエストを送信するには、次のいずれかのオプションを展開します。
curl(Linux、macOS、Cloud Shell)
リクエスト本文を request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。
cat > request.json << 'EOF' { "config": { "inputs": [ { "key": "input0", "uri": "gs://STORAGE_BUCKET_NAME /STORAGE_INPUT_VIDEO " } ], "elementaryStreams": [ { "key": "video-stream0", "videoStream": { "h264": { "heightPixels": 360, "widthPixels": 640, "bitrateBps": 550000, "frameRate": 60 } } }, { "key": "audio-stream0", "audioStream": { "codec": "aac", "bitrateBps": 64000 } } ], "muxStreams": [ { "key": "sd", "container": "mp4", "elementaryStreams": [ "video-stream0", "audio-stream0" ] } ], "output": { "uri": "gs://STORAGE_BUCKET_NAME /STORAGE_OUTPUT_FOLDER /" }, "spriteSheets": [ { "filePrefix": "small-sprite-sheet", "spriteHeightPixels": 32, "spriteWidthPixels": 64, "interval": "7s" }, { "filePrefix": "large-sprite-sheet", "spriteHeightPixels": 72, "spriteWidthPixels": 128, "interval": "7s" } ] } } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://transcoder.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /jobs"
PowerShell(Windows)
リクエスト本文を request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。
@' { "config": { "inputs": [ { "key": "input0", "uri": "gs://STORAGE_BUCKET_NAME /STORAGE_INPUT_VIDEO " } ], "elementaryStreams": [ { "key": "video-stream0", "videoStream": { "h264": { "heightPixels": 360, "widthPixels": 640, "bitrateBps": 550000, "frameRate": 60 } } }, { "key": "audio-stream0", "audioStream": { "codec": "aac", "bitrateBps": 64000 } } ], "muxStreams": [ { "key": "sd", "container": "mp4", "elementaryStreams": [ "video-stream0", "audio-stream0" ] } ], "output": { "uri": "gs://STORAGE_BUCKET_NAME /STORAGE_OUTPUT_FOLDER /" }, "spriteSheets": [ { "filePrefix": "small-sprite-sheet", "spriteHeightPixels": 32, "spriteWidthPixels": 64, "interval": "7s" }, { "filePrefix": "large-sprite-sheet", "spriteHeightPixels": 72, "spriteWidthPixels": 128, "interval": "7s" } ] } } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://transcoder.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /jobs" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
{ "name": "projects/PROJECT_NUMBER /locations/LOCATION /jobs/JOB_ID ", "config": { ... }, "state": "PENDING", "createTime":CREATE_TIME , "ttlAfterCompletionDays": 30 }
- ジョブ フィールドを定義する
request.json
ファイルを作成します。gcloud
コマンドを次のように置き換えます。STORAGE_BUCKET_NAME : 作成した Cloud Storage バケットの名前。STORAGE_INPUT_VIDEO : コード変換する Cloud Storage バケット内の動画の名前(my-vid.mp4
など)。このフィールドでは、バケットで作成したフォルダ(input/my-vid.mp4
など)を考慮する必要があります。LOCATION : ジョブを実行するロケーション。次に挙げるロケーションの 1 つを使用します。ロケーションを表示us-central1
us-west1
us-west2
us-east1
us-east4
southamerica-east1
northamerica-northeast1
asia-east1
asia-northeast1
asia-northeast3
asia-south1
asia-southeast1
australia-southeast1
europe-west1
europe-west2
europe-west4
me-west1
me-central1
me-central2
STORAGE_OUTPUT_FOLDER : エンコードされた動画出力を保存する Cloud Storage フォルダ名。
{ "config": { "inputs": [ { "key": "input0", "uri": "gs://
STORAGE_BUCKET_NAME /STORAGE_INPUT_VIDEO " } ], "elementaryStreams": [ { "key": "video-stream0", "videoStream": { "h264": { "heightPixels": 360, "widthPixels": 640, "bitrateBps": 550000, "frameRate": 60 } } }, { "key": "audio-stream0", "audioStream": { "codec": "aac", "bitrateBps": 64000 } } ], "muxStreams": [ { "key": "sd", "container": "mp4", "elementaryStreams": [ "video-stream0", "audio-stream0" ] } ], "output": { "uri": "gs://STORAGE_BUCKET_NAME /STORAGE_OUTPUT_FOLDER /" }, "spriteSheets": [ { "filePrefix": "small-sprite-sheet", "spriteHeightPixels": 32, "spriteWidthPixels": 64, "interval": "7s" }, { "filePrefix": "large-sprite-sheet", "spriteHeightPixels": 72, "spriteWidthPixels": 128, "interval": "7s" } ] } } - 次のコマンドを実行します。
次のようなレスポンスが表示されます。gcloud transcoder jobs create --location=
LOCATION --file="request.json"{ "name": "projects/
PROJECT_NUMBER /locations/LOCATION /jobs/JOB_ID ", "config": { ... }, "state": "PENDING", "createTime":CREATE_TIME , "ttlAfterCompletionDays": 30 }
このサンプルを試す前に、クライアント ライブラリを使用した Transcoder API クイックスタートにある C# の設定手順を行ってください。 詳細については、Transcoder API C# の API のリファレンス ドキュメントをご覧ください。
Transcoder API への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
このサンプルを試す前に、クライアント ライブラリを使用した Transcoder API クイックスタートにある Go の設定手順を行ってください。 詳細については、Transcoder API Go の API のリファレンス ドキュメントをご覧ください。
Transcoder API への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
このサンプルを試す前に、クライアント ライブラリを使用した Transcoder API クイックスタートにある Java の設定手順を行ってください。 詳細については、Transcoder API Java の API のリファレンス ドキュメントをご覧ください。
Transcoder API への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
このサンプルを試す前に、クライアント ライブラリを使用した Transcoder API クイックスタートにある Node.js の設定手順を行ってください。 詳細については、Transcoder API Node.js の API のリファレンス ドキュメントをご覧ください。
Transcoder API への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
このサンプルを試す前に、クライアント ライブラリを使用した Transcoder API クイックスタートにある PHP の設定手順を行ってください。 詳細については、Transcoder API PHP の API のリファレンス ドキュメントをご覧ください。
Transcoder API への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
このサンプルを試す前に、クライアント ライブラリを使用した Transcoder API クイックスタートにある Python の設定手順を行ってください。 詳細については、Transcoder API Python の API のリファレンス ドキュメントをご覧ください。
Transcoder API への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
このサンプルを試す前に、クライアント ライブラリを使用した Transcoder API クイックスタートにある Ruby の設定手順を行ってください。 詳細については、Transcoder API Ruby の API のリファレンス ドキュメントをご覧ください。
Transcoder API への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
サンプル動画でこの構成を使用して、次のスプライトシートを生成します。
図 3.小さい画像のスプライトシート(7 秒ごとに 1 サムネイル)
図 4.大きい画像スプライトシート(7 秒ごとに 1 サムネイル)
サンプル動画から 8 個のサムネイル(長さは 60 秒)が生成されます。