すべてのプロダクト
Search
ドキュメントセンター

ApsaraVideo Media Processing:スナップショットのキャプチャ

最終更新日:Jan 12, 2025

ビデオのスナップショット機能を使用すると、ビデオの特定の時点での特定のサイズのスナップショットをキャプチャできます。スナップショットは、ビデオのサムネイル、スプライト、プログレスバーのサムネイルなどのシナリオで使用されます。 スナップショットジョブは、ApsaraVideo Media Processing(MPS)コンソール、API、または SDK を使用して送信できます。 このトピックでは、MPS SDK for Go V2.0 を使用してスナップショットジョブを送信およびクエリする方法の例を示します。 スナップショットをキャプチャする時点、連続する 2 つの スナップショット間のインターバル、キャプチャする スナップショットの数、キャプチャする スナップショットのタイプ、および複数の スナップショットを 1 つの画像スプライトに合成するかどうかを指定できます。

前提条件

SDK クライアントが初期化されていること。 詳細については、クライアントの初期化をご参照ください。

スナップショットジョブの送信

SubmitSnapshotJob オペレーションを呼び出して、スナップショットジョブを送信できます。

説明
  • SDK を使用してスナップショットジョブを送信する場合は、ファイルが置かれているファイルパスに対して URL エンコードを実行する必要があります。 そうしないと、スナップショットジョブは送信に失敗します。 詳細については、URL エンコードをご参照ください。

  • ファイル名が有効であることを確認してください。 そうしないと、ファイルが見つからず、スナップショットジョブは送信に失敗します。 詳細については、パラメータの詳細をご参照ください。

  • スナップショットジョブの ID を記録することをお勧めします。 これにより、後続のクエリ操作が容易になります。

package main

import (
  "encoding/json"
  "strings"
  "fmt"
  "os"
  mts20140618  "github.com/alibabacloud-go/mts-20140618/v6/client"
  openapi  "github.com/alibabacloud-go/darabonba-openapi/v2/client"
  util  "github.com/alibabacloud-go/tea-utils/v2/service"
  "github.com/alibabacloud-go/tea/tea"
)


// 説明:
// 
// AccessKey ID と AccessKey シークレットを使用してクライアントを初期化します。
// 
// @return Client
// 
// @throws Exception
func CreateClient () (_result *mts20140618.Client, _err error) {

  config := &openapi.Config{
    // 必須。 ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
    AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
    // 必須。 ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
    AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
  }
  config.Endpoint = tea.String("mts.cn-hangzhou.aliyuncs.com")
  _result = &mts20140618.Client{}
  _result, _err = mts20140618.NewClient(config)
  return _result, _err
}

func _main (args []*string) (_err error) {
  client, _err := CreateClient()
  if _err != nil {
    return _err
  }

  submitSnapshotJobRequest := &mts20140618.SubmitSnapshotJobRequest{
    Input: tea.String("{\"Bucket\":\"example-bucket\",\"Location\":\"example-location\",\"Object\":\"example%2Ftest.flv\"}"),
    SnapshotConfig: tea.String("{\"OutputFile\":{\"Bucket\":\"example-001\",\"Location\":\"example-location\",\"Object\":\"{Count}.jpg\"},\"Time\":\"5\",\"Num\":\"10\",\"Interval\":\"20\"}"),
  }
  runtime := &util.RuntimeOptions{}
  tryErr := func()(_e error) {
    defer func() {
      if r := tea.Recover(recover()); r != nil {
        _e = r
      }
    }()
    // 必要に応じて、API オペレーションのレスポンスを表示するための独自のコードを記述します。
    _, _err = client.SubmitSnapshotJobWithOptions(submitSnapshotJobRequest, runtime)
    if _err != nil {
      return _err
    }

    return nil
  }()

  if tryErr != nil {
    var error = &tea.SDKError{}
    if _t, ok := tryErr.(*tea.SDKError); ok {
      error = _t
    } else {
      error.Message = tea.String(tryErr.Error())
    }
    // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトで例外を無視しないでください。 この例では、エラーメッセージは参照用にのみ表示されます。
    // エラーメッセージ。
    fmt.Println(tea.StringValue(error.Message))
    // 対応するエラー診断ページの URL。
    var data interface{}
    d := json.NewDecoder(strings.NewReader(tea.StringValue(error.Data)))
    d.Decode(&data)
    if m, ok := data.(map[string]interface{}); ok {
      recommend, _ := m["Recommend"]
      fmt.Println(recommend)
    }
    _, _err = util.AssertAsString(error.Message)
    if _err != nil {
      return _err
    }
  }
  return _err
}


func main() {
  err := _main(tea.StringSlice(os.Args[1:]))
  if err != nil {
    panic(err)
  }
}

スナップショットジョブの結果のクエリ

QuerySnapshotJobList オペレーションを呼び出して、スナップショットジョブの結果をクエリできます。

package main

import (
  "encoding/json"
  "strings"
  "fmt"
  "os"
  mts20140618  "github.com/alibabacloud-go/mts-20140618/v6/client"
  openapi  "github.com/alibabacloud-go/darabonba-openapi/v2/client"
  util  "github.com/alibabacloud-go/tea-utils/v2/service"
  "github.com/alibabacloud-go/tea/tea"
)


// 説明:
// 
// AccessKey ID と AccessKey シークレットを使用してクライアントを初期化します。
// 
// @return Client
// 
// @throws Exception
func CreateClient () (_result *mts20140618.Client, _err error) {

  config := &openapi.Config{
    // 必須。 ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
    AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
    // 必須。 ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
    AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
  }

  config.Endpoint = tea.String("mts.cn-hangzhou.aliyuncs.com")
  _result = &mts20140618.Client{}
  _result, _err = mts20140618.NewClient(config)
  return _result, _err
}

func _main (args []*string) (_err error) {
  client, _err := CreateClient()
  if _err != nil {
    return _err
  }

  querySnapshotJobListRequest := &mts20140618.QuerySnapshotJobListRequest{}
  runtime := &util.RuntimeOptions{}
  tryErr := func()(_e error) {
    defer func() {
      if r := tea.Recover(recover()); r != nil {
        _e = r
      }
    }()
    // 必要に応じて、API オペレーションのレスポンスを表示するための独自のコードを記述します。
    _, _err = client.QuerySnapshotJobListWithOptions(querySnapshotJobListRequest, runtime)
    if _err != nil {
      return _err
    }

    return nil
  }()

  if tryErr != nil {
    var error = &tea.SDKError{}
    if _t, ok := tryErr.(*tea.SDKError); ok {
      error = _t
    } else {
      error.Message = tea.String(tryErr.Error())
    }
    // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトで例外を無視しないでください。 この例では、エラーメッセージは参照用にのみ表示されます。
    // エラーメッセージ。
    fmt.Println(tea.StringValue(error.Message))
    // 対応するエラー診断ページの URL。
    var data interface{}
    d := json.NewDecoder(strings.NewReader(tea.StringValue(error.Data)))
    d.Decode(&data)
    if m, ok := data.(map[string]interface{}); ok {
      recommend, _ := m["Recommend"]
      fmt.Println(recommend)
    }
    _, _err = util.AssertAsString(error.Message)
    if _err != nil {
      return _err
    }
  }
  return _err
}


func main() {
  err := _main(tea.StringSlice(os.Args[1:]))
  if err != nil {
    panic(err)
  }
}

関連情報