All Products
Search
Document Center

Object Storage Service:Konversi video ke gambar animasi

Last Updated:May 07, 2026

Anda dapat menggunakan fitur konversi video ke gambar animasi untuk mengonversi video menjadi gambar animasi dalam format seperti GIF dan WebP.

Kasus penggunaan

  • Klip media sosial: Ekstrak momen singkat dari video dan bagikan sebagai gambar animasi di platform media sosial.

  • Tutorial dan demo: Tangkap operasi perangkat lunak langkah demi langkah sebagai gambar animasi berulang yang dapat diikuti pembaca tanpa memutar video.

  • Stiker dan reaksi: Ubah momen video menjadi stiker animasi untuk aplikasi pesan.

  • Sorotan acara: Potong momen penting dari siaran langsung, kompetisi, atau presentasi dan bagikan secara instan.

Cara menggunakan

Prasyarat

Mengonversi video menjadi gambar animasi

Anda hanya dapat mengonversi video menjadi gambar animasi dengan menggunakan pemrosesan asinkron melalui OSS SDK untuk Java, Python, atau Go.

Java

Diperlukan OSS SDK for Java versi 3.17.4 atau lebih baru.

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 {
        // Titik akhir wilayah tempat bucket berada.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Wilayah yang sesuai dengan titik akhir, misalnya cn-hangzhou.
        String region = "cn-hangzhou";
        // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Nama bucket.
        String bucketName = "examplebucket";
        // Nama file GIF animasi tujuan.
        String targetKey = "dest.gif";
        // Nama file video sumber.
        String sourceKey = "src.mp4";

        // Buat instance OSSClient.
        // Setelah instance OSSClient tidak lagi diperlukan, panggil metode shutdown untuk melepaskan sumber dayanya.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // Bangun string style yang berisi parameter untuk konversi video ke gambar animasi.
            String style = String.format("video/animation,f_gif,w_100,h_100,inter_1000");
            // Bangun instruksi pemrosesan asinkron.
            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);
            // Buat objek AsyncProcessObjectRequest.
            AsyncProcessObjectRequest request = new AsyncProcessObjectRequest(bucketName, sourceKey, process);
            // Jalankan tugas pemrosesan asinkron.
            AsyncProcessObjectResult response = ossClient.asyncProcessObject(request);
            System.out.println("EventId: " + response.getEventId());
            System.out.println("RequestId: " + response.getRequestId());
            System.out.println("TaskId: " + response.getTaskId());

        } finally {
            // Matikan instance OSSClient.
            ossClient.shutdown();
        }
    }
}

Python

Diperlukan OSS SDK for Python versi 2.18.4 atau lebih baru.

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

def main():
    # Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    # Titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
    endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
    # ID wilayah, misalnya cn-hangzhou.
    region = 'cn-hangzhou'

    # Nama bucket, misalnya examplebucket.
    bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)

    # Nama file video sumber.
    source_key = 'src.mp4'

    # Nama file GIF animasi tujuan.
    target_key = 'example.gif'

    # Definisikan parameter untuk mengonversi video ke GIF animasi, seperti lebar, tinggi, dan interval frame.
    animation_style = 'video/animation,f_gif,w_100,h_100,inter_1000'

    # Bangun instruksi pemrosesan, termasuk jalur penyimpanan dan nama bucket serta objek tujuan yang diencode 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:
        # Jalankan tugas pemrosesan asinkron.
        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

Diperlukan OSS SDK for Go versi 3.0.2 atau lebih baru.

package main

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

func main() {
    // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
    }
    // Buat instance OSSClient.
    // Tentukan titik akhir bucket. Misalnya, untuk bucket di wilayah Tiongkok (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, tentukan titik akhir aktualnya.
    // Tentukan ID wilayah, misalnya 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)
    }
    // Nama bucket, misalnya examplebucket.
    bucketName := "examplebucket"

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

    // Nama file video sumber.
    sourceKey := "src.mp4"
    // Nama file GIF animasi tujuan.
    targetKey := "destexample.gif"

    // Definisikan parameter untuk mengonversi video ke GIF animasi, seperti lebar, tinggi, dan interval frame.
    animationStyle := "video/animation,f_gif,w_100,h_100,inter_1000"

    // Bangun instruksi pemrosesan, termasuk jalur penyimpanan dan nama bucket serta objek tujuan yang diencode 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)

    // Jalankan tugas pemrosesan asinkron.
    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)
}

Parameter

Aksi: video/animation

Tabel berikut menjelaskan parameter-parameter tersebut.

Parameter

Jenis

Wajib

Deskripsi

ss

int

Tidak

Waktu mulai konversi video ke gambar animasi, dalam milidetik. Nilai yang valid:

  • 0 (default): Konversi dimulai dari awal video.

  • Nilai lebih besar dari 0: Konversi dimulai pada ss milidetik.

f

string

Ya

Format output gambar animasi. Nilai yang valid:

  • gif

  • webp

num

int

Tidak

Jumlah frame yang diekstrak untuk gambar animasi. Secara default, frame diekstrak hingga akhir video.

Penting

Jika durasi video tidak cukup panjang untuk mengekstrak jumlah frame yang ditentukan, jumlah frame yang diekstrak sebenarnya akan kurang dari nilai yang ditentukan.

inter

int

Tidak

Interval ekstraksi frame untuk gambar animasi, dalam milidetik. Secara default, semua frame video diekstrak.

Catatan

Jika nilai parameter ini lebih kecil daripada interval frame video sumber (kebalikan dari laju frame), frame diekstrak sesuai interval frame video sumber.

fps

float

Tidak

Laju frame gambar animasi. Nilai default adalah kebalikan dari inter. Nilai yang valid: [0, 240].

Catatan

Parameter ini mengontrol kecepatan pemutaran gambar animasi. Nilai default sesuai dengan kecepatan video sumber. Nilai yang lebih tinggi mempercepat pemutaran, sedangkan nilai yang lebih rendah memperlambatnya.

w

int

Tidak

Lebar gambar animasi output, dalam piksel. Nilai yang valid: [32, 4096]. Secara default, lebar sama dengan lebar video sumber.

h

int

Tidak

Tinggi gambar animasi output, dalam piksel. Nilai yang valid: [32, 4096]. Secara default, tinggi sama dengan tinggi video sumber.

scaletype

string

Tidak

Mode pengubahan ukuran. Nilai yang valid:

  • crop: Mengubah ukuran dan memotong gambar.

  • stretch (default): Meregangkan gambar agar mengisi dimensi target.

  • fill: Mengubah ukuran gambar dan menambahkan batas hitam jika rasio aspek tidak sesuai.

  • fit: Mengubah ukuran gambar secara proporsional tanpa menambahkan batas hitam.

Catatan

Proses konversi video ke gambar animasi menggunakan parameter sys/saveas dan notify. Untuk informasi selengkapnya, lihat Save as dan Message notification.

Contoh permintaan

Ekstrak satu frame per detik

File video sumber: example.mkv

Parameter pemrosesan:

  • Format output: gif (f_gif)

  • Resolusi gambar output: 100 px × 100 px (w_100,h_100)

  • Interval ekstraksi frame: 1 detik (inter_1000)

Jalur penyimpanan: oss://outbucket/outobjprefix.{autoext}

  • Bucket: outbucket (diencode Base64: b_b3V0YnVja2V0)

  • Objek: outobjprefix.{autoext} (diencode Base64: o_b3V0b2JqcHJlZml4LnthdXRvZXh0fQ)

Parameter notifikasi:

  • Metode notifikasi: Kirim pesan MNS

  • Topik notifikasi: AudioConvert (diencode Base64: topic_QXVkaW9Db252ZXJ0)

Contoh permintaan

// Konversi file example.mkv menjadi gambar animasi.
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

Ekstrak frame dari waktu mulai tertentu

File video sumber: example.mkv

Parameter pemrosesan:

  • Format output: webp (f_webp)

  • Resolusi gambar output: 25% dari lebar dan tinggi video sumber (pw_25, ph_25)

  • Interval ekstraksi frame: 0,5 detik (inter_500)

Jalur penyimpanan: oss://outbucket/outobjprefix.{autoext}

  • Bucket: outbucket (diencode Base64: b_b3V0YnVja2V0)

  • Objek: outobjprefix.{autoext} (diencode Base64: o_b3V0b2JqcHJlZml4LnthdXRvZXh0fQ)

Parameter notifikasi:

  • Metode notifikasi: Kirim pesan MNS

  • Topik notifikasi: AudioConvert (diencode Base64: topic_QXVkaW9Db252ZXJ0)

Contoh permintaan

// Konversi file example.mkv menjadi gambar animasi.
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

Penagihan

Konversi video ke gambar animasi dikenai biaya dari OSS dan IMM. Item yang dapat ditagih meliputi:

  • OSS: Untuk informasi harga selengkapnya, lihat Harga OSS.

    API

    Item yang dapat ditagih

    Deskripsi

    GetObject

    Permintaan GET

    Biaya permintaan dihitung berdasarkan jumlah permintaan yang berhasil.

    Trafik outbound melalui internet

    Jika Anda memanggil operasi GetObject menggunakan titik akhir publik (misalnya, oss-cn-hangzhou.aliyuncs.com) atau titik akhir akselerasi transfer (misalnya, oss-accelerate.aliyuncs.com), Anda akan dikenai biaya trafik outbound melalui internet berdasarkan volume data.

    Pengambilan data dari penyimpanan Akses Jarang (IA)

    Jika Anda mengambil objek Akses Jarang (IA), Anda akan dikenai biaya pengambilan data berdasarkan jumlah data yang diambil.

    Pengambilan data untuk pembacaan arsip langsung

    Jika Anda membaca objek Archive dari bucket yang diaktifkan fitur pembacaan arsip langsung, Anda akan dikenai biaya pengambilan data berdasarkan jumlah data yang diambil.

    Akselerasi transfer

    Jika Anda mengaktifkan akselerasi transfer dan menggunakan titik akhir akselerasi transfer untuk mengakses bucket Anda, Anda akan dikenai biaya akselerasi transfer berdasarkan volume data.

    PutObject

    Permintaan PUT

    Biaya permintaan dihitung berdasarkan jumlah permintaan yang berhasil.

    Biaya penyimpanan

    Anda dikenai biaya penyimpanan berdasarkan kelas penyimpanan, ukuran, dan durasi penyimpanan objek.

    HeadObject

    Permintaan GET

    Biaya permintaan dihitung berdasarkan jumlah permintaan yang berhasil.

  • IMM: Untuk informasi harga selengkapnya, lihat item penagihan IMM.

    Penting

    Mulai pukul 11.00 (UTC+8) pada 28 Juli 2025, fitur konversi video ke gambar animasi IMM akan ditingkatkan dari layanan gratis menjadi layanan berbayar. Item yang dapat ditagih adalah MediaAnimation. Untuk informasi selengkapnya, lihat pengumuman penyesuaian penagihan IMM.

    API

    Item yang dapat ditagih

    Deskripsi

    CreateMediaConvertTask

    MediaAnimation

    Biaya untuk konversi video ke gambar animasi dihitung berdasarkan jumlah frame dalam gambar animasi output.

Catatan penggunaan

  • Konversi video ke gambar animasi hanya mendukung pemrosesan asinkron (dengan menggunakan metode x-oss-async-process).

  • Akses anonim akan ditolak.