All Products
Search
Document Center

Object Storage Service:Video ke Gambar Animasi

Last Updated:Mar 19, 2026

Anda dapat menggunakan fitur 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 instan.

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

Cara Menggunakan

Prasyarat

Video ke Gambar Animasi

Hanya SDK Java, Python, dan Go yang mendukung pemrosesan asinkron untuk konversi video ke gambar animasi.

Java

Anda harus menggunakan SDK Java versi 3.17.4 atau yang 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 {
        // Setel yourEndpoint ke titik akhir Wilayah tempat bucket berada.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Tentukan 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();
        // Tentukan nama bucket.
        String bucketName = "examplebucket";
        // Tentukan nama file gambar animasi GIF hasil pemrosesan.
        String targetKey = "dest.gif";
        // Tentukan nama file video sumber.
        String sourceKey = "src.mp4";

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

        try {
            // Bangun string gaya pemrosesan video dan parameter pemrosesan 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 OSSClient.
            ossClient.shutdown();
        }
    }
}

Python

Anda perlu menggunakan SDK Python versi 2.18.4 atau yang lebih baru.

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

def main():
    # Dapatkan kredensial akses sementara 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())
    # Tentukan titik akhir yang sesuai dengan Wilayah bucket. Misalnya, untuk China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com.
    endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
    # Tentukan ID Wilayah umum Alibaba Cloud, misalnya cn-hangzhou.
    region = 'cn-hangzhou'

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

    # Tentukan nama file video sumber.
    source_key = 'src.mp4'

    # Tentukan nama file gambar animasi GIF hasil pemrosesan.
    target_key = 'example.gif'

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

    # Bangun instruksi pemrosesan, termasuk jalur penyimpanan serta nama bucket dan nama file tujuan yang dikodekan 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

Memerlukan SDK Go versi 3.0.2 atau yang lebih baru.

package main

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

func main() {
    // Dapatkan kredensial akses sementara 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 yang sesuai dengan bucket. Misalnya, untuk China (Hangzhou), atur ke https://oss-cn-hangzhou.aliyuncs.com. Sesuaikan dengan Wilayah lain bila diperlukan.
    // Tentukan ID Wilayah umum Alibaba Cloud, 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)
    }
    // Tentukan nama bucket, misalnya examplebucket.
    bucketName := "examplebucket"

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

    // Tentukan nama file video sumber.
    sourceKey := "src.mp4"
    // Tentukan nama file gambar animasi GIF hasil pemrosesan.
    targetKey := "destexample.gif"

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

    // Bangun instruksi pemrosesan, termasuk jalur penyimpanan serta nama bucket dan nama file tujuan yang dikodekan 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("Gagal memproses objek secara asinkron: %s", err)
    }

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

Deskripsi Parameter

Aksi: video/animation

Tabel berikut menjelaskan parameter-parameter tersebut.

Parameter

Tipe

Wajib

Deskripsi

ss

int

Tidak

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

  • 0 (default): Dimulai dari awal.

  • Lebih besar dari 0: Dimulai dari milidetik ss.

f

string

Ya

Format output gambar animasi. Nilai yang valid:

  • gif

  • webp

num

int

Tidak

Jumlah frame dalam gambar animasi. Secara default, tidak ada batasan (frame diekstraksi hingga akhir video).

Penting

Jika durasi video tidak cukup panjang, jumlah frame yang diekstraksi sebenarnya akan kurang dari nilai parameter yang ditentukan.

inter

int

Tidak

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

Catatan

Jika parameter ini lebih kecil daripada interval frame video sumber (kebalikan dari laju frame), frame diekstraksi berdasarkan 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. Jika menggunakan nilai default, kecepatan pemutaran sesuai dengan video sumber. Nilai yang lebih besar dari default mempercepat pemutaran, sedangkan nilai yang lebih kecil memperlambatnya.

w

int

Tidak

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

h

int

Tidak

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

scaletype

string

Tidak

Metode penskalaan. Nilai yang valid:

  • crop: Diskalakan dan dipotong.

  • stretch (default): Diregangkan hingga memenuhi area.

  • fill: Diskalakan dan mempertahankan batas hitam.

  • fit: Diskalakan secara proporsional tanpa mempertahankan batas hitam.

Catatan

Saat Anda mengonversi video ke gambar animasi, parameter sys/saveas dan notify digunakan. Untuk informasi selengkapnya, lihat Save as dan Message notification.

API Terkait

Ekstrak frame dari video dengan interval 1 detik untuk membuat gambar animasi

File video sumber: example.mkv

Parameter pemrosesan:

  • Format konversi: 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 (dikodekan Base64: b_b3V0YnVja2V0)

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

Parameter notifikasi:

  • Metode notifikasi: Kirim pesan MNS

  • Topik notifikasi: AudioConvert (dikodekan Base64: topic_QXVkaW9Db252ZXJ0)

Contoh

// Konversi video 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 dengan interval 0,5 detik mulai dari detik kelima untuk membuat gambar animasi

File video sumber: example.mkv

Parameter pemrosesan:

  • Format: WebP (f_webp)

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

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

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

  • Bucket: outbucket (dikodekan Base64: b_b3V0YnVja2V0)

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

Parameter notifikasi:

  • Metode notifikasi: Kirim pesan MNS

  • Topik notifikasi: AudioConvert (dikodekan Base64: topic_QXVkaW9Db252ZXJ0)

Contoh Pemrosesan

// Konversi video 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

Selama proses konversi video ke gambar animasi, layanan IMM dipanggil, sehingga menghasilkan item penagihan di sisi OSS dan IMM.

  • Sisi OSS: Untuk detail harga, lihat Harga OSS

    API

    Item penagihan

    Deskripsi

    GetObject

    Permintaan GET

    Anda dikenai biaya permintaan berdasarkan jumlah permintaan yang berhasil.

    Biaya Lalu Lintas Internet Keluar

    Jika Anda memanggil operasi GetObject menggunakan titik akhir publik, seperti oss-cn-hangzhou.aliyuncs.com, atau titik akhir percepatan, seperti oss-accelerate.aliyuncs.com, Anda dikenai biaya lalu lintas outbound Internet berdasarkan ukuran data.

    Kapasitas pengambilan data Akses Jarang

    Jika objek IA diambil, Anda dikenai biaya pengambilan data IA berdasarkan ukuran data IA yang diambil.

    Kapasitas Pengambilan Baca Langsung Arsip

    Jika objek Archive dalam bucket yang diaktifkan akses real-time diambil, Anda dikenai biaya pengambilan data Archive berdasarkan ukuran objek Archive yang diambil.

    Akselerasi transfer

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

    PutObject

    Permintaan PUT

    Anda dikenai biaya permintaan berdasarkan jumlah permintaan yang berhasil.

    Biaya penyimpanan

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

    HeadObject

    Permintaan GET

    Anda dikenai biaya permintaan berdasarkan jumlah permintaan yang berhasil.

  • Sisi IMM: Untuk detail harga, lihat item penagihan IMM

    Penting

    Mulai pukul 11.00 pada 28 Juli 2025 (UTC+8), layanan konversi video ke gambar animasi IMM akan beralih dari model gratis ke model berbayar. Item penagihan spesifiknya adalah MediaAnimation. Untuk informasi selengkapnya, lihat pengumuman penyesuaian penagihan IMM.

    API

    Item penagihan

    Deskripsi

    CreateMediaConvertTask

    MediaAnimation

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

Catatan Penggunaan

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

  • Akses anonim akan ditolak.