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.

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
Anda telah mengaktifkan Intelligent Media Management (IMM).
Anda telah membuat bucket di OSS dan mengunggah file yang akan diproses ke bucket tersebut.
Anda telah membuat dan menyambungkan Proyek IMM. Anda dapat menyambungkannya melalui Konsol OSS atau dengan memanggil API. Proyek IMM harus berada di wilayah yang sama dengan bucket.
Anda telah memberikan izin yang diperlukan kepada pengguna.
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:
|
f | string | Ya | Format gambar animasi. Nilai valid:
|
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:
|
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_QXVkaW9Db252ZXJ0Ekstrak 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_QXVkaW9Db252ZXJ0Penagihan
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
PentingMulai 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.