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
-
Layanan Intelligent Media Management (IMM) telah diaktifkan.
-
Sebuah bucket telah dibuat di OSS, dan file yang akan diproses telah diunggah ke dalamnya.
-
Proyek IMM telah dibuat dan disambungkan. Anda dapat menyambungkannya melalui Konsol OSS atau dengan memanggil API. Proyek IMM harus berada di wilayah yang sama dengan bucket.
-
Pengguna telah diberikan izin yang diperlukan untuk operasi tersebut.
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:
|
|
f |
string |
Ya |
Format output gambar animasi. Nilai yang valid:
|
|
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:
|
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.
PentingMulai 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.