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
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 yang berwenang untuk melakukan operasi tersebut.
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:
|
f | string | Ya | Format output gambar animasi. Nilai yang valid:
|
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:
|
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_QXVkaW9Db252ZXJ0Ekstrak 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_QXVkaW9Db252ZXJ0Penagihan
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
PentingMulai 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.