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

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

最終更新日:May 07, 2026

動画からアニメーション画像への変換機能を使用して、GIF や WebP などの形式で動画をアニメーション画像に変換できます。

利用シーン

  • ソーシャルメディアクリップ:動画から短い瞬間を抽出し、ソーシャルプラットフォーム上でアニメーション画像として共有します。

  • チュートリアルとデモ:ソフトウェア操作の手順をループ再生可能なアニメーション画像としてキャプチャし、視聴者が動画を再生せずに内容を確認できるようにします。

  • ステッカーとリアクション:動画のシーンをメッセージングアプリ用のアニメーションステッカーに変換します。

  • イベントハイライト:ライブ配信、競技会、プレゼンテーションなどの重要な瞬間をクリップし、即座に共有します。

使用方法

前提条件

動画をアニメーション画像に変換する

動画をアニメーション画像に変換するには、OSS SDK for Java、Python、または Go を使用した非同期処理のみがサポートされています。

Java

OSS SDK for Java 3.17.4 以降が必要です。

import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.AsyncProcessObjectRequest;
import com.aliyun.oss.model.AsyncProcessObjectResult;
import com.aliyuncs.exceptions.ClientException;

import java.util.Base64;

public class Demo {
    public static void main(String[] args) throws ClientException {
        // バケットが配置されているリージョンのエンドポイント。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // エンドポイントに対応するリージョン(例:cn-hangzhou)。
        String region = "cn-hangzhou";
        // 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET の環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケット名。
        String bucketName = "examplebucket";
        // 出力先のアニメーション GIF ファイル名。
        String targetKey = "dest.gif";
        // 入力元の動画ファイル名。
        String sourceKey = "src.mp4";

        // OSSClient インスタンスを作成します。
        // OSSClient インスタンスが不要になったら、shutdown メソッドを呼び出してリソースを解放してください。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // 動画からアニメーション画像への変換パラメーターを含むスタイル文字列を構築します。
            String style = String.format("video/animation,f_gif,w_100,h_100,inter_1000");
            // 非同期処理命令を構築します。
            String bucketEncoded = Base64.getUrlEncoder().withoutPadding().encodeToString(bucketName.getBytes());
            String targetEncoded = Base64.getUrlEncoder().withoutPadding().encodeToString(targetKey.getBytes());
            String process = String.format("%s|sys/saveas,b_%s,o_%s/notify,topic_QXVkaW9Db252ZXJ0", style, bucketEncoded, targetEncoded);
            // AsyncProcessObjectRequest オブジェクトを作成します。
            AsyncProcessObjectRequest request = new AsyncProcessObjectRequest(bucketName, sourceKey, process);
            // 非同期処理タスクを実行します。
            AsyncProcessObjectResult response = ossClient.asyncProcessObject(request);
            System.out.println("EventId: " + response.getEventId());
            System.out.println("RequestId: " + response.getRequestId());
            System.out.println("TaskId: " + response.getTaskId());

        } finally {
            // OSSClient インスタンスをシャットダウンします。
            ossClient.shutdown();
        }
    }
}

Python

OSS SDK for Python 2.18.4 以降が必要です。

# -*- coding: utf-8 -*-
import base64
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

def main():
    # 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET の環境変数が設定されていることを確認してください。
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    # バケットが配置されているリージョンのエンドポイント。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントは https://oss-cn-hangzhou.aliyuncs.com に設定します。
    endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
    # リージョン ID(例:cn-hangzhou)。
    region = 'cn-hangzhou'

    # バケット名(例:examplebucket)。
    bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)

    # 入力元の動画ファイル名。
    source_key = 'src.mp4'

    # 出力先のアニメーション GIF ファイル名。
    target_key = 'example.gif'

    # アニメーション GIF への変換パラメーター(幅、高さ、フレーム間隔など)を定義します。
    animation_style = 'video/animation,f_gif,w_100,h_100,inter_1000'

    # 保存パスおよび Base64 エンコードされたバケット名と出力オブジェクト名を含む処理命令を構築します。
    bucket_name_encoded = base64.urlsafe_b64encode('examplebucket'.encode()).decode().rstrip('=')
    target_key_encoded = base64.urlsafe_b64encode(target_key.encode()).decode().rstrip('=')
    process = f"{animation_style}|sys/saveas,b_{bucket_name_encoded},o_{target_key_encoded}/notify,topic_QXVkaW9Db252ZXJ0"

    try:
        # 非同期処理タスクを実行します。
        result = bucket.async_process_object(source_key, process)
        print(f"EventId: {result.event_id}")
        print(f"RequestId: {result.request_id}")
        print(f"TaskId: {result.task_id}")
    except Exception as e:
        print(f"Error: {e}")


if __name__ == "__main__":
    main()

Go

OSS SDK for Go 3.0.2 以降が必要です。

package main

import (
    "encoding/base64"
    "fmt"
    "os"
    "github.com/aliyun/aliyun-oss-go-sdk/oss"
    "log"
)

func main() {
    // 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET の環境変数が設定されていることを確認してください。
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
    }
    // OSSClient インスタンスを作成します。
    // バケットのエンドポイントを指定します。たとえば、中国 (杭州) リージョンのバケットの場合、エンドポイントは https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンの場合は、実際のエンドポイントを指定してください。
    // リージョン ID(例:cn-hangzhou)を指定します。
    client, err := oss.New("https://oss-cn-hangzhou.aliyuncs.com", "", "", oss.SetCredentialsProvider(&provider), oss.AuthVersion(oss.AuthV4), oss.Region("cn-hangzhou"))
    if err != nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
    }
    // バケット名(例:examplebucket)。
    bucketName := "examplebucket"

    bucket, err := client.Bucket(bucketName)
    if err != nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
    }

    // 入力元の動画ファイル名。
    sourceKey := "src.mp4"
    // 出力先のアニメーション GIF ファイル名。
    targetKey := "destexample.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)

    // 非同期処理タスクを実行します。
    result, err := bucket.AsyncProcessObject(sourceKey, process)
    if err != nil {
    log.Fatalf("Failed to async process object: %s", err)
    }

    fmt.Printf("EventId: %s\n", result.EventId)
    fmt.Printf("RequestId: %s\n", result.RequestId)
    fmt.Printf("TaskId: %s\n", result.TaskId)
}

パラメーター

アクション:video/animation

以下の表はパラメーターについて説明しています。

パラメーター

タイプ

必須

説明

ss

int

いいえ

動画からアニメーション画像への変換開始時刻(ミリ秒単位)。有効な値:

  • 0(デフォルト):動画の先頭から変換を開始します。

  • 0 より大きい値:動画の ss ミリ秒の位置から変換を開始します。

f

string

はい

アニメーション画像の出力フォーマット。有効な値:

  • gif

  • webp

num

int

いいえ

アニメーション画像に抽出するフレーム数。デフォルトでは、動画の終了までフレームを抽出します。

重要

動画が指定されたフレーム数を抽出するのに十分な長さでない場合、実際に抽出されるフレーム数は指定値より少なくなります。

inter

int

いいえ

アニメーション画像のフレーム抽出間隔(ミリ秒単位)。デフォルトでは、動画のすべてのフレームを抽出します。

説明

このパラメーターの値が入力元動画のフレーム間隔(フレームレートの逆数)より小さい場合、入力元動画のフレーム間隔でフレームが抽出されます。

fps

float

いいえ

アニメーション画像のフレームレート。inter の逆数がデフォルト値です。有効な値:[0, 240]。

説明

このパラメーターはアニメーション画像の再生速度を制御します。デフォルト値は入力元動画の速度に一致します。値を大きくすると再生が早くなり、小さくすると遅くなります。

w

int

いいえ

出力アニメーション画像の幅(ピクセル単位)。有効な値:[32, 4096]。デフォルトでは、入力元動画の幅と同じになります。

h

int

いいえ

出力アニメーション画像の高さ(ピクセル単位)。有効な値:[32, 4096]。デフォルトでは、入力元動画の高さと同じになります。

scaletype

string

いいえ

リサイズモード。有効な値:

  • crop:画像をリサイズしてトリミングします。

  • stretch(デフォルト):縦横比を維持せずに画像を引き伸ばしてターゲットディメンションに合わせます。

  • fill:縦横比が一致しない場合、画像をリサイズして黒い罫線を追加します。

  • fit:縦横比を維持しながら画像をリサイズし、罫線は追加しません。

説明

動画からアニメーション画像への変換処理では、sys/saveas パラメーターおよび notify パラメーターが使用されます。詳細については、「保存先の指定」および「メッセージ通知」をご参照ください。

リクエスト例

1 秒ごとに 1 フレームを抽出する

入力元動画ファイル: example.mkv

処理パラメーター:

  • 出力フォーマット:gif(f_gif

  • 出力画像解像度:100 px × 100 px(w_100,h_100

  • フレーム抽出間隔:1 秒(inter_1000

保存パス: oss://outbucket/outobjprefix.{autoext}

  • バケット:outbucket(Base64 エンコード:b_b3V0YnVja2V0

  • オブジェクト:outobjprefix.{autoext}(Base64 エンコード:o_b3V0b2JqcHJlZml4LnthdXRvZXh0fQ

通知パラメーター:

  • 通知方法 MNS メッセージを送信

  • 通知トピック AudioConvert(Base64 エンコード:topic_QXVkaW9Db252ZXJ0

サンプルリクエスト

// example.mkv ファイルをアニメーション画像に変換します。
POST /example.mkv?x-oss-async-process HTTP/1.1
Host: video-demo.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e
 
x-oss-async-process=video/animation,f_gif,w_100,h_100,inter_1000|sys/saveas,b_b3V0YnVja2V0,o_b3V0b2JqcHJlZml4LnthdXRvZXh0fQ/notify,topic_QXVkaW9Db252ZXJ0

特定の開始時刻からフレームを抽出する

入力元動画ファイル: example.mkv

処理パラメーター:

  • 出力フォーマット:webp(f_webp

  • 出力画像解像度:入力元動画の幅および高さの 25%(pw_25, ph_25

  • フレーム抽出間隔:0.5 秒(inter_500

保存パス: oss://outbucket/outobjprefix.{autoext}

  • バケット:outbucket(Base64 エンコード:b_b3V0YnVja2V0

  • オブジェクト:outobjprefix.{autoext}(Base64 エンコード:o_b3V0b2JqcHJlZml4LnthdXRvZXh0fQ

通知パラメーター:

  • 通知方法 MNS メッセージを送信

  • 通知トピック AudioConvert(Base64 エンコード:topic_QXVkaW9Db252ZXJ0

サンプルリクエスト

// example.mkv ファイルをアニメーション画像に変換します。
POST /example.mkv?x-oss-async-process HTTP/1.1
Host: video-demo.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e
 
x-oss-async-process=video/animation,ss_5000,f_webp,pw_25,ph_25,fps_25,inter_500|sys/saveas,b_b3V0YnVja2V0,o_b3V0b2JqcHJlZml4LnthdXRvZXh0fQ/notify,topic_QXVkaW9Db252ZXJ0

課金

動画からアニメーション画像への変換では、OSS および IMM の両方から料金が発生します。課金項目は以下のとおりです。

  • OSS:料金の詳細については、「OSS Pricing」をご参照ください。

    API

    課金項目

    説明

    GetObject

    GET リクエスト

    リクエスト料金は、成功したリクエストの回数に基づいて計算されます。

    インターネット経由のアウトバウンドトラフィック

    パブリックエンドポイント(例:oss-cn-hangzhou.aliyuncs.com)または転送アクセラレーションエンドポイント(例:oss-accelerate.aliyuncs.com)を使用して GetObject 操作を呼び出す場合、データ量に基づいてインターネット経由のアウトバウンドトラフィック料金が発生します。

    低頻度アクセス (IA) ストレージからのデータ取得

    低頻度アクセス (IA) オブジェクトを取得する場合、取得したデータ量に基づいてデータ取得料金が発生します。

    アーカイブ直接読み取りのデータ取得

    アーカイブ直接読み取りが有効化されたバケットからアーカイブオブジェクトを読み取る場合、取得したデータ量に基づいてデータ取得料金が発生します。

    転送アクセラレーション

    転送アクセラレーションを有効化し、転送アクセラレーションエンドポイントを使用してバケットにアクセスする場合、データ量に基づいて転送アクセラレーション料金が発生します。

    PutObject

    PUT リクエスト

    リクエスト料金は、成功したリクエストの回数に基づいて計算されます。

    ストレージ料金

    オブジェクトのストレージクラス、サイズ、保存期間に基づいてストレージ料金が発生します。

    HeadObject

    GET リクエスト

    リクエスト料金は、成功したリクエストの回数に基づいて計算されます。

  • IMM:料金の詳細については、「IMM 課金項目」をご参照ください。

    重要

    2025 年 7 月 28 日 11:00(UTC + 08:00)より、IMM の動画からアニメーション画像への変換機能が無料サービスから有料サービスに変更されます。課金項目は MediaAnimation です。詳細については、「IMM billing adjustment announcement」をご参照ください。

    API

    課金項目

    説明

    CreateMediaConvertTask

    MediaAnimation

    動画からアニメーション画像への変換料金は、出力アニメーション画像のフレーム数に基づいて計算されます。

注意事項

  • 動画からアニメーション画像への変換は、非同期処理(x-oss-async-process メソッドを使用)のみをサポートしています。

  • 匿名アクセスは拒否されます。