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

Object Storage Service:非同期処理

最終更新日:Apr 03, 2026

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

制限事項

  • このトピックのサンプルコードでは、デフォルトで中国 (杭州) リージョン (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"
	"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", "", "The region in which the bucket is located.")
	// バケット名のコマンドラインフラグを設定します。
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
	// 変換するドキュメント名のコマンドラインフラグを設定します。
	flag.StringVar(&objectName, "object", "", "The name of the object.")
}

func main() {
	flag.Parse() // コマンドラインフラグを解析します。

	// リージョンが指定されていることを確認します。指定されていない場合は、デフォルトのフラグを出力して終了します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}
	// バケット名が指定されていることを確認します。指定されていない場合は、デフォルトのフラグを出力して終了します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}
	// オブジェクト名が指定されていることを確認します。指定されていない場合は、デフォルトのフラグを出力して終了します。
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, object name required")
	}

	// 認証情報に環境変数を使用し、指定されたリージョンを設定する構成オブジェクトを作成します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

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

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

	// ドキュメントの処理と変換のためのスタイル文字列を構築します。
	animationStyle := "doc/convert,target_png,source_docx" // ソースの .docx ドキュメントを .png 画像に変換するルールを定義します。

	// 保存パスと Base64 エンコードされたバケット名およびターゲットオブジェクト名を含む処理命令を構築します。
	bucketNameEncoded := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(bucketName)), "=")
	targetKeyEncoded := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(targetKey)), "=")
	process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify", animationStyle, bucketNameEncoded, targetKeyEncoded)

	// 非同期処理タスクを開始するための AsyncProcessObjectRequest を構築します。
	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("failed to asynchronously process object %v", err)
	}

	log.Printf("async process object result:%#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", "", "The region in which the bucket is located.")
	// コマンドラインパラメーターを使用してバケット名を指定します
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
	// コマンドラインパラメーターを使用してトランスコードする動画の名前を指定します
	flag.StringVar(&objectName, "object", "", "The name of the object.")
}

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

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

	// 設定オブジェクトを作成し、認証情報プロバイダーとして環境変数を使用し、指定されたリージョンを設定します
	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("failed to async process object %v", err)
	}

	log.Printf("async process object result:%#v\n", result)
}

動画からアニメーション画像への変換

動画からアニメーション画像への変換を使用して、動画を GIF または WebP 形式のアニメーション画像に変換します。

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", "", "The region in which the bucket is located.")
	// バケット名のコマンドラインフラグを設定します。
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
	// 処理する動画の名前のコマンドラインフラグを設定します。
	flag.StringVar(&objectName, "object", "", "The name of the object.")
}

func main() {
	flag.Parse() // コマンドラインフラグを解析します。

	// リージョンが指定されていることを確認します。指定されていない場合は、デフォルトのフラグを出力して終了します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}
	// バケット名が指定されていることを確認します。指定されていない場合は、デフォルトのフラグを出力して終了します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}
	// オブジェクト名が指定されていることを確認します。指定されていない場合は、デフォルトのフラグを出力して終了します。
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, object name required")
	}

	// 認証情報に環境変数を使用し、指定されたリージョンを設定する構成オブジェクトを作成します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

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

	// 出力 GIF ファイルの名前を指定します。
	targetKey := "destexample.gif"

	// 幅、高さ、フレーム間隔など、動画から GIF への変換パラメーターを定義します。
	animationStyle := "video/animation,f_gif,w_100,h_100,inter_1000"

	// 保存パスと Base64 エンコードされたバケット名およびターゲットオブジェクト名を含む処理命令を構築します。
	bucketNameEncoded := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(bucketName)), "=")
	targetKeyEncoded := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(targetKey)), "=")
	process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify,topic_QXVkaW9Db252ZXJ0", animationStyle, bucketNameEncoded, targetKeyEncoded)

	// 非同期処理タスクを開始するための AsyncProcessObjectRequest を構築します。
	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("failed to asynchronously process object %v", err)
	}

	log.Printf("async process object result:%#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", "", "The region in which the bucket is located.")
	// バケット名のコマンドラインフラグを設定します。
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
	// 処理する動画の名前のコマンドラインフラグを設定します。
	flag.StringVar(&objectName, "object", "", "The name of the object.")
}

func main() {
	flag.Parse() // コマンドラインフラグを解析します。

	// リージョンが指定されていることを確認します。指定されていない場合は、デフォルトのフラグを出力して終了します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}
	// バケット名が指定されていることを確認します。指定されていない場合は、デフォルトのフラグを出力して終了します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}
	// オブジェクト名が指定されていることを確認します。指定されていない場合は、デフォルトのフラグを出力して終了します。
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, object name required")
	}

	// 認証情報に環境変数を使用し、指定されたリージョンを設定する構成オブジェクトを作成します。
	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 := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(bucketName)), "=")
	targetKeyEncoded := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(targetKey)), "=")
	process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify,topic_QXVkaW9Db252ZXJ0", animationStyle, bucketNameEncoded, targetKeyEncoded)

	// 非同期処理タスクを開始するための AsyncProcessObjectRequest を構築します。
	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("failed to asynchronously process object %v", err)
	}

	log.Printf("async process object result:%#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", "", "The region in which the bucket is located.")
	// バケット名のコマンドラインフラグを設定します。
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
	// 処理する動画の名前のコマンドラインフラグを設定します。
	flag.StringVar(&objectName, "object", "", "The name of the object.")
}

func main() {
	flag.Parse() // コマンドラインフラグを解析します。

	// リージョンが指定されていることを確認します。指定されていない場合は、デフォルトのフラグを出力して終了します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}
	// バケット名が指定されていることを確認します。指定されていない場合は、デフォルトのフラグを出力して終了します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}
	// オブジェクト名が指定されていることを確認します。指定されていない場合は、デフォルトのフラグを出力して終了します。
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, object name required")
	}

	// 認証情報に環境変数を使用し、指定されたリージョンを設定する構成オブジェクトを作成します。
	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 := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(bucketName)), "=")
	targetKeyEncoded := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(targetKey)), "=")
	process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify,topic_QXVkaW9Db252ZXJ0", animationStyle, bucketNameEncoded, targetKeyEncoded)

	// 非同期処理タスクを開始するための AsyncProcessObjectRequest を構築します。
	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("failed to asynchronously process object %v", err)
	}

	log.Printf("async process object result:%#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", "", "The region in which the bucket is located.")
	// コマンドラインパラメーターを使用してバケット名を指定します
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

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

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

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

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

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

	// 文字列型のスタイル変数を作成し、動画マージのパラメーターを格納します
	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("failed to async process object %v", err)
	}

	log.Printf("async process object result:%#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", "", "The region in which the bucket is located.")
	// バケット名のコマンドラインフラグを設定します。
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
	// 処理する音声の名前のコマンドラインフラグを設定します。
	flag.StringVar(&objectName, "object", "", "The name of the object.")
}

func main() {
	flag.Parse() // コマンドラインフラグを解析します。

	// リージョンが指定されていることを確認します。指定されていない場合は、デフォルトのフラグを出力して終了します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}
	// バケット名が指定されていることを確認します。指定されていない場合は、デフォルトのフラグを出力して終了します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}
	// オブジェクト名が指定されていることを確認します。指定されていない場合は、デフォルトのフラグを出力して終了します。
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, object name required")
	}

	// 認証情報に環境変数を使用し、指定されたリージョンを設定する構成オブジェクトを作成します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

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

	// トランスコードされた音声ファイルの名前を指定します。
	targetKey := "dest.aac"

	// 音声トランスコーディングのスタイル文字列とパラメーターを構築します。
	animationStyle := "audio/convert,ss_10000,t_60000,f_aac,ab_96000"

	// 保存パスと Base64 エンコードされたバケット名およびターゲットオブジェクト名を含む処理命令を構築します。
	bucketNameEncoded := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(bucketName)), "=")
	targetKeyEncoded := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(targetKey)), "=")
	process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify,topic_QXVkaW9Db252ZXJ0", animationStyle, bucketNameEncoded, targetKeyEncoded)

	// 非同期処理タスクを開始するための AsyncProcessObjectRequest を構築します。
	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("failed to asynchronously process object %v", err)
	}

	log.Printf("async process object result:%#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", "", "The region in which the bucket is located.")
	// バケット名のコマンドラインフラグを設定します。
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	flag.Parse() // コマンドラインフラグを解析します。

	// リージョンが指定されていることを確認します。指定されていない場合は、デフォルトのフラグを出力して終了します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}
	// バケット名が指定されていることを確認します。指定されていない場合は、デフォルトのフラグを出力して終了します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// 認証情報に環境変数を使用し、指定されたリージョンを設定する構成オブジェクトを作成します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

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

	// マージする音声ファイルを指定します。
	audio1 := "src1.mp3"
	audio2 := "src2.mp3"
	// マージされた音声ファイルの名前を指定します。
	targetAudio := "dest.aac"

	// 音声マージのスタイル文字列とパラメーターを構築します。
	audio1Encoded := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(audio1)), "=")
	audio2Encoded := strings.TrimRight(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 := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(bucketName)), "=")
	targetEncoded := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(targetAudio)), "=")
	process := fmt.Sprintf("%s|sys/saveas,b_%s,o_%s/notify,topic_QXVkaW9Db252ZXJ0", style, bucketEncoded, targetEncoded)

	// 非同期処理タスクを開始するための AsyncProcessObjectRequest を構築します。
	request := &oss.AsyncProcessObjectRequest{
		Bucket:       oss.Ptr(bucketName), // 操作するバケットを指定します。
		AsyncProcess: oss.Ptr(process),    
	}

	// リクエストを実行してオブジェクトを非同期処理し、結果を受け取ります。
	result, err := client.AsyncProcessObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to asynchronously process object %v", err)
	}

	log.Printf("async process object result:%#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", "", "The region in which the bucket is located.")
	// コマンドラインパラメーターを使用してバケット名を指定します
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
	// コマンドラインパラメーターを使用して処理する画像の名前を指定します
	flag.StringVar(&objectName, "object", "", "The name of the object.")
}

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

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

	// 設定オブジェクトを作成し、認証情報プロバイダーとして環境変数を使用し、指定されたリージョンを設定します
	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("failed to async process object %v", err)
	}

	log.Printf("async process object result:%#v\n", result)
}

関連ドキュメント

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

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