すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Model Studio:EMO ビデオ生成 API リファレンス

最終更新日:Nov 09, 2025

EMO モデルは、ポートレート画像と音声オーディオを使用して、顔のアニメーションビデオを生成します。

重要

このドキュメントは、中国 (北京) リージョンにのみ適用されます。モデルを使用するには、中国 (北京) リージョンの API キー を使用する必要があります。

パフォーマンスのショーケース

サンプル入力

サンプル出力

ポートレート:

上春山

音声オーディオ:

アクションスタイルの強度: style_level パラメーターは 'active' に設定されています。

その他の例については、「パフォーマンスのショーケース」をご参照ください。

説明

アップロードされたすべての画像と音声ファイルが法的に準拠したソースからのものであり、使用に必要な権限を持っていることを確認してください。

前提条件

HTTP 呼び出し

ステップ 1: タスクを作成してタスク ID を取得する

POST https://dashscope.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis
説明
  • タスクを作成すると、システムはすぐに task_id を返します。この ID を使用してステップ 2 でタスク結果をクエリできます。task_id は作成後 24 時間有効です。

リクエストパラメーター

curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis' \
--header 'X-DashScope-Async: enable' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
    "model": "emo-v1",
    "input": {
        "image_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250911/yhdvfg/emo-image.png",
        "audio_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250825/aejgyj/input_audio.mp3",
        "face_bbox":[302,286,610,593],
        "ext_bbox":[71,9,840,778]
        },
    "parameters": {
        "style_level": "normal"
        }
    }'
import requests
import os

# 1. 環境変数から API キーを取得します。
api_key = os.getenv("DASHSCOPE_API_KEY")

# 2. リクエスト情報を準備します。
url = 'https://dashscope.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis'

headers = {
    'X-DashScope-Async': 'enable',
    'Authorization': f'Bearer {api_key}',
}

payload = {
    "model": "emo-v1",
    "input": {
        "image_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250911/yhdvfg/emo-image.png",
        "audio_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250825/aejgyj/input_audio.mp3",
        "face_bbox": [302, 286, 610, 593],
        "ext_bbox": [71, 9, 840, 778]
    },
    "parameters": {
        "style_level": "normal"
    }
}

# 3. POST リクエストを送信します。
#    'json' パラメーターを使用すると、requests は JSON シリアル化と 'Content-Type' ヘッダーを自動的に処理します。
response = requests.post(url, headers=headers, json=payload)

# 4. サーバーからの元の JSON レスポンスを出力します。
#    リクエストが成功すると、タスク ID とその他の情報が出力されます。
#    リクエストが失敗すると、サーバーから返されたエラーメッセージが出力されます。
print(response.json())
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.stream.Collectors;
/**
 * 要件:
 * - Java 8 以降。
 * - DASHSCOPE_API_KEY 環境変数は実行時に設定する必要があります。
 **/
public class DashScopeApiDemo {

    public static void main(String[] args) throws IOException {
        // 1. 環境変数から API キーを取得します。
        String apiKey = System.getenv("DASHSCOPE_API_KEY");
        // 2. リクエスト情報を準備します。
        String urlString = "https://dashscope.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis";
        String payload = "{"
                + "\"model\": \"emo-v1\","
                + "\"input\": {"
                +     "\"image_url\": \"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250911/yhdvfg/emo-image.png\","
                +     "\"audio_url\": \"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250825/aejgyj/input_audio.mp3\","
                +     "\"face_bbox\": [302, 286, 610, 593],"
                +     "\"ext_bbox\": [71, 9, 840, 778]"
                + "},"
                + "\"parameters\": {"
                +     "\"style_level\": \"normal\""
                + "}"
                + "}";
        // 3. POST リクエストを送信します。
        URL url = new URL(urlString);
        // noinspection StartSSRFNetHookCheckingInspection
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Authorization", "Bearer " + apiKey);
        connection.setRequestProperty("X-DashScope-Async", "enable");
        connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
        connection.setRequestProperty("Accept", "application/json");
        connection.setDoOutput(true);
        // 出力ストリームを取得し、リクエストボディデータを書き込みます。
        try (OutputStream os = connection.getOutputStream()) {
            byte[] input = payload.getBytes(StandardCharsets.UTF_8);
            os.write(input, 0, input.length);
        }
        // 4. サーバーのレスポンスを取得して出力します。
        int statusCode = connection.getResponseCode();
        System.out.println("Status Code: " + statusCode);
        // ステータスコードに基づいて入力ストリーム (通常またはエラーストリーム) を選択します。
        InputStream inputStream = (statusCode >= 200 && statusCode < 300)
                ? connection.getInputStream()
                : connection.getErrorStream();
        String responseBody;
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8))) {
            responseBody = reader.lines().collect(Collectors.joining("\n"));
        }
        System.out.println("Response Body: " + responseBody);
        connection.disconnect();
    }
}
// node-fetch パッケージが必要です。
// npm install node-fetch@2

// node-fetch ライブラリをインポートします。
const fetch = require('node-fetch');
// 1. 環境変数から API キーを取得します。
const apiKey = process.env.DASHSCOPE_API_KEY;
// 2. リクエスト情報を準備します。
const url = 'https://dashscope.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis';

const headers = {
    'X-DashScope-Async': 'enable',
    'Authorization': `Bearer ${apiKey}`,
    'Content-Type': 'application/json' // fetch を使用する場合は、これを指定する必要があります。
};

const payload = {
    "model": "emo-v1",
    "input": {
        "image_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250911/yhdvfg/emo-image.png",
        "audio_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250825/aejgyj/input_audio.mp3",
        "face_bbox": [302, 286, 610, 593],
        "ext_bbox": [71, 9, 840, 778]
    },
    "parameters": {
        "style_level": "normal"
    }
};

// 3. POST リクエストを送信し、レスポンスを処理します。
fetch(url, {
    method: 'POST',
    headers: headers,
    body: JSON.stringify(payload) // JavaScript オブジェクトは JSON 文字列に変換する必要があります。
})
.then(response => response.json()) // レスポンスボディを JSON として解析します。
.then(data => {
    // 4. サーバーから返された JSON データを出力します。
    console.log(data);
});
ヘッダー

X-DashScope-Async string (必須)

非同期処理構成パラメーター。HTTP リクエストは非同期処理のみをサポートします。このパラメーターを enable に設定する必要があります。

重要

このリクエストヘッダーがない場合、「current user api does not support synchronous calls」というエラーメッセージが返されます。

Authorization string (必須)

このヘッダーは身分認証に使用されます。API は Alibaba Cloud Model Studio API キーを使用してリクエストを認証します。例: Bearer sk-xxxx。

Content-Type string (必須)

リクエストのコンテンツタイプ。このパラメーターを application/json に設定します。

リクエストボディ

model string (必須)

モデル名。例: emo-v1。

input object (必須)

基本的な入力情報を指定します。

プロパティ

image_url string (必須)

アップロードされた画像の URL。モデルは EMO 画像検出 API によって返される ext_bbox パラメーターに基づいて元の画像をトリミングします。トリミングされた領域の縦横比は、出力ビデオの縦横比と解像度を直接決定します。

  • `ext_bbox` の縦横比が 1:1 の場合、512 × 512 のプロフィール写真ビデオが生成されます。縦横比が 3:4 の場合、512 × 704 の半身ポートレートビデオが生成されます。

  • 画像の最小辺の長さは 400 ピクセル以上である必要があります。最大辺の長さは 7,000 ピクセルを超えることはできません。

  • サポートされているフォーマット: JPG、JPEG、PNG、BMP、WebP。

  • 例: https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250911/yhdvfg/emo-image.png。

  • HTTP または HTTPS リンクを使用してファイルをアップロードできます。ローカルファイルパスはサポートされていません。

audio_url string (必須)

アップロードされた音声ファイルの URL。この音声ファイルは EMO モデル推論の入力として使用されます。

  • 音声にはクリアな人間の声が含まれている必要があります。最良の結果を得るには、バックグラウンドノイズ、BGM、その他の干渉を除去してください。

  • ファイルサイズは 15 MB 以下、長さは 60 秒以下である必要があります。

  • サポートされているフォーマット: WAV および MP3。

  • 例: https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250825/aejgyj/input_audio.mp3。

  • HTTP または HTTPS リンクを使用してファイルをアップロードできます。ローカルファイルパスはサポートされていません。

face_bbox array (必須)

画像内の顔領域のバウンディングボックス (bbox) のピクセル座標。EMO 画像検出 API のレスポンスの `face_bbox` フィールドからこの値を取得できます。座標フォーマットは `[x1, y1, x2, y2]` で、左上と右下の点の座標を表します。例: `[302,286,610,593]`。

画像の左上隅が原点 (0,0) です。x 軸は右に、y 軸は下に伸びます。

ext_bbox array (必須)

動的領域のバウンディングボックス (bbox) のピクセル座標。EMO 画像検出 API のレスポンスの `ext_bbox` フィールドからこの値を取得できます。この領域の縦横比は 1:1 または 3:4 です。座標フォーマットは `[x1, y1, x2, y2]` で、左上と右下の点の座標を表します。例: `[71, 9, 840, 778]`。

parameters object (オプション)

プロパティ

style_level string (オプション) デフォルト値: normal

キャラクターの動きと振幅を制御します。`normal` (中程度の動き)、`calm` (穏やかな動き)、`active` (活発な動き) の 3 つのスタイルがサポートされています。デフォルト値は `normal` です。

レスポンスパラメーター

成功レスポンスのサンプル

{
    "output": {
        "task_id": "a8532587-fa8c-4ef8-82be-xxxxxx", 
        "task_status": "PENDING"
    },
    "request_id": "7574ee8f-38a3-4b1e-9280-11c33ab46e51"
}

エラーレスポンスのサンプル

{
    "request_id":"4d687387-580a-4b49-a1f8-4691289e09a3",
    "code":"InvalidParameter",
    "message":"The request is missing required parameters or in a wrong format, please check the parameters that you send.."
}

output object

タスクの出力情報を含みます。

プロパティ

task_id string

送信された非同期タスクの ID。実際のタスク結果は、非同期タスククエリ API を使用して取得する必要があります。例: a8532587-fa8c-4ef8-82be-xxxxxx。

task_status string

送信後のタスクのステータス。例: 「PENDING」。

request_id string

一意のリクエスト ID。この ID を使用して問題を追跡およびトラブルシューティングできます。

code string

リクエストが失敗したときに返されるエラーコード。詳細については、「エラーコード」をご参照ください。

message string

リクエストが失敗したときに返される詳細なエラーメッセージ。詳細については、「エラーコード」をご参照ください。

ステップ 2: タスク ID に基づいて結果をクエリする

前のステップの task_id を使用して、タスクのステータスと結果をポーリングします。URL の {task_id} を実際のタスク ID に置き換えてください。

GET https://dashscope.aliyuncs.com/api/v1/tasks/{task_id}
説明
  • `task_id` の有効性: ID は作成後 24 時間有効です。この期間を過ぎると、結果をクエリできなくなります。API は UNKNOWN のタスクステータスを返します。

  • タスクステータスのフロー: 正常に処理されるタスクは、`PENDING` (キュー内)、`RUNNING` (処理中)、`SUCCEEDED` (成功) または `FAILED` (失敗) のステータスを遷移します。

  • 結果の取得: ビデオの生成には数分かかります。クエリ API のデフォルトの上限は 20 QPS です。15 秒などの合理的なクエリ間隔でポーリングメカニズムを使用して結果を取得します。

  • video_url の有効性: タスクが成功した後、URL は 24 時間有効です。リンクを取得したらすぐにビデオをダウンロードして永続ストレージに転送する必要があります (例: Object Storage Service (OSS))。

リクエストパラメーター

curl -X GET \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
https://dashscope.aliyuncs.com/api/v1/tasks/{task_id}
import requests
import os

# 1. 環境変数から API キーを取得します。
api_key = os.getenv("DASHSCOPE_API_KEY")

# 2. これをクエリしたいタスクの実際の ID に置き換えます。
task_id = "a8532587-fa8c-4ef8-82be-xxxxxx"

# 3. リクエスト情報を準備します。
# f-string を使用して task_id を URL に追加します。
url = f"https://dashscope.aliyuncs.com/api/v1/tasks/{task_id}"

headers = {
    'Authorization': f'Bearer {api_key}'
}

# 4. GET リクエストを送信します。
response = requests.get(url, headers=headers)

# 5. サーバーからの JSON レスポンスを出力します。
# これにより、タスクのステータス (「RUNNING」、「SUCCEEDED」、「FAILED」など) と結果が表示されます。
print(response.json())
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.stream.Collectors;
/**
 * 要件:
 * - Java 8 以降。
 * - DASHSCOPE_API_KEY 環境変数は実行時に設定する必要があります。
 **/
public class TaskStatusChecker {

    public static void main(String[] args) throws IOException {
        // 1. 環境変数から API キーを取得します。
        String apiKey = System.getenv("DASHSCOPE_API_KEY");
        // 2. これをクエリしたいタスクの実際の ID に置き換えます。
        String taskId = "a8532587-fa8c-4ef8-82be-xxxxxx"; // これをタスク ID に置き換えます。
        // 3. リクエスト情報を準備します (URL を動的に構築します)。
        String urlString = "https://dashscope.aliyuncs.com/api/v1/tasks/" + taskId;
        // 4. 接続を作成し、GET リクエストを送信します。
        URL url = new URL(urlString);
        // noinspection StartSSRFNetHookCheckingInspection
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        // リクエストヘッダーを設定します。
        connection.setRequestProperty("Authorization", "Bearer " + apiKey);
        // 5. サーバーのレスポンスを取得して出力します。
        int statusCode = connection.getResponseCode();
        System.out.println("Status Code: " + statusCode);
        InputStream inputStream = (statusCode >= 200 && statusCode < 300)
                ? connection.getInputStream()
                : connection.getErrorStream();
        String responseBody;
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8))) {
            responseBody = reader.lines().collect(Collectors.joining("\n"));
        }
        System.out.println("Response Body: " + responseBody);
        connection.disconnect();
    }
}
// node-fetch パッケージが必要です。
// npm install node-fetch@2

// node-fetch ライブラリをインポートします。
const fetch = require('node-fetch');
// 1. 環境変数から API キーを取得します。
const apiKey = process.env.DASHSCOPE_API_KEY;
// 2. これをクエリしたいタスクの実際の ID に置き換えます。
const taskId = "a8532587-fa8c-4ef8-82be-xxxxxx"; // <-- これをタスク ID に置き換えます。
// 3. リクエスト情報を準備します。
// テンプレートリテラルを使用して taskId を URL に追加します。これは Python の f-string に似ています。
const url = `https://dashscope.aliyuncs.com/api/v1/tasks/${taskId}`;

const headers = {
    'Authorization': `Bearer ${apiKey}`
};

// 4. GET リクエストを送信します。
// fetch のデフォルトのリクエストメソッドは GET なので、method: 'GET' は省略できます。
fetch(url, {
    headers: headers
})
.then(response => response.json()) // レスポンスボディを JSON として解析します。
.then(data => {
    // 5. サーバーからの JSON レスポンスを出力します。
    // これにより、タスクのステータス (「RUNNING」や「SUCCEEDED」など) と結果が表示されます。
    console.log(data);
});

ヘッダー

Authorization string (必須)

リクエストの身分認証に使用されます。API は Alibaba Cloud Model Studio API キーを使用して認証します。例: Bearer sk-xxxx。

URL パスパラメーター

task_id string (必須)

クエリするタスクの `task_id`。例: a8532587-fa8c-4ef8-82be-xxxxxx。

レスポンスパラメーター

成功レスポンスのサンプル

{
    "request_id": "8190395f-ca1b-4703-9656-xxxxxx",
    "output": {
        "task_id": "a8532587-fa8c-4ef8-82be-xxxxxx",
        "task_status": "SUCCEEDED",
        "submit_time": "2025-09-11 14:33:38.716",
        "scheduled_time": "2025-09-11 14:33:53.089",
        "end_time": "2025-09-11 14:35:51.541",
        "results": {
            "video_url": "http://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.mp4?Expires=xxxx"
        }
    },
    "usage": {
        "video_duration": 13.93,
        "video_ratio": "1:1"
    }
}

エラーレスポンスのサンプル

{
    "output": {
        "task_id": "a8532587-fa8c-4ef8-82be-xxxxxx", 
        "task_status": "FAILED",
        "code": "InvalidURL", 
        "message": "Required URL is missing or invalid, please check the request URL." 
    },
    "request_id": "4d687387-580a-4b49-a1f8-4691289e09a3" 
}

request_id string

一意のリクエスト ID。この ID を使用して問題を追跡およびトラブルシューティングできます。

output object

タスクの出力情報を含みます。

プロパティ

task_id string

クエリされたタスクの `task_id`。例: a8532587-fa8c-4ef8-82be-xxxxxx。

task_status string

タスクのステータス。

列挙

  • PENDING

  • RUNNING

  • SUCCEEDED

  • FAILED

  • CANCELED

  • UNKNOWN

submit_time string

タスクが送信された時刻。タイムゾーンは UTC+8 です。例: 2025-09-11 14:33:38.716。

scheduled_time string

タスクの開始がスケジュールされた時刻。タイムゾーンは UTC+8 です。例: 2025-09-11 14:33:53.089。

end_time string

タスクが終了した時刻。タイムゾーンは UTC+8 です。例: 2025-09-11 14:35:51.541。

results object

タスク実行結果。

プロパティ

video_url string

プラットフォームによって生成されたビデオ結果の URL。`video_url` はタスク完了後 24 時間有効です。ビデオファイルを速やかにダウンロードして保存する必要があります。例: http://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.mp4?Expires=xxxx。

code string

リクエストが失敗したときに返されるエラーコード。詳細については、「エラーコード」をご参照ください。

message string

リクエストが失敗したときに返される詳細なエラーメッセージ。詳細については、「エラーコード」をご参照ください。

usage object

プロパティ

video_duration float

このリクエストによって生成されたビデオの長さ (秒単位)。例: 13.93。

video_ratio string

このリクエストによって生成されたビデオの縦横比。値は 1:1 または 3:4 です。

課金とレート制限

モデル名

単価

タスク送信 QPS 制限

同時タスク

emo-v1

従量課金制。出力ビデオの実際の時間に基づいて課金されます:

  • 1:1 縦横比ビデオ: 0.011469 USD/秒

  • 3:4 縦横比ビデオ: 0.022937 USD/秒

5

1

(超過したタスクはキューに入れられます。)

エラーコード

Alibaba Cloud Model Studio プラットフォームの一般的なステータスコードについては、「エラーメッセージ」をご参照ください。

このモデルには、次の特定のエラーコードもあります:

HTTP リターンコード

エラーコード

エラーメッセージ

説明

400

InvalidParameter

The request is missing required parameters or in a wrong format, please check the parameters that you send.

入力パラメーターのフォーマットが正しくありません。

400

InvalidParameter

The style_level is invalid.

`style_level` の値が列挙範囲内にありません。

400

InvalidParameter.DataInspection

Unable to download the media resource during the data inspection process. 

システムが画像または音声ファイルをダウンロードする際にタイムアウトが発生しました。

中国国外から呼び出しを行う場合、不安定なクロスボーダーネットワークのためにリソースのダウンロードタイムアウトが発生することがあります。ファイルを中国の OSS に保存してからモデルを呼び出すことができます。一時記憶領域 を使用してファイルをアップロードすることもできます。

400

InvalidURL

The request URL is invalid, please check the request URL is available and the request image format is one of the following types: JPEG, JPG, PNG, BMP, and WEBP.

入力画像のダウンロードに失敗しました。ネットワークまたは入力フォーマットを確認してください。サポートされているフォーマットは JPEG、JPG、PNG、BMP、WEBP です。

400

InvalidURL

Required URL is missing or invalid, please check the request URL.

入力 URL が正しくないか、見つかりません。

400

InvalidURL

The input audio is longer than 60s!

入力音声ファイルが最大長の 60 秒を超えています。

400

InvalidURL

File size is larger than 15MB.

入力音声ファイルが最大サイズの 15 MB を超えています。

400

InvalidURL

File type is not supported. Allowed types are: .wav, .mp3.

入力音声のフォーマットが無効です。サポートされているフォーマットは WAV と MP3 です。

400

InvalidFile.Content

The input image has no human body. Please upload other image with single person.

入力画像に人物が見つかりません。人物を含む画像をアップロードしてください。

400

InvalidFile.Content

The input image has multi human bodies. Please upload other image with single person.

入力画像に複数の人物が見つかりました。1 人だけを含む画像をアップロードしてください。

400

InvalidFile.BodyProportion

The proportion of the detected person in the picture is too large or too small, please upload other image.

入力画像内の人物の比率が要件を満たしていません。

400

InvalidFile.Resolution

The image resolution is invalid, please make sure that the largest length of image is smaller than 7000, and the smallest length of image is larger than 400.

画像の解像度が無効です。最小辺の長さは 400 ピクセル以上、最大辺の長さは 7,000 ピクセルを超えてはなりません。

400

InvalidFile.Value

The value of the image is invalid, please upload other clearer image.

入力画像が暗すぎて要件を満たしていません。より鮮明な画像をアップロードしてください。

400

InvalidFile.FrontBody

The pose of the detected person is invalid, please upload other image with the front view.

アップロードされた画像の人物がカメラから顔を背けており、要件を満たしていません。人物の正面からの画像をアップロードしてください。

400

InvalidFile.FullFace

The pose of the detected face is invalid, please upload other image with whole face.

アップロードされた画像の人物の顔のポーズが要件を満たしていません。顔が見える画像をアップロードしてください。

400

InvalidFile.FacePose

The pose of the detected face is invalid, please upload other image with the expected orientation.

アップロードされた画像の人物の顔のポーズが要件を満たしていません。顔の向きが大きくずれていない画像をアップロードしてください。