全部产品
Search
文档中心

Object Storage Service:Konversi video-ke-citra-animasi

更新时间:Nov 09, 2025

Konversi video-ke-gambar animasi adalah teknik pemrosesan media yang mengubah video menjadi gambar animasi dalam format GIF atau WebP.

Perkenalan Fitur

Fitur konversi video-ke-gambar animasi mengubah file video menjadi format gambar animasi seperti GIF atau WebP untuk memudahkan berbagi dan penyematan di situs web serta platform media sosial.

zhuandongtu

Skenario

  • Berbagi di media sosial: Gambar animasi memungkinkan pengguna dengan mudah membagikan klip video di platform sosial untuk mengekspresikan emosi, momen lucu, atau informasi penting.

  • Stiker online: Mengonversi video menjadi gambar animasi dapat digunakan untuk membuat stiker yang menyenangkan atau humoris, meningkatkan kesenangan dalam komunikasi online.

  • Tutorial dan demonstrasi: Dalam pengajaran dan demonstrasi, gambar animasi dapat digunakan untuk menampilkan operasi perangkat lunak atau panduan langkah demi langkah guna membantu audiens memahami konsep dan prosedur kompleks dengan cepat.

  • Streaming langsung dan tayangan ulang acara: Gambar animasi dapat digunakan selama pertandingan, acara, atau siaran langsung untuk memotong dan membagikan sorotan dengan cepat, sehingga meningkatkan keterlibatan audiens.

Cara Menggunakan

Persyaratan Awal

Konversi Video-ke-Gambar Animasi

Anda dapat menggunakan OSS SDK untuk Java, Python, atau Go untuk mengonversi video menjadi gambar animasi.

Java

OSS SDK for Java V3.17.4 atau lebih baru diperlukan.

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 {
        // Set yourEndpoint ke endpoint dari wilayah tempat bucket berada.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Tentukan wilayah yang sesuai dengan endpoint. Contoh: 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 GIF animasi tujuan.
        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 dayanya.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // Buat string gaya yang berisi parameter untuk konversi video-ke-gambar animasi.
            String style = String.format("video/animation,f_gif,w_100,h_100,inter_1000");
            // Buat 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

OSS SDK for Python V2.18.4 atau lebih baru diperlukan.

# -*- 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 endpoint dari wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
    endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
    # Tentukan ID wilayah Alibaba Cloud tempat bucket berada. Contoh: cn-hangzhou.
    region = 'cn-hangzhou'

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

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

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

    # Tentukan parameter untuk mengonversi video menjadi animasi GIF, termasuk lebar GIF, tinggi, dan interval waktu untuk menangkap frame.
    animation_style = 'video/animation,f_gif,w_100,h_100,inter_1000'

    # Buat instruksi pemrosesan, di mana nama bucket dan nama objek keluaran dienkripsi dalam 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

OSS SDK for Go V3.0.2 atau lebih baru diperlukan.

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 endpoint dari wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Tentukan endpoint sebenarnya Anda.
    // Tentukan ID wilayah Alibaba Cloud tempat bucket berada. Contoh: 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. Contoh: examplebucket.
    bucketName := "examplebucket"

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

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

    // Tentukan parameter untuk mengonversi video menjadi animasi GIF, termasuk lebar GIF, tinggi, dan interval waktu untuk menangkap frame.
    animationStyle := "video/animation,f_gif,w_100,h_100,inter_1000"

    // Buat instruksi pemrosesan, di mana nama bucket dan nama objek keluaran dienkripsi dalam 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)
}

Parameter

Aksi: video/animation

Tabel berikut menjelaskan parameter-parameter tersebut.

Parameter

Tipe

Diperlukan

Deskripsi

ss

int

Tidak

Titik waktu pada video saat konversi video-ke-gambar animasi dimulai. Satuan: milidetik. Nilai valid:

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

  • Lebih besar dari 0: Dimulai dari milidetik ss.

f

string

Ya

Format gambar animasi. Nilai valid:

  • gif

  • webp

num

int

Tidak

Jumlah frame yang terdapat dalam gambar animasi. Jumlah frame dalam gambar animasi tidak dibatasi secara default, artinya ekstraksi frame berlangsung hingga akhir video.

Penting

Jika video tidak cukup panjang untuk mengekstrak jumlah frame yang ditentukan, jumlah frame yang diekstrak sebenarnya akan lebih sedikit daripada jumlah frame yang ditentukan.

inter

int

Tidak

Interval waktu pengekstrakan frame dari video. Satuan: milidetik. Secara default, semua frame diekstrak dari video.

Catatan

Jika nilai parameter ini kurang dari interval frame video (kebalikan dari laju frame), frame diekstrak dari video berdasarkan interval frame video.

fps

float

Tidak

Laju frame gambar animasi. Nilai default adalah kebalikan dari inter. Nilai valid: 0 hingga 240.

Catatan

Parameter ini menentukan kecepatan pemutaran gambar animasi. Jika nilai default digunakan, kecepatan pemutaran gambar animasi sesuai dengan kecepatan pemutaran video. Nilai lebih besar dari nilai default menghasilkan pemutaran lebih cepat, sedangkan nilai lebih rendah dari nilai default memperlambat pemutaran.

w

int

Tidak

Lebar gambar animasi. Satuan: piksel. Nilai valid: 32 hingga 4096. Secara default, lebar gambar animasi sama dengan lebar video.

h

int

Tidak

Tinggi gambar animasi. Satuan: piksel. Nilai valid: 32 hingga 4096. Secara default, tinggi gambar animasi sama dengan tinggi video.

scaletype

string

Tidak

Mode pengubahan ukuran. Nilai valid:

  • crop: mengubah ukuran dan memotong frame.

  • stretch (default): meregangkan frame untuk mengisi seluruh ruang.

  • fill: mengubah ukuran frame dan mempertahankan batas hitam.

  • fit: mengubah ukuran frame secara proporsional dan menghapus batas hitam.

Catatan

Saat Anda mengonversi video menjadi gambar animasi, parameter sys/saveas dan notify digunakan. Untuk informasi lebih lanjut, lihat Simpan sebagai dan Notifikasi pesan.

API Terkait

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

File video sumber: example.mkv

Parameter pemrosesan:

  • Format konversi: gif (f_gif)

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

  • Interval ekstraksi frame: 1 detik (inter_1000)

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

  • Bucket: outbucket (Dienkode Base64: b_b3V0YnVja2V0)

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

Parameter notifikasi:

  • Metode notifikasi: Kirim pesan MNS

  • Topik notifikasi: AudioConvert (Dienkode Base64: topic_QXVkaW9Db252ZXJ0)

Contoh permintaan

// Buat gambar animasi dari video 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

Ekstrak frame pada 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 keluaran: seperempat 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 (Dienkode Base64: b_b3V0YnVja2V0)

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

Parameter notifikasi:

  • Metode notifikasi: Kirim pesan MNS

  • Subjek notifikasi: AudioConvert (Dienkode Base64: topic_QXVkaW9Db252ZXJ0)

Contoh permintaan

// Buat gambar animasi dari video 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

Penagihan

Selama proses konversi video-ke-gambar animasi, karena layanan IMM dipanggil, item penagihan berikut dihasilkan di sisi OSS dan IMM:

  • Sisi OSS: Untuk harga terperinci, lihat Harga OSS

    API

    Item Penagihan

    Deskripsi

    GetObject

    Permintaan GET

    Anda dikenakan biaya permintaan berdasarkan jumlah permintaan yang berhasil.

    Lalu lintas keluar Internet

    Jika Anda memanggil operasi GetObject menggunakan endpoint publik, seperti oss-cn-hangzhou.aliyuncs.com, atau endpoint akselerasi, seperti oss-accelerate.aliyuncs.com, Anda akan dikenakan biaya untuk lalu lintas keluar Internet berdasarkan ukuran data.

    Pengambilan data IA

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

    Kapasitas Pengambilan Langsung Arsip

    Jika objek Arsip dalam bucket dengan akses real-time diaktifkan diambil, Anda akan dikenakan biaya pengambilan data Arsip berdasarkan ukuran objek Arsip yang diambil.

    Akselerasi transfer

    Jika Anda mengaktifkan akselerasi transfer dan menggunakan endpoint akselerasi untuk mengakses bucket Anda, Anda akan dikenakan biaya akselerasi transfer berdasarkan ukuran data.

    PutObject

    Permintaan PUT

    Anda dikenakan biaya permintaan berdasarkan jumlah permintaan yang berhasil.

    Biaya penyimpanan

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

    HeadObject

    Permintaan GET

    Anda dikenakan biaya permintaan berdasarkan jumlah permintaan yang berhasil.

  • Sisi IMM: Untuk harga terperinci, lihat Item penagihan IMM

    Penting

    Mulai pukul 11:00 pada tanggal 28 Juli 2025 (UTC+8), layanan konversi video-ke-gambar animasi IMM akan ditingkatkan dari model gratis ke model berbayar. Item penagihan spesifik adalah MediaAnimation. Untuk informasi lebih lanjut, lihat Pengumuman penyesuaian penagihan IMM.

    API

    Item Penagihan

    Deskripsi

    CreateMediaConvertTask

    MediaAnimation

    Biaya konversi video-ke-gambar animasi dihitung berdasarkan jumlah frame dalam gambar animasi keluaran

Catatan Penggunaan

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

  • Akses anonim akan ditolak.