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

Object Storage Service:非同期処理

最終更新日:Aug 16, 2025

非同期処理(x-oss-async-process)を使用すると、プログラムはタスクの完了を待たずに他のタスクを実行できます。 このトピックでは、ドキュメント変換、ビデオトランスコーディング、ビデオマージなどのシナリオで Go V2 用 OSS SDK を使用して非同期処理を実行する方法について説明します。

制限事項

  • このトピックのサンプルコードでは、デフォルトで中国(杭州)リージョン(ID:cn-hangzhou)とパブリックエンドポイントを使用しています。 同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。 OSS でサポートされているリージョンとエンドポイントの詳細については、「OSS のリージョンとエンドポイント」をご参照ください。

  • このトピックでは、アクセス認証情報は環境変数から取得されます。 アクセス認証情報を構成する方法については、「アクセス認証情報を構成する」をご参照ください。

メソッド

func (c *Client) AsyncProcessObject(ctx context.Context, request *AsyncProcessObjectRequest, optFns ...func(*Options)) (*AsyncProcessObjectResult, error)

リクエストパラメーター

パラメーター

タイプ

説明

ctx

context.Context

リクエストのコンテキスト。リクエストの合計継続時間を指定するために使用できます

request

*AsyncProcessObjectRequest

特定のインターフェイスのリクエストパラメーターを指定します。 詳細については、「AsyncProcessObjectRequest」をご参照ください

optFns

...func(*Options)

(オプション)インターフェイスレベルの構成パラメーター。 詳細については、「Options」をご参照ください

戻り値リスト

戻り値名

タイプ

説明

result

*AsyncProcessObjectResult

インターフェイスの戻り値。 err が nil の場合に有効です。 詳細については、「AsyncProcessObjectResult」をご参照ください

err

error

リクエストのステータス。 リクエストが失敗した場合、err の値は nil ではありません

サンプルコード

次のコードは、Go SDK V2 を使用してドキュメント形式変換を実行し、目的の出力タイプを取得する方法を示しています。

package main

import (
	"context"
	"encoding/base64"
	"flag"
	"fmt"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string // リージョンを格納する変数を指定します
	bucketName string // バケット名を格納する変数を指定します
	objectName string // 変換対象のドキュメント名を格納する変数を指定します
)

// init 関数は main 関数の前に実行され、プログラムを初期化します
func init() {
	// コマンドラインパラメーターを使用してリージョンを指定します
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	// コマンドラインパラメーターを使用してバケット名を指定します
	flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
	// コマンドラインパラメーターを使用して変換対象のドキュメントの名前を指定します
	flag.StringVar(&objectName, "object", "", "オブジェクトの名前。")
}

func main() {
	flag.Parse() // コマンドラインパラメーターを解析します

	// リージョンが指定されているかどうかを確認します。 リージョンが指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、リージョンが必要です")
	}
	// バケット名が指定されているかどうかを確認します。 バケット名が指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、バケット名が必要です")
	}
	// オブジェクト名が指定されているかどうかを確認します。 オブジェクト名が指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、オブジェクト名が必要です")
	}

	// 構成オブジェクトを作成し、環境変数を認証情報プロバイダーおよび指定されたリージョンとして使用します
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // 構成を使用して新しい OSS クライアントを作成します

	// 出力ファイルの名前を指定します
	targetKey := "dest.png"

	// 文字列型の style 変数を作成して、ドキュメント変換パラメーターを格納します
	animationStyle := "doc/convert,target_png,source_docx" // ソース Docx ドキュメントを PNG 画像に変換する処理ルールを定義します

	// 処理命令を作成します。これには、ストレージパス、Base64 エンコードされたバケット名、およびキャプチャされたフレーム名が含まれます
	bucketNameEncoded := base64.URLEncoding.EncodeToString([]byte(bucketName))
	targetKeyEncoded := base64.URLEncoding.EncodeToString([]byte(targetKey))
	process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify", animationStyle, bucketNameEncoded, targetKeyEncoded)

	// AsyncProcessObject リクエストを作成して、特定のオブジェクトの非同期処理を開始します
	request := &oss.AsyncProcessObjectRequest{
		Bucket:       oss.Ptr(bucketName), // 操作対象のバケット名を指定します
		Key:          oss.Ptr(objectName), // 処理対象のドキュメントの名前を指定します
		AsyncProcess: oss.Ptr(process),    // 非同期処理命令を指定します
	}

	// リクエストを実行してオブジェクトを非同期に処理し、戻り結果を受信します
	result, err := client.AsyncProcessObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("オブジェクトの非同期処理に失敗しました %v", err)
	}

	log.Printf("非同期処理オブジェクトの結果:%#v\n", result)
}

一般的なシナリオ

ビデオトランスコーディング

ビデオトランスコーディング機能を使用すると、ビデオエンコーディング形式の変更、ビデオファイルサイズを小さくするための解像度とビットレートの削減、ビデオコンテナ形式の変換を行うことができます。

package main

import (
	"context"
	"encoding/base64"
	"flag"
	"fmt"
	"log"
	"strings"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string // コマンドラインから取得したリージョン情報を格納する変数を指定します
	bucketName string // コマンドラインから取得したバケット名を格納する変数を指定します
	objectName string // コマンドラインから取得したオブジェクト名を格納する変数を指定します
)

func init() {
	// コマンドラインパラメーターを使用してリージョンを指定します
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	// コマンドラインパラメーターを使用してバケット名を指定します
	flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
	// コマンドラインパラメーターを使用して、トランスコードするビデオの名前を指定します
	flag.StringVar(&objectName, "object", "", "オブジェクトの名前。")
}

func main() {
	flag.Parse() // コマンドラインパラメーターを解析します

	// リージョンが指定されているかどうかを確認します。 リージョンが指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、リージョンが必要です")
	}
	// バケット名が指定されているかどうかを確認します。 バケット名が指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、バケット名が必要です")
	}
	// オブジェクト名が指定されているかどうかを確認します。 オブジェクト名が指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、オブジェクト名が必要です")
	}

	// 構成オブジェクトを作成し、環境変数を認証情報プロバイダーおよび指定されたリージョンとして使用します
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // 構成を使用して新しい OSS クライアントを作成します


	// 出力ビデオの名前を指定します
	targetObject := "dest.avi"

	// 処理スタイルを定義します。 これは、形式、ビデオコーデック、解像度、ビットレート、フレームレート、オーディオコーデック、オーディオビットレート、その他のパラメーターを含むサンプルのビデオ変換構成です。
	style := "video/convert,f_avi,vcodec_h265,s_1920x1080,vb_2000000,fps_30,acodec_aac,ab_100000,sn_1"

	// 非同期処理命令を構築します。処理スタイルと処理済みファイルの保存場所が含まれます(バケット名とオブジェクト名は Base64 エンコードされています)。
	process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v",
		style,
		strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(bucketName)), "="),   // バケット名を Base64 エンコードし、末尾の '=' を削除します
		strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(targetObject)), "=")) // オブジェクト名を Base64 エンコードし、末尾の '=' を削除します

	// AsyncProcessObject リクエストを作成して、特定のオブジェクトの非同期処理を開始します
	request := &oss.AsyncProcessObjectRequest{
		Bucket:       oss.Ptr(bucketName), // 操作対象のバケット名を指定します
		Key:          oss.Ptr(objectName), // 処理対象のビデオの名前を指定します
		AsyncProcess: oss.Ptr(process),    // 非同期処理命令を指定します
	}

	// リクエストを実行してオブジェクトを非同期に処理し、戻り結果を受信します
	result, err := client.AsyncProcessObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("オブジェクトの非同期処理に失敗しました %v", err)
	}

	log.Printf("非同期処理オブジェクトの結果:%#v\n", result)
}

ビデオをアニメーション画像に変換する

ビデオをアニメーション画像に変換する機能を使用して、ビデオを GIF または WebP 形式のアニメーション画像に変換します。

package main

import (
	"context"
	"encoding/base64"
	"flag"
	"fmt"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string // コマンドラインから取得したリージョン情報を格納する変数を指定します
	bucketName string // コマンドラインから取得したバケット名を格納する変数を指定します
	objectName string // コマンドラインから取得したオブジェクト名を格納する変数を指定します
)

// init 関数は main 関数の前に実行され、プログラムを初期化します
func init() {
	// コマンドラインパラメーターを使用してリージョンを指定します
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	// コマンドラインパラメーターを使用してバケット名を指定します
	flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
	// コマンドラインパラメーターを使用して、処理するビデオの名前を指定します
	flag.StringVar(&objectName, "object", "", "オブジェクトの名前。")
}

func main() {
	flag.Parse() // コマンドラインパラメーターを解析します

	// リージョンが指定されているかどうかを確認します。 リージョンが指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、リージョンが必要です")
	}
	// バケット名が指定されているかどうかを確認します。 バケット名が指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、バケット名が必要です")
	}
	// オブジェクト名が指定されているかどうかを確認します。 オブジェクト名が指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、オブジェクト名が必要です")
	}

	// 構成オブジェクトを作成し、環境変数を認証情報プロバイダーおよび指定されたリージョンとして使用します
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // 構成を使用して新しい OSS クライアントを作成します

	// 出力 GIF アニメーション画像ファイルの名前を指定します
	targetKey := "destexample.gif"

	// ビデオを GIF アニメーション画像に変換するためのパラメーターを定義します。GIF の幅、高さ、フレーム間隔が含まれます
	animationStyle := "video/animation,f_gif,w_100,h_100,inter_1000"

	// 処理命令を作成します。これには、ストレージパス、Base64 エンコードされたバケット名、およびキャプチャされたフレーム名が含まれます
	bucketNameEncoded := base64.URLEncoding.EncodeToString([]byte(bucketName))
	targetKeyEncoded := base64.URLEncoding.EncodeToString([]byte(targetKey))
	process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify,topic_QXVkaW9Db252ZXJ0", animationStyle, bucketNameEncoded, targetKeyEncoded)


	// AsyncProcessObject リクエストを作成して、特定のオブジェクトの非同期処理を開始します
	request := &oss.AsyncProcessObjectRequest{
		Bucket:       oss.Ptr(bucketName), // 操作対象のバケット名を指定します
		Key:          oss.Ptr(objectName), // 処理対象のビデオの名前を指定します
		AsyncProcess: oss.Ptr(process),    // 非同期処理命令を指定します
	}

	// リクエストを実行してオブジェクトを非同期に処理し、戻り結果を受信します
	result, err := client.AsyncProcessObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("オブジェクトの非同期処理に失敗しました %v", err)
	}

	log.Printf("非同期処理オブジェクトの結果:%#v\n", result)
}

ビデオスプライトキャプチャ

特定のルールに基づいてビデオスプライトキャプチャ機能を使用して、ビデオフレームをキャプチャし、それらをスプライトにステッチします。

package main

import (
	"context"
	"encoding/base64"
	"flag"
	"fmt"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string // コマンドラインから取得したリージョン情報を格納する変数を指定します
	bucketName string // コマンドラインから取得したバケット名を格納する変数を指定します
	objectName string // コマンドラインから取得したオブジェクト名を格納する変数を指定します
)

// init 関数は main 関数の前に実行され、プログラムを初期化します
func init() {
	// コマンドラインパラメーターを使用してリージョンを指定します
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	// コマンドラインパラメーターを使用してバケット名を指定します
	flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
	// コマンドラインパラメーターを使用して、処理するビデオの名前を指定します
	flag.StringVar(&objectName, "object", "", "オブジェクトの名前。")
}

func main() {
	flag.Parse() // コマンドラインパラメーターを解析します

	// リージョンが指定されているかどうかを確認します。 リージョンが指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、リージョンが必要です")
	}
	// バケット名が指定されているかどうかを確認します。 バケット名が指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、バケット名が必要です")
	}
	// オブジェクト名が指定されているかどうかを確認します。 オブジェクト名が指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、オブジェクト名が必要です")
	}

	// 構成オブジェクトを作成し、環境変数を認証情報プロバイダーおよび指定されたリージョンとして使用します
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // 構成を使用して新しい OSS クライアントを作成します

	// 出力スプライトファイルの名前を指定します
	targetKey := "example.jpg"

	// ビデオスプライトキャプチャのパラメーターを構築します
	animationStyle := "video/sprite,f_jpg,sw_100,sh_100,inter_10000,tw_10,th_10,pad_0,margin_0"

	// 処理命令を作成します。これには、ストレージパス、Base64 エンコードされたバケット名、およびキャプチャされたフレーム名が含まれます
	bucketNameEncoded := base64.URLEncoding.EncodeToString([]byte(bucketName))
	targetKeyEncoded := base64.URLEncoding.EncodeToString([]byte(targetKey))
	process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify,topic_QXVkaW9Db252ZXJ0", animationStyle, bucketNameEncoded, targetKeyEncoded)

	// AsyncProcessObject リクエストを作成して、特定のオブジェクトの非同期処理を開始します
	request := &oss.AsyncProcessObjectRequest{
		Bucket:       oss.Ptr(bucketName), // 操作対象のバケット名を指定します
		Key:          oss.Ptr(objectName), // 処理対象のオブジェクトの名前を指定します
		AsyncProcess: oss.Ptr(process),    // 非同期処理命令を指定します
	}

	// リクエストを実行してオブジェクトを非同期に処理し、戻り結果を受信します
	result, err := client.AsyncProcessObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("オブジェクトの非同期処理に失敗しました %v", err)
	}

	log.Printf("非同期処理オブジェクトの結果:%#v\n", result)
}

フレームキャプチャ

必要に応じてビデオフレームをキャプチャし、フレームキャプチャを使用して特定の形式に変換します。

package main

import (
	"context"
	"encoding/base64"
	"flag"
	"fmt"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string // コマンドラインから取得したリージョン情報を格納する変数を指定します
	bucketName string // コマンドラインから取得したバケット名を格納する変数を指定します
	objectName string // コマンドラインから取得したオブジェクト名を格納する変数を指定します
)

// init 関数は main 関数の前に実行され、プログラムを初期化します
func init() {
	// コマンドラインパラメーターを使用してリージョンを指定します
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	// コマンドラインパラメーターを使用してバケット名を指定します
	flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
	// コマンドラインパラメーターを使用して、処理するビデオの名前を指定します
	flag.StringVar(&objectName, "object", "", "オブジェクトの名前。")
}

func main() {
	flag.Parse() // コマンドラインパラメーターを解析します

	// リージョンが指定されているかどうかを確認します。 リージョンが指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、リージョンが必要です")
	}
	// バケット名が指定されているかどうかを確認します。 バケット名が指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、バケット名が必要です")
	}
	// オブジェクト名が指定されているかどうかを確認します。 オブジェクト名が指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、オブジェクト名が必要です")
	}

	// 構成オブジェクトを作成し、環境変数を認証情報プロバイダーおよび指定されたリージョンとして使用します
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // 構成を使用して新しい OSS クライアントを作成します

	// フレームキャプチャ後の出力ファイルの名前を指定します
	targetKey := "dest.png"

	// フレームキャプチャのパラメーターを構築します
	animationStyle := "video/snapshots,f_jpg,w_100,h_100,scaletype_crop,inter_10000"


	// 処理命令を作成します。これには、ストレージパス、Base64 エンコードされたバケット名、およびキャプチャされたフレーム名が含まれます
	bucketNameEncoded := base64.URLEncoding.EncodeToString([]byte(bucketName))
	targetKeyEncoded := base64.URLEncoding.EncodeToString([]byte(targetKey))
	process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify,topic_QXVkaW9Db252ZXJ0", animationStyle, bucketNameEncoded, targetKeyEncoded)

	// AsyncProcessObject リクエストを作成して、特定のオブジェクトの非同期処理を開始します
	request := &oss.AsyncProcessObjectRequest{
		Bucket:       oss.Ptr(bucketName), // 操作対象のバケット名を指定します
		Key:          oss.Ptr(objectName), // 処理対象のオブジェクトの名前を指定します
		AsyncProcess: oss.Ptr(process),    // 非同期処理命令を指定します
	}

	// リクエストを実行してオブジェクトを非同期に処理し、戻り結果を受信します
	result, err := client.AsyncProcessObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("オブジェクトの非同期処理に失敗しました %v", err)
	}

	log.Printf("非同期処理オブジェクトの結果:%#v\n", result)
}

ビデオマージ

ビデオマージ機能を使用して、複数のビデオを指定された形式の単一のビデオファイルにマージします。

package main

import (
	"context"
	"encoding/base64"
	"flag"
	"fmt"
	"log"
	"strings"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string // コマンドラインから取得したリージョン情報を格納する変数を指定します
	bucketName string // コマンドラインから取得したバケット名を格納する変数を指定します
)

// init 関数は main 関数の前に実行され、プログラムを初期化します
func init() {
	// コマンドラインパラメーターを使用してリージョンを指定します
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	// コマンドラインパラメーターを使用してバケット名を指定します
	flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}

func main() {
	flag.Parse() // コマンドラインパラメーターを解析します

	// リージョンが指定されているかどうかを確認します。 リージョンが指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、リージョンが必要です")
	}
	// バケット名が指定されているかどうかを確認します。 バケット名が指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、バケット名が必要です")
	}

	// 構成オブジェクトを作成し、環境変数を認証情報プロバイダーおよび指定されたリージョンとして使用します
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // 構成を使用して新しい OSS クライアントを作成します

	// 出力ビデオファイルの名前を指定します
	targetObject := "dest.mp4"
	// マージするビデオファイルの名前を指定します
	video1 := "concat1.mp4"
	video2 := "concat2.mp4"

	// 文字列型の style 変数を作成して、ビデオマージパラメーターを格納します
	style := fmt.Sprintf("video/concat,ss_0,f_mp4,vcodec_h264,fps_25,vb_1000000,acodec_aac,ab_96000,ar_48000,ac_2,align_1/pre,o_%s/sur,o_%s,t_0", strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(video1)), "="), strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(video2)), "="))
	// 非同期処理命令を作成します
	process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify,topic_QXVkaW9Db252ZXJ0", style, strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(bucketName)), "="), strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(targetObject)), "="))

	// AsyncProcessObject リクエストを作成して、特定のオブジェクトの非同期処理を開始します
	request := &oss.AsyncProcessObjectRequest{
		Bucket:       oss.Ptr(bucketName), // 操作対象のバケット名を指定します
		AsyncProcess: oss.Ptr(process),    // 非同期処理命令を指定します
	}

	// リクエストを実行してオブジェクトを非同期に処理し、戻り結果を受信します
	result, err := client.AsyncProcessObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("オブジェクトの非同期処理に失敗しました %v", err)
	}

	log.Printf("非同期処理オブジェクトの結果:%#v\n", result)
}

オーディオトランスコーディング

オーディオトランスコーディングを使用して、オーディオファイルをある形式から別の形式に変換します。

package main

import (
	"context"
	"encoding/base64"
	"flag"
	"fmt"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string // コマンドラインから取得したリージョン情報を格納する変数を指定します
	bucketName string // コマンドラインから取得したバケット名を格納する変数を指定します
	objectName string // コマンドラインから取得したオブジェクト名を格納する変数を指定します
)

// init 関数は main 関数の前に実行され、プログラムを初期化します
func init() {
	// コマンドラインパラメーターを使用してリージョンを指定します
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	// コマンドラインパラメーターを使用してバケット名を指定します
	flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
	// コマンドラインパラメーターを使用して処理するオーディオの名前を指定します
	flag.StringVar(&objectName, "object", "", "オブジェクトの名前。")
}

func main() {
	flag.Parse() // コマンドラインパラメーターを解析します

	// リージョンが指定されているかどうかを確認します。 リージョンが指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、リージョンが必要です")
	}
	// バケット名が指定されているかどうかを確認します。 バケット名が指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、バケット名が必要です")
	}
	// オブジェクト名が指定されているかどうかを確認します。 オブジェクト名が指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、オブジェクト名が必要です")
	}


	// 構成オブジェクトを作成し、環境変数を認証情報プロバイダーおよび指定されたリージョンとして使用します
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // 構成を使用して新しい OSS クライアントを作成します

	// 出力オーディオの名前を指定します
	targetKey := "dest.aac"

	// 文字列型の style 変数を作成して、オーディオトランスコーディングパラメーターを格納します
	animationStyle := "audio/convert,ss_10000,t_60000,f_aac,ab_96000"

	// 処理命令を作成します。これには、ストレージパス、Base64 エンコードされたバケット名、およびキャプチャされたフレーム名が含まれます
	bucketNameEncoded := base64.URLEncoding.EncodeToString([]byte(bucketName))
	targetKeyEncoded := base64.URLEncoding.EncodeToString([]byte(targetKey))
	process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify,topic_QXVkaW9Db252ZXJ0", animationStyle, bucketNameEncoded, targetKeyEncoded)

	// AsyncProcessObject リクエストを作成して、特定のオブジェクトの非同期処理を開始します
	request := &oss.AsyncProcessObjectRequest{
		Bucket:       oss.Ptr(bucketName), // 操作対象のバケット名を指定します
		Key:          oss.Ptr(objectName), // 処理対象のオーディオの名前を指定します
		AsyncProcess: oss.Ptr(process),    // 非同期処理命令を指定します
	}

	// リクエストを実行してオブジェクトを非同期に処理し、戻り結果を受信します
	result, err := client.AsyncProcessObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("オブジェクトの非同期処理に失敗しました %v", err)
	}

	log.Printf("非同期処理オブジェクトの結果:%#v\n", result)
}

オーディオマージ

オーディオマージを使用して、複数のオーディオオブジェクトを指定された形式の単一のオーディオオブジェクトにマージします。

package main

import (
	"context"
	"encoding/base64"
	"flag"
	"fmt"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string // コマンドラインから取得したリージョン情報を格納する変数を指定します
	bucketName string // コマンドラインから取得したバケット名を格納する変数を指定します
)

// init 関数は main 関数の前に実行され、プログラムを初期化します
func init() {
	// コマンドラインパラメーターを使用してリージョンを指定します
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	// コマンドラインパラメーターを使用してバケット名を指定します
	flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}

func main() {
	flag.Parse() // コマンドラインパラメーターを解析します

	// リージョンが指定されているかどうかを確認します。 リージョンが指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、リージョンが必要です")
	}
	// バケット名が指定されているかどうかを確認します。 バケット名が指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、バケット名が必要です")
	}

	// 構成オブジェクトを作成し、環境変数を認証情報プロバイダーおよび指定されたリージョンとして使用します
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // 構成を使用して新しい OSS クライアントを作成します

	// マージするオーディオオブジェクトを指定します
	audio1 := "src1.mp3"
	audio2 := "src2.mp3"
	// 出力オーディオの名前を指定します
	targetAudio := "dest.aac"

	// 文字列型の style 変数を作成して、オーディオマージパラメーターを格納します
	audio1Encoded := base64.URLEncoding.EncodeToString([]byte(audio1))
	audio2Encoded := base64.URLEncoding.EncodeToString([]byte(audio2))
	style := fmt.Sprintf("audio/concat,f_aac,ac_1,ar_44100,ab_96000,align_2/pre,o_%s/pre,o_%s,t_0", audio1Encoded, audio2Encoded)

	// 非同期処理命令を作成します
	bucketEncoded := base64.URLEncoding.EncodeToString([]byte(bucketName))
	targetEncoded := base64.URLEncoding.EncodeToString([]byte(targetAudio))
	process := fmt.Sprintf("%s|sys/saveas,b_%s,o_%s/notify,topic_QXVkaW9Db252ZXJ0", style, bucketEncoded, targetEncoded)

	// AsyncProcessObject リクエストを作成して、特定のオブジェクトの非同期処理を開始します
	request := &oss.AsyncProcessObjectRequest{
		Bucket:       oss.Ptr(bucketName), // 操作対象のバケット名を指定します
		AsyncProcess: oss.Ptr(process),    // 非同期処理命令を指定します
	}

	// リクエストを実行してオブジェクトを非同期に処理し、戻り結果を受信します
	result, err := client.AsyncProcessObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("オブジェクトの非同期処理に失敗しました %v", err)
	}

	log.Printf("非同期処理オブジェクトの結果:%#v\n", result)
}

画像のブラインド透かしを解析する

以下のコードは、画像のブラインド透かしを解析する方法を示しています。

package main

import (
	"context"
	"encoding/base64"
	"flag"
	"fmt"
	"log"
	"strings"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string // リージョンを格納する変数を指定します
	bucketName string // バケット名を格納する変数を指定します
	objectName string // 処理対象の画像名を格納する変数を指定します
)

// init 関数は main 関数の前に実行され、プログラムを初期化します
func init() {
	// コマンドラインパラメーターを使用してリージョンを指定します
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	// コマンドラインパラメーターを使用してバケット名を指定します
	flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
	// コマンドラインパラメーターを使用して、処理する画像の名前を指定します
	flag.StringVar(&objectName, "object", "", "オブジェクトの名前。")
}

func main() {
	flag.Parse() // コマンドラインパラメーターを解析します

	// リージョンが指定されているかどうかを確認します。 リージョンが指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、リージョンが必要です")
	}
	// バケット名が指定されているかどうかを確認します。 バケット名が指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、バケット名が必要です")
	}
	// オブジェクト名が指定されているかどうかを確認します。 オブジェクト名が指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーター、オブジェクト名が必要です")
	}

	// 構成オブジェクトを作成し、環境変数を認証情報プロバイダーおよび指定されたリージョンとして使用します
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // 構成を使用して新しい OSS クライアントを作成します

	// 透かし画像ファイルの名前を指定します
	sourceKey := objectName // 処理する画像オブジェクトの名前を指定します

	// MNS メッセージのトピックを指定します
	topic := "imm-blindwatermark-test"

	// 指定された画像から透かしコンテンツを抽出します
	style := "image/deblindwatermark,s_low,t_text"
	encodedTopic := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(topic)), "=")
	process := fmt.Sprintf("%s|sys/notify,topic_%s", style, encodedTopic)
	// AsyncProcessObject リクエストを作成して、特定のオブジェクトの非同期処理を開始します
	request := &oss.AsyncProcessObjectRequest{
		Bucket:       oss.Ptr(bucketName), // 操作対象のバケット名を指定します
		Key:          oss.Ptr(sourceKey),  // 処理する画像の名前を指定します
		AsyncProcess: oss.Ptr(process),    // 非同期処理命令を指定します
	}

	// リクエストを実行してオブジェクトを非同期に処理し、戻り結果を受信します
	result, err := client.AsyncProcessObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("オブジェクトの非同期処理に失敗しました %v", err)
	}

	log.Printf("非同期処理オブジェクトの結果:%#v\n", result)
}

関連情報

  • 非同期処理機能の詳細については、「非同期処理」をご参照ください。

  • 非同期処理機能の API インターフェースの詳細については、「AsyncProcessObject」をご参照ください。