全部產品
Search
文件中心

Platform For AI:使用EasyAnimate產生高清長視頻

更新時間:Oct 29, 2025

EasyAnimate是阿里雲PAI基於Diffusion Transformer(DiT)架構自主研發的視頻產生架構。它提供了一套完整的解決方案,支援通過文本或圖片快速產生高清長視頻,並包含模型微調功能以滿足個人化需求。

方案介紹

方案

優勢和適用情境

計費說明

方案一:使用DSW產生視頻

提供雲端整合式開發環境(IDE),內建教程和代碼。適合需要深入瞭解模型、進行二次開發的情境。

本教程將使用公用資源建立DSW執行個體,其採用隨用隨付模式。更多計費詳情請參見DSW計費說明

方案二:使用Model Gallery產生視頻

無需關心環境配置,可一鍵部署或微調模型,並通過 WebUI 或 API 快速調用。適合需要快速驗證效果或進行應用整合的情境。

本教程將使用公用資源建立EAS服務(用於模型部署),和DLC任務(用於模型微調),其均採用隨用隨付模式。更多計費詳情請參見DLC計費說明EAS計費說明

方案一:使用DSW產生視頻

步驟一:建立DSW執行個體

  1. 登入PAI控制台,選擇目標地區。在左側導覽列單擊工作空間列表,選擇並單擊進入目標工作空間。

  2. 在左側導覽列單擊模型開發與訓練 > 互動式建模(DSW),進入DSW頁面。

  3. 單擊建立執行個體,配置以下關鍵參數,其他參數保持預設即可。

    參數

    說明

    執行個體名稱

    本教程使用的樣本值為:AIGC_test_01。

    資源類型

    選擇公用資源

    資源規格

    選擇GPU規格下的ecs.gn7i-c8g1.2xlarge,或其他A10、GU100規格。

    鏡像

    選擇官方鏡像,搜尋並選擇easyanimate:1.1.5-pytorch2.2.0-gpu-py310-cu118-ubuntu22.04

  4. 單擊確定,建立執行個體,等待執行個體狀態變為運行中

步驟二:下載EasyAnimate教程和模型

  1. 單擊目標DSW執行個體操作列下的開啟,進入DSW執行個體的開發環境。

  2. Notebook頁簽的Launcher頁面,單擊開啟DSW Gallery

  3. 在DSW Gallery頁面,搜尋基於EasyAnimate的AI視頻產生樣本 (V5)。單擊在DSW中開啟,即可自動將本教程所需的資源下載至DSW執行個體中。

    基於EasyAnimate的AI視頻產生樣本有多個版本,本文以V5版本為例進行說明。

    image

  4. 下載EasyAnimate相關代碼和模型並進行安裝。

    在EasyAnimate的教程檔案中,單擊image依次運列名為函數定義下載代碼下載模型儲存格。

步驟三:啟動WebUI並產生視頻

  1. 單擊image運列名為UI啟動的儲存格,啟動WebUI服務。

  2. 單擊產生的連結,進入WebUI。

    image

  3. 在WebUI介面下拉選擇預訓練模型路徑,其它參數按需配置即可。

    image

  4. 單擊Generate(產生),等待約5分鐘後,即可在右側查看或下載產生的視頻。

    image

方案二:使用Model Gallery產生視頻

步驟一:部署預訓練模型

  1. 登入PAI控制台,選擇目標地區。在左側導覽列單擊工作空間列表,選擇並單擊進入目標工作空間。

  2. 在左側導覽列單擊快速開始 > Model Gallery。搜尋EasyAnimate 高清長視頻產生模型,單擊部署,使用預設配置,確認部署。當服務狀態變為運行中時,表示模型部署成功。

    image

步驟二:通過WebUI或API產生視頻

模型部署完成後,您可以使用WebUI及API兩種方式調用服務來產生視頻。

後續查看部署任務詳情,可通過在左側導覽列單擊Model Gallery > 任務管理 > 部署任務,然後再單擊服務名稱查看。

WebUI方式

  1. 服務詳情頁面,單擊查看WEB應用

    image

  2. 在WebUI介面選擇預訓練的模型路徑,其它參數按需配置即可。

    image

  3. 單擊Generate(產生),等待大約5分鐘後,即可在右側查看或下載產生的視頻。

    image

API方式

  1. 服務詳情頁面的資源詳情地區,單擊查看調用資訊,擷取服務調用地址和Token。

    image

  2. 調用服務,產生視頻。Python請求樣本如下:

    import os
    import requests
    import json
    import base64
    from typing import Dict, Any
    
    
    class EasyAnimateClient:
        """
        EasyAnimate EAS 服務 API 用戶端。
        """
    
        def __init__(self, service_url: str, token: str):
            if not service_url or not token:
                raise ValueError("服務地址 (service_url) 和 Token 不可為空")
            self.base_url = service_url.rstrip('/')
            self.headers = {
                'Content-Type': 'application/json',
                'Authorization': token
            }
    
        def update_model(self, model_path: str, edition: str = "v3", timeout: int = 300) -> Dict[str, Any]:
            """
            更新並載入指定的模型版本和路徑。
    
            Args:
                model_path: 模型在服務內的路徑, 如 "/mnt/models/Diffusion_Transformer/EasyAnimateV3-XL-2-InP-512x512"。
                edition: 模型版本,預設為 "v3"。
                timeout: 請求逾時時間(秒),模型載入較慢,建議設定較長時間。
            """
            # 1. 更新版本
            requests.post(
                f"{self.base_url}/easyanimate/update_edition",
                headers=self.headers,
                json={"edition": edition},
                timeout=timeout
            ).raise_for_status()
    
            # 2. 更新模型路徑並等待載入
            print(f"發送載入模型請求: {model_path}")
            response = requests.post(
                f"{self.base_url}/easyanimate/update_diffusion_transformer",
                headers=self.headers,
                json={"diffusion_transformer_path": model_path},
                timeout=15000
            )
            response.raise_for_status()
            return response.json()
    
        def generate_video(self, prompt_textbox: str, **kwargs) -> bytes:
            """
            根據提示詞產生視頻。
    
            Args:
                prompt: 英文正向提示詞。
                **kwargs: 其他選擇性參數,參考下方的參數說明表格。
    
            Returns:
                MP4 格式的視頻位元據。
            """
            payload = {
                "prompt_textbox": prompt_textbox,
                "negative_prompt_textbox": kwargs.get("negative_prompt",
                                                      "The video is not of a high quality, it has a low resolution..."),
                "width_slider": kwargs.get("width_slider", 672),
                "height_slider": kwargs.get("height_slider", 384),
                "length_slider": kwargs.get("length_slider", 144),
                "sample_step_slider": kwargs.get("sample_step_slider", 30),
                "cfg_scale_slider": kwargs.get("cfg_scale_slider", 6.0),
                "seed_textbox": kwargs.get("seed_textbox", 43),
                "sampler_dropdown": kwargs.get("sampler_dropdown", "Euler"),
                "generation_method": "Video Generation",
                "is_image": False,
                "lora_alpha_slider": 0.55,
                "lora_model_path": "none",
                "base_model_path": "none",
                "motion_module_path": "none"
            }
    
            response = requests.post(
                f"{self.base_url}/easyanimate/infer_forward",
                headers=self.headers,
                json=payload,
                timeout=1500
            )
            response.raise_for_status()
    
            result = response.json()
            if "base64_encoding" not in result:
                raise ValueError(f"API 返回格式錯誤: {result}")
    
            return base64.b64decode(result["base64_encoding"])
    
    
    # --- 使用樣本 ---
    if __name__ == "__main__":
        try:
            # 1. 佈建服務資訊,請替換為真實的服務調用地址和Token,建議將其設定為環境變數
            EAS_URL = "<eas-service-url>"
            EAS_TOKEN = "<eas-service-token>"
    
            # 2. 建立用戶端
            client = EasyAnimateClient(service_url=EAS_URL, token=EAS_TOKEN)
    
            # 3. 載入模型 (服務部署後,預設不會載入任何模型。在發起產生請求前,您必須至少調用一次update_model來指定要使用的模型。後續若需切換模型,則再次調用此方法。)
            client.update_model(model_path="/mnt/models/Diffusion_Transformer/EasyAnimateV3-XL-2-InP-512x512")
    
            # 4. 產生視頻
            video_bytes = client.generate_video(
                prompt_textbox="A beautiful cat playing in a sunny garden, high quality, detailed",
                width_slider=672,
                height_slider=384,
                length_slider=72,
                sample_step_slider=20
            )
    
            # 5. 儲存視頻檔案
            with open("api_generated_video.mp4", "wb") as f:
                f.write(video_bytes)
            print("視頻已成功儲存為 api_generated_video.mp4")
    
        except requests.RequestException as e:
            print(f"網路請求錯誤: {e}")
        except (ValueError, KeyError) as e:
            print(f"資料或參數錯誤: {e}")
        except Exception as e:
            print(f"發生未知錯誤: {e}")

    服務介面輸入參數說明如下:

    介面參數說明

    參數名

    說明

    類型

    預設值

    prompt_textbox

    使用者輸入的正向提示詞。

    string

    必填,無預設值

    negative_prompt_textbox

    使用者輸入的負向提示詞。

    string

    "The video is not of a high quality, it has a low resolution, and the audio quality is not clear. Strange motion trajectory, a poor composition and deformed video, low resolution, duplicate and ugly, strange body structure, long and strange neck, bad teeth, bad eyes, bad limbs, bad hands, rotating camera, blurry camera, shaking camera. Deformation, low-resolution, blurry, ugly, distortion."

    sample_step_slider

    擴散模型去噪的採樣步數。步數越多,細節可能越豐富,但耗時更長。

    int

    30

    cfg_scale_slider

    提示詞引導係數。數值越高,產生內容與提示詞的關聯度越強,但可能犧牲多樣性

    float

    6

    sampler_dropdown

    採樣器類型。

    取值包括:Euler、EulerA、DPM++、PNDM、DDIM

    string

    Euler

    width_slider

    產生視頻寬度。

    int

    672

    height_slider

    產生視頻高度。

    int

    384

    length_slider

    產生視訊框架數。

    int

    144

    is_image

    是否是圖片。

    bool

    False

    lora_alpha_slider

    LoRA模型參數的權重。

    float

    0.55

    seed_textbox

    隨機種子。

    int

    43

    lora_model_path

    額外的LoRA模型路徑。

    若有,則會在請求時帶上lora。在當次請求後移除。

    string

    none

    base_model_path

    需要更新的transformer模型路徑。

    string

    none

    motion_module_path

    需要更新的motion_module模型路徑。

    string

    none

    generation_method

    組建類型。包括:Video Generation,Image Generation

    string

    none

步驟三:(可選)微調預訓練模型

在自訂資料集上微調訓練模型,可以產生特定風格或內容的視頻。微調操作步驟如下:

  1. 登入PAI控制台。在左側導覽列單擊工作空間列表,選擇並單擊進入目標工作空間。

  2. 在左側導覽列單擊快速開始 > Model Gallery

  3. 在Model Gallery頁面,搜尋EasyAnimate 高清長視頻產生模型,單擊訓練進入配置頁面。

    image

  4. 資源來源選擇公用資源執行個體規格選擇A10及其以上顯卡的執行個體,超參數可以按需配置,其他參數預設即可。

    如果您想使用自訂資料集微調模型,可參考如下內容:

    使用自訂資料集

    1. 準備資料檔案夾和meta檔案。資料檔案夾中為訓練使用的圖片和視頻。meta檔案為JSON格式,每條資料由檔案路徑、文本描述,資料類型組成,分別用 "file_path", "text", "type"欄位表示,例如:

      [
          {
              "file_path": "00031-3640797216.png",
              "text": "1girl, black_hair",
              "type": "image"    },
          {
              "file_path": "00032-3838108680.png",
              "text": "1girl, black_hair",
              "type": "image"    }
      ]

      當資料類型為視頻時,指定 "type":"video";當資料類型為圖片時,指定 "type":"image"。

    2. 分別上傳和選擇資料檔案夾和meta檔案。在訓練配置頁面,選擇OSS檔案或目錄,然後分別上傳和選擇資料檔案夾和meta檔案。

      image

  5. 單擊訓練 > 確定建立訓練任務。在本文選擇的環境配置下訓練大約需要40分鐘,當任務狀態為成功時,代表模型訓練成功。

    後續查看訓練任務詳情,可通過在左側導覽列單擊Model Gallery > 任務管理 > 訓練任務,然後再單擊任務名稱查看。
  6. 單擊右上方的部署按鈕部署微調後的模型。當狀態變為運行中時,代表模型部署成功。

    image

  7. 服務詳情頁面,單擊頁面上方的查看WEB應用

    後續查看服務詳情,您可通過在左側導覽列單擊Model Gallery > 任務管理 > 部署任務,然後再單擊服務名稱查看。
  8. 在WebUI介面,選擇訓練完成的LoRA模型進行視頻產生。API調用方式可參考步驟二

    image

生產環境應用建議

  • 及時停止執行個體或服務節省成本:本教程使用了公用資源建立DSW執行個體及EAS模型服務,當您不需要時請及時停止或刪除執行個體(服務),以免繼續計費。

    • 停止或刪除DSW執行個體:

      image

    • 停止或刪除EAS模型服務:

      image

  • 生產環境使用EAS部署服務:如果需要將模型應用於生產環境,建議採用方式二,一鍵將模型部署到EAS。如果採用了方式一,您可以通過製作自訂鏡像方式將模型部署到EAS,詳情請參見將模型部署為線上服務

    EAS 提供了如下功能,以應對複雜的生產環境:

    • 使用EAS的自動壓測功能,測試服務介面能支撐的並發度。

    • 使用EAS的Auto Scaling功能,執行個體將實現自動擴縮容,應對業務中出現的波峰波穀,保障業務平穩運行。

    • 使用EAS的日誌監控與警示功能,協助您即時掌握服務運行狀態,提升系統的穩定性、安全性。

相關文檔

EAS提供了情境化部署方式,可一鍵部署基於ComfyUI和Stable Video Diffusion模型的AI視頻產生服務,詳情請參見AI視頻產生-ComfyUI部署