视频翻译
使用说明
视频翻译用于将已有视频翻译并合成为目标语言版本。接口会自动识别源视频语言,完成转写、翻译、目标语言配音、时间轴规划、可选唇形驱动和字幕合成。
使用流程
- 准备源视频。上传本地视频时,先通过 文件管理 获取上传地址,
service传video_translation,上传完成后使用返回的file_id;也可以使用当前 OpenAPI 应用下已完成的视频任务 ID 作为video_id。 - 调用 获取目标语言列表,取得
target_languages可传的语言编码。 - 调用 创建视频翻译任务,
source.file_id与source.video_id二选一,target_languages传入目标语言。 - 任务创建成功后接口会返回视频翻译任务 ID 和目标语言对应的视频任务 ID。使用
data.tasks[].language_task_id调用 获取视频详情 查询进度和成片地址。
源视频要求
| 项目 | 要求 |
|---|---|
| 上传用途 | service=video_translation |
| 文件格式 | mp4、mov |
| 文件大小 | 不超过 1GB |
| 视频时长 | 不超过 120 分钟 |
| 视频尺寸 | 宽高必须大于 0,且宽高均不超过 4096 |
| 来源限制 | file_id 必须属于当前 OpenAPI 应用;video_id 必须是当前 OpenAPI 应用下已完成且有成片地址的视频任务,且不能是来自视频翻译的任务 |
获取目标语言列表
说明
获取视频翻译支持的目标语言列表。创建视频翻译任务时,target_languages 传本接口返回的 language_code。
请求地址
http
GET /open/v1/video_translation/target_languagesHeader
http
access_token: {{access_token}}请求参数
无。
响应示例
json
{
"trace_id": "a55f1ab65ad856106463d85cf24b2eb9",
"code": 0,
"msg": "success",
"data": {
"languages": [
{
"language_code": "english",
"name": "英语"
},
{
"language_code": "japanese",
"name": "日语"
}
]
}
}响应字段说明
| 字段 | 说明 |
|---|---|
| code | 响应状态码 |
| msg | 响应信息 |
| trace_id | 请求链路追踪 ID |
| data.languages | 支持的目标语言列表 |
| data.languages[].language_code | 创建任务时 target_languages 传入的值 |
| data.languages[].name | 语言中文名称 |
响应状态码说明
| code | 说明 |
|---|---|
| 0 | 响应成功 |
| 10400 | AccessToken 验证失败 |
| 40000 | 参数错误 |
| 50000 | 系统内部错误 |
示例代码
shell
curl --location --request GET 'https://open-api.chanjing.cc/open/v1/video_translation/target_languages' \
--header 'access_token: {{access_token}}'go
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://open-api.chanjing.cc/open/v1/video_translation/target_languages"
method := "GET"
client := &http.Client{}
req, err := http.NewRequest(method, url, nil)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("access_token", "{{access_token}}")
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}java
OkHttpClient client = new OkHttpClient().newBuilder().build();
Request request = new Request.Builder()
.url("https://open-api.chanjing.cc/open/v1/video_translation/target_languages")
.method("GET", null)
.addHeader("access_token", "{{access_token}}")
.build();
Response response = client.newCall(request).execute();py
import requests
url = "https://open-api.chanjing.cc/open/v1/video_translation/target_languages"
headers = {
'access_token': '{{access_token}}'
}
response = requests.request("GET", url, headers=headers)
print(response.text)创建视频翻译任务
说明
异步任务接口,用于提交 OpenAPI 视频翻译任务。接口支持本地上传视频或已有开放平台视频作为来源。
请求地址
http
POST /open/v1/video_translation/createHeader
http
access_token: {{access_token}}
Content-Type: application/json请求参数 Body
json
{
"source": {
"file_id": "e284db4d95de4220afe78132158156b5",
"video_id": "",
"title": "商品讲解视频"
},
"target_languages": ["english"],
"audio_id": "",
"need_lip_sync": true,
"need_dynamic_duration": true,
"need_subtitle": true
}参数说明
| 字段 | 类型 | 是否必传 | 示例 | 说明 |
|---|---|---|---|---|
| source | object | 是 | 视频来源配置 | |
| source.file_id | string | 否 | e284db4d95de4220afe78132158156b5 | 上传源视频得到的文件 ID;与 source.video_id 二选一 |
| source.video_id | string | 否 | 1976538431040819200 | 已有开放平台视频任务 ID;与 source.file_id 二选一 |
| source.title | string | 否 | 商品讲解视频 | 视频名称,最长 50 个字符 |
| target_languages | array<string> | 是 | ["english"] | 目标语言数组,使用语言列表接口返回的 language_code |
| audio_id | string | 否 | C-Audio-xxxxxxxx | 输出音色 ID;为空表示使用原视频声音,非空时使用传入的公共声音或定制音色 |
| need_lip_sync | bool | 否 | true | 是否生成目标语言唇形同步效果,默认 false |
| need_dynamic_duration | bool | 否 | true | 是否允许根据目标语言语速动态调整视频时长,默认 false |
| need_subtitle | bool | 否 | true | 是否在结果视频中合成目标语言字幕,默认 false |
注意
source.file_id 和 source.video_id 必须且只能传一个。上传源视频时,文件管理接口的 service 必须传 video_translation。
响应示例
json
{
"trace_id": "96afa792520b0e6a86d72e89435bc0a7",
"code": 0,
"msg": "success",
"data": {
"id": "e284db4d95de4220afe78132158156b5",
"tasks": [
{
"language_task_id": "1976538431040819200",
"target_language": "english"
}
]
}
}响应字段说明
| 字段 | 说明 |
|---|---|
| code | 响应状态码 |
| msg | 响应信息 |
| trace_id | 请求链路追踪 ID |
| data.id | 视频翻译任务 ID |
| data.tasks | 目标语言对应的视频任务列表 |
| data.tasks[].language_task_id | 视频任务 ID,可用于视频详情接口查询进度和结果 |
| data.tasks[].target_language | 目标语言 |
响应状态码说明
| code | 说明 |
|---|---|
| 0 | 响应成功 |
| 400 | 传入参数格式错误 |
| 10400 | AccessToken 验证失败 |
| 40000 | 参数错误 |
| 40001 | 超出 QPS 限制 |
| 50000 | 系统内部错误 |
| 170002 | 源视频不可用,请重新选择 |
| 170003 | 翻译语言配置不正确 |
| 170006 | 上传视频不可用,请重新上传 |
| 170008 | 所选声音不可用,请重新选择 |
| 170009 | 视频时长超出限制 |
| 170010 | 视频大小超出限制 |
示例代码
shell
curl --location --request POST 'https://open-api.chanjing.cc/open/v1/video_translation/create' \
--header 'access_token: {{access_token}}' \
--header 'Content-Type: application/json' \
--data-raw '{
"source": {
"file_id": "e284db4d95de4220afe78132158156b5",
"video_id": "",
"title": "商品讲解视频"
},
"target_languages": ["english"],
"audio_id": "",
"need_lip_sync": true,
"need_dynamic_duration": true,
"need_subtitle": true
}'go
package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
url := "https://open-api.chanjing.cc/open/v1/video_translation/create"
method := "POST"
payload := strings.NewReader(`{
"source": {
"file_id": "e284db4d95de4220afe78132158156b5",
"video_id": "",
"title": "商品讲解视频"
},
"target_languages": ["english"],
"audio_id": "",
"need_lip_sync": true,
"need_dynamic_duration": true,
"need_subtitle": true
}`)
client := &http.Client{}
req, err := http.NewRequest(method, url, payload)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("access_token", "{{access_token}}")
req.Header.Add("Content-Type", "application/json")
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}java
OkHttpClient client = new OkHttpClient().newBuilder().build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n \"source\": {\n \"file_id\": \"e284db4d95de4220afe78132158156b5\",\n \"video_id\": \"\",\n \"title\": \"商品讲解视频\"\n },\n \"target_languages\": [\"english\"],\n \"audio_id\": \"\",\n \"need_lip_sync\": true,\n \"need_dynamic_duration\": true,\n \"need_subtitle\": true\n}");
Request request = new Request.Builder()
.url("https://open-api.chanjing.cc/open/v1/video_translation/create")
.method("POST", body)
.addHeader("access_token", "{{access_token}}")
.addHeader("Content-Type", "application/json")
.build();
Response response = client.newCall(request).execute();py
import requests
import json
url = "https://open-api.chanjing.cc/open/v1/video_translation/create"
payload = json.dumps({
"source": {
"file_id": "e284db4d95de4220afe78132158156b5",
"video_id": "",
"title": "商品讲解视频"
},
"target_languages": ["english"],
"audio_id": "",
"need_lip_sync": True,
"need_dynamic_duration": True,
"need_subtitle": True
})
headers = {
'access_token': '{{access_token}}',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)