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

Alibaba Cloud Model Studio:EMO 動画生成 API リファレンス

最終更新日:Dec 27, 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/20251225/onmomb/emo.png",
        "audio_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/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/20251225/onmomb/emo.png",
        "audio_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/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/20251225/onmomb/emo.png\","
                +     "\"audio_url\": \"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/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/20251225/onmomb/emo.png",
        "audio_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/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 は 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/20250911/yhdvfg/emo.png`。

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

audio_url string (必須)

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

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

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

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

  • 例:https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/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"
}

エラーレスポンスの例

{
    "output": {
        "task_status": "PENDING",
        "task_id": "0385dc79-5ff8-4d82-bcb6-xxxxxx"
    },
    "request_id": "4909100c-7b5a-9f92-bfe5-xxxxxx"
}

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

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

エラーコード

一般的なステータスコードについては、「エラーメッセージ」をご参照ください。