Todos os produtos
Search
Central de documentação

Object Storage Service:Video-to-animated-image conversion

Última atualização: Jul 03, 2026

Use o recurso de conversão de vídeo para imagem animada para transformar vídeos em imagens animadas nos formatos GIF e WebP.

Visão geral

A conversão de vídeo para imagem animada transforma um arquivo de vídeo em um formato de imagem animada, como GIF ou WebP, facilitando o compartilhamento e a incorporação em sites e redes sociais.

zhuandongtu

Cenários

  • Compartilhamento em redes sociais: Imagens animadas permitem que os usuários compartilhem clipes curtos de vídeo em plataformas sociais para expressar emoções, momentos engraçados ou informações importantes.

  • Memes online: Converta vídeos em imagens animadas para criar memes divertidos ou humorísticos que enriquecem as conversas na internet.

  • Tutoriais e demonstrações: Utilize imagens animadas em aulas ou demonstrações para exibir operações de software ou instruções passo a passo, ajudando os espectadores a compreender rapidamente conceitos e procedimentos complexos.

  • Transmissões ao vivo e replays de eventos: Durante jogos, eventos ou transmissões ao vivo, use imagens animadas para recortar e compartilhar rapidamente momentos emocionantes com os espectadores, aumentando o engajamento.

Como usar

Pré-requisitos

Converter um vídeo em imagem animada

A conversão de vídeo para imagem animada só é possível mediante processamento assíncrono com o OSS SDK for Java, Python ou Go.

Java

É necessário o OSS SDK for Java 3.17.4 ou posterior.

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

É necessário o OSS SDK for Python 2.18.4 ou posterior.

# -*- 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

É necessário o OSS SDK for Go 3.0.2 ou posterior.

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)
}

Parâmetros

Ação: video/animation

A tabela a seguir descreve os parâmetros.

Parâmetro

Tipo

Obrigatório

Descrição

ss

int

Não

Tempo inicial da conversão de vídeo para imagem animada, em milissegundos. Valores válidos:

  • 0 (padrão): A conversão começa do início do vídeo.

  • Valor maior que 0: A conversão começa aos ss milissegundos.

f

string

Sim

Formato de saída da imagem animada. Valores válidos:

  • gif

  • webp

num

int

Não

Número de quadros a extrair para a imagem animada. Por padrão, os quadros são extraídos até o final do vídeo.

Importante

Se o vídeo não tiver duração suficiente para extrair o número especificado de quadros, a quantidade real de quadros extraídos será menor que o valor definido.

inter

int

Não

Intervalo de extração de quadros para a imagem animada, em milissegundos. Por padrão, todos os quadros do vídeo são extraídos.

Nota

Se o valor deste parâmetro for menor que o intervalo de quadros do vídeo original (o inverso da taxa de quadros), a extração ocorrerá conforme o intervalo de quadros do vídeo fonte.

fps

float

Não

Taxa de quadros da imagem animada. O valor padrão é o inverso de inter. Valores válidos: [0, 240].

Nota

Este parâmetro controla a velocidade de reprodução da imagem animada. O valor padrão corresponde à velocidade do vídeo original. Um valor mais alto acelera a reprodução, enquanto um valor mais baixo a desacelera.

w

int

Não

Largura da imagem animada de saída, em pixels. Valores válidos: [32, 4096]. Por padrão, a largura é igual à do vídeo original.

h

int

Não

Altura da imagem animada de saída, em pixels. Valores válidos: [32, 4096]. Por padrão, a altura é igual à do vídeo original.

scaletype

string

Não

Modo de redimensionamento. Valores válidos:

  • crop: Redimensiona e recorta a imagem.

  • stretch (padrão): Estica a imagem para preencher as dimensões alvo.

  • fill: Redimensiona a imagem e adiciona bordas pretas se a proporção não corresponder.

  • fit: Redimensiona a imagem proporcionalmente sem adicionar bordas pretas.

Nota

O processo de conversão de vídeo para imagem animada utiliza os parâmetros sys/saveas e notify. Para mais informações, consulte Salvar como e Notificação de mensagem.

Exemplos de solicitação

Extrair um quadro por segundo

Arquivo de vídeo fonte: example.mkv

Parâmetros de processamento:

  • Formato de saída: gif (f_gif)

  • Resolução da imagem de saída: 100 px × 100 px (w_100,h_100)

  • Intervalo de extração de quadros: 1 segundo (inter_1000)

Caminho de armazenamento: oss://outbucket/outobjprefix.{autoext}

  • Bucket: outbucket (codificado em Base64: b_b3V0YnVja2V0)

  • Objeto: outobjprefix.{autoext} (codificado em Base64: o_b3V0b2JqcHJlZml4LnthdXRvZXh0fQ)

Parâmetros de notificação:

  • Método de notificação: Enviar uma mensagem MNS

  • Tópico de notificação: AudioConvert (codificado em Base64: topic_QXVkaW9Db252ZXJ0)

Exemplo de solicitação

// 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

Extrair quadros a partir de um tempo inicial específico

Arquivo de vídeo fonte: example.mkv

Parâmetros de processamento:

  • Formato de saída: webp (f_webp)

  • Resolução da imagem de saída: 25% da largura e altura do vídeo original (pw_25, ph_25)

  • Intervalo de extração de quadros: 0,5 s (inter_500)

Caminho de armazenamento: oss://outbucket/outobjprefix.{autoext}

  • Bucket: outbucket (codificado em Base64: b_b3V0YnVja2V0)

  • Objeto: outobjprefix.{autoext} (codificado em Base64: o_b3V0b2JqcHJlZml4LnthdXRvZXh0fQ)

Parâmetros de notificação:

  • Método de notificação: Enviar uma mensagem MNS

  • Tópico de notificação: AudioConvert (codificado em Base64: topic_QXVkaW9Db252ZXJ0)

Exemplo de solicitação

// 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

Faturamento

A conversão de vídeo para imagem animada gera taxas tanto do OSS quanto do IMM. Os itens faturáveis incluem:

  • OSS: Para mais informações sobre preços, consulte Preços do OSS.

    API

    Item de faturamento

    Descrição

    GetObject

    Solicitações GET

    As taxas de solicitação são calculadas com base no número de solicitações bem-sucedidas.

    Tráfego de saída pela internet

    Ao chamar a operação GetObject usando um endpoint público (por exemplo, oss-cn-hangzhou.aliyuncs.com) ou um endpoint de aceleração de transferência (por exemplo, oss-accelerate.aliyuncs.com), você é cobrado pelo tráfego de saída pela internet com base no volume de dados.

    Recuperação de dados do armazenamento de Acesso Infrequente (IA)

    Ao recuperar objetos de Acesso Infrequente (IA), são aplicadas taxas de recuperação de dados com base na quantidade de dados recuperados.

    Recuperação de dados para leitura direta de arquivamento

    Ao ler objetos Archive de um bucket com leitura direta de arquivamento habilitada, são aplicadas taxas de recuperação de dados com base na quantidade de dados recuperados.

    Aceleração de transferência

    Se você ativar a aceleração de transferência e usar um endpoint de aceleração para acessar seu bucket, serão aplicadas taxas de aceleração de transferência com base no volume de dados.

    PutObject

    Solicitações PUT

    As taxas de solicitação são calculadas com base no número de solicitações bem-sucedidas.

    Taxas de armazenamento

    Você é cobrado pelas taxas de armazenamento com base na classe de armazenamento, tamanho e duração de armazenamento de um objeto.

    HeadObject

    Solicitações GET

    As taxas de solicitação são calculadas com base no número de solicitações bem-sucedidas.

  • IMM: Para mais informações sobre preços, consulte Itens de faturamento do IMM.

    Importante

    A partir das 11:00 (UTC+8) de 28 de julho de 2025, o recurso de conversão de vídeo para imagem animada do IMM será atualizado de um serviço gratuito para pago. O item faturável é MediaAnimation. Para mais informações, consulte o Anúncio de ajuste de faturamento do IMM.

    API

    Item de faturamento

    Descrição

    CreateMediaConvertTask

    MediaAnimation

    As taxas de conversão de vídeo para imagem animada são calculadas com base no número de quadros na imagem animada de saída.

Observações de uso

  • A conversão de vídeo para imagem animada suporta apenas processamento assíncrono (usando o método x-oss-async-process).