La fonctionnalité de conversion vidéo vers image animée permet de transformer des vidéos en images animées aux formats GIF et WebP.
Présentation
La conversion vidéo vers image animée transforme un fichier vidéo en format d'image animée (GIF ou WebP), facilitant ainsi le partage et l'intégration sur les sites web et les réseaux sociaux.

Scénarios d'utilisation
Partage sur les réseaux sociaux : Les images animées permettent de partager de courts extraits vidéo sur les plateformes sociales pour exprimer des émotions, illustrer des moments humoristiques ou transmettre des informations clés.
Mèmes en ligne : Convertissez des vidéos en images animées pour créer des mèmes amusants qui enrichissent les conversations en ligne.
Tutoriels et démonstrations : Utilisez des images animées dans l'enseignement ou les démonstrations pour illustrer des opérations logicielles ou des instructions étape par étape, aidant ainsi les spectateurs à comprendre rapidement des concepts et procédures complexes.
Diffusions en direct et rediffusions d'événements : Lors de jeux, d'événements ou de diffusions en direct, utilisez des images animées pour capturer et partager rapidement des moments forts avec les spectateurs, augmentant ainsi leur engagement.
Utilisation
Prérequis
Le service Intelligent Media Management (IMM) est activé.
Un bucket a été créé dans OSS et les fichiers à traiter y ont été téléchargés.
Un projet IMM a été créé et associé. Vous pouvez l'associer via la console OSS ou en appelant une API. Le projet IMM doit se trouver dans la même région que le bucket.
L'utilisateur dispose des autorisations requises pour effectuer les opérations.
Convertir une vidéo en image animée
La conversion d'une vidéo en image animée s'effectue uniquement par traitement asynchrone à l'aide du SDK OSS pour Java, Python ou Go.
Java
Le SDK OSS pour Java version 3.17.4 ou ultérieure est requis.
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 {
// The endpoint of the region in which the bucket is located.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// The region that corresponds to the endpoint, for example, cn-hangzhou.
String region = "cn-hangzhou";
// Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// The bucket name.
String bucketName = "examplebucket";
// The name of the destination animated GIF file.
String targetKey = "dest.gif";
// The name of the source video file.
String sourceKey = "src.mp4";
// Create an OSSClient instance.
// When the OSSClient instance is no longer needed, call the shutdown method to release its resources.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Build a style string that contains the parameters for video-to-animated-image conversion.
String style = String.format("video/animation,f_gif,w_100,h_100,inter_1000");
// Build the asynchronous processing instruction.
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);
// Create an AsyncProcessObjectRequest object.
AsyncProcessObjectRequest request = new AsyncProcessObjectRequest(bucketName, sourceKey, process);
// Execute the asynchronous processing task.
AsyncProcessObjectResult response = ossClient.asyncProcessObject(request);
System.out.println("EventId: " + response.getEventId());
System.out.println("RequestId: " + response.getRequestId());
System.out.println("TaskId: " + response.getTaskId());
} finally {
// Shut down the OSSClient instance.
ossClient.shutdown();
}
}
}
Python
Le SDK OSS pour Python version 2.18.4 ou ultérieure est requis.
# -*- coding: utf-8 -*-
import base64
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def main():
# Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# The endpoint of the region in which the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# The region ID, for example, cn-hangzhou.
region = 'cn-hangzhou'
# The bucket name, for example, examplebucket.
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)
# The name of the source video file.
source_key = 'src.mp4'
# The name of the destination animated GIF file.
target_key = 'example.gif'
# Define the parameters for converting the video to an animated GIF, such as width, height, and frame interval.
animation_style = 'video/animation,f_gif,w_100,h_100,inter_1000'
# Build the processing instruction, including the save path and the Base64-encoded bucket name and target object name.
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:
# Execute the asynchronous processing task.
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
Le SDK OSS pour Go version 3.0.2 ou ultérieure est requis.
package main
import (
"encoding/base64"
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"log"
)
func main() {
// Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// Specify the endpoint of the bucket. For example, for a bucket in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. For other regions, specify the actual endpoint.
// Specify the region ID, for example, 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)
}
// The bucket name, for example, examplebucket.
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// The name of the source video file.
sourceKey := "src.mp4"
// The name of the destination animated GIF file.
targetKey := "destexample.gif"
// Define the parameters for converting the video to an animated GIF, such as width, height, and frame interval.
animationStyle := "video/animation,f_gif,w_100,h_100,inter_1000"
// Build the processing instruction, including the save path and the Base64-encoded bucket name and target object name.
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)
// Execute the asynchronous processing task.
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)
}
Paramètres
Action : video/animation
Le tableau suivant décrit les paramètres.
|
Paramètre |
Type |
Obligatoire |
Description |
|
ss |
int |
Non |
Heure de début de la conversion vidéo vers image animée, en millisecondes. Valeurs valides :
|
|
f |
string |
Oui |
Format de sortie de l'image animée. Valeurs valides :
|
|
num |
int |
Non |
Nombre d'images à extraire pour l'image animée. Par défaut, les images sont extraites jusqu'à la fin de la vidéo. Important
Si la vidéo n'est pas assez longue pour extraire le nombre d'images spécifié, le nombre réel d'images extraites sera inférieur à la valeur spécifiée. |
|
inter |
int |
Non |
Intervalle d'extraction des images pour l'image animée, en millisecondes. Par défaut, toutes les images vidéo sont extraites. Remarque
Si la valeur de ce paramètre est inférieure à l'intervalle entre les images de la vidéo source (l'inverse de la fréquence d'images), les images sont extraites selon l'intervalle de la vidéo source. |
|
fps |
float |
Non |
Fréquence d'images de l'image animée. La valeur par défaut est l'inverse de inter. Valeurs valides : [0, 240]. Remarque
Ce paramètre contrôle la vitesse de lecture de l'image animée. La valeur par défaut correspond à la vitesse de la vidéo source. Une valeur plus élevée accélère la lecture, tandis qu'une valeur plus faible la ralentit. |
|
w |
int |
Non |
Largeur de l'image animée de sortie, en pixels. Valeurs valides : [32, 4096]. Par défaut, la largeur est identique à celle de la vidéo source. |
|
h |
int |
Non |
Hauteur de l'image animée de sortie, en pixels. Valeurs valides : [32, 4096]. Par défaut, la hauteur est identique à celle de la vidéo source. |
|
scaletype |
string |
Non |
Mode de redimensionnement. Valeurs valides :
|
Le processus de conversion vidéo vers image animée utilise les paramètres sys/saveas et notify. Pour plus d'informations, consultez les rubriques Enregistrer sous et Notification de message.
Exemples de requête
Extraire une image par seconde
Fichier vidéo source : example.mkv
Paramètres de traitement :
Format de sortie : gif (
f_gif)Résolution de l'image de sortie : 100 px × 100 px (
w_100,h_100)Intervalle d'extraction des images : 1 seconde (
inter_1000)
Chemin de stockage : oss://outbucket/outobjprefix.{autoext}
Bucket : outbucket (encodé en Base64 :
b_b3V0YnVja2V0)Objet : outobjprefix.{autoext} (encodé en Base64 :
o_b3V0b2JqcHJlZml4LnthdXRvZXh0fQ)
Paramètres de notification :
Méthode de notification : Envoyer un message MNS
Rubrique de notification : AudioConvert (encodé en Base64 :
topic_QXVkaW9Db252ZXJ0)
Exemple de requête
// Convert the example.mkv file into an animated image.
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
Extraire des images à partir d'une heure de début spécifique
Fichier vidéo source : example.mkv
Paramètres de traitement :
Format de sortie : webp (
f_webp)Résolution de l'image de sortie : 25 % de la largeur et de la hauteur de la vidéo source (
pw_25, ph_25)Intervalle d'extraction des images : 0,5 s (
inter_500)
Chemin de stockage : oss://outbucket/outobjprefix.{autoext}
Bucket : outbucket (encodé en Base64 :
b_b3V0YnVja2V0)Objet : outobjprefix.{autoext} (encodé en Base64 :
o_b3V0b2JqcHJlZml4LnthdXRvZXh0fQ)
Paramètres de notification :
Méthode de notification : Envoyer un message MNS
Rubrique de notification : AudioConvert (encodé en Base64 :
topic_QXVkaW9Db252ZXJ0)
Exemple de requête
// Convert the example.mkv file into an animated image.
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
Facturation
La conversion vidéo vers image animée engendre des frais pour OSS et IMM. Les éléments facturables incluent :
-
OSS : Pour plus d'informations sur les tarifs, consultez la page Tarification OSS.
API
Élément facturable
Description
GetObject
Requêtes GET
Les frais de requête sont calculés en fonction du nombre de requêtes réussies.
Trafic sortant via Internet
Si vous appelez l'opération GetObject via un endpoint public (par exemple, oss-cn-hangzhou.aliyuncs.com) ou un endpoint d'accélération de transfert (par exemple, oss-accelerate.aliyuncs.com), des frais de trafic sortant via Internet vous sont facturés en fonction du volume de données.
Récupération de données depuis le stockage Infrequent Access (IA)
Si vous récupérez des objets Infrequent Access (IA), des frais de récupération de données vous sont facturés en fonction du volume de données récupérées.
Récupération de données pour la lecture directe des archives
Si vous lisez des objets Archive à partir d'un bucket pour lequel la lecture directe des archives est activée, des frais de récupération de données vous sont facturés en fonction du volume de données récupérées.
Accélération de transfert
Si vous activez l'accélération de transfert et utilisez un endpoint d'accélération de transfert pour accéder à votre bucket, des frais d'accélération de transfert vous sont facturés en fonction du volume de données.
PutObject
Requêtes PUT
Les frais de requête sont calculés en fonction du nombre de requêtes réussies.
Frais de stockage
Des frais de stockage vous sont facturés en fonction de la classe de stockage, de la taille et de la durée de stockage d'un objet.
HeadObject
Requêtes GET
Les frais de requête sont calculés en fonction du nombre de requêtes réussies.
-
IMM : Pour plus d'informations sur les tarifs, consultez la rubrique Éléments de facturation IMM.
ImportantÀ compter du 28 juillet 2025 à 11 h 00 (UTC+8), la fonctionnalité de conversion vidéo vers image animée d'IMM passera d'un service gratuit à un service payant. L'élément facturable est MediaAnimation. Pour plus d'informations, consultez l'annonce relative à l'ajustement de la facturation IMM.
API
Élément facturable
Description
CreateMediaConvertTask
MediaAnimation
Les frais de conversion vidéo vers image animée sont calculés en fonction du nombre d'images de l'image animée de sortie.
Remarques d'utilisation
La conversion vidéo vers image animée prend uniquement en charge le traitement asynchrone (via la méthode x-oss-async-process).
L'accès anonyme est refusé.