mcpField
A
alibabacloud-video-translation

alibabacloud-video-translation

github.com/aliyun创意与媒体281150 次安装1 天前更新
代码仓库

关于 alibabacloud-video-translation

通过 Alibaba Cloud IMS 执行视频字幕翻译或语音翻译的 Agent Skill,面向需要处理视频本地化的工作流。它涵盖字幕提取与复核、翻译模式确认、OSS 输入处理及任务状态轮询。

主要功能

  1. 01字幕级和语音级翻译
  2. 02提取字幕并供用户复核
  3. 03确认翻译和字幕处理选项
  4. 04处理 OSS 与 HTTP 视频地址
  5. 05轮询任务直至完成或失败

适用场景

  1. 01翻译视频字幕
  2. 02翻译字幕并替换配音
  3. 03从视频提取字幕后校对
  4. 04将本地视频上传 OSS 后翻译

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/aliyun/alibabacloud-aiops-skills --skill alibabacloud-video-translation

安装后在 Claude Code 中输入/alibabacloud-video-translation确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
api-parameters.md
cli-commands.md
cli-installation-guide.md
ram-policies.md
requirements.txt
troubleshooting.md
workflow-details.md
scripts/
requirements.txt
video_translation.py

详细介绍

视频翻译技能

由阿里云 IMS 提供支持的一键视频翻译,支持字幕级和语音级翻译。


输入格式要求

重要:不同 API 使用不同的地址格式!

API 地址格式参考
API地址格式示例
SubmitIProductionJob(字幕提取)oss:// 格式oss://my-bucket/videos/test.mp4
SubmitVideoTranslationJob(视频翻译)HTTP URL 格式https://my-bucket.oss-cn-shanghai.aliyuncs.com/videos/test.mp4

要点:字幕提取使用 oss://,视频翻译使用 HTTP URL!

用户输入处理
用户输入类型处理方式
HTTP URL 格式视频翻译时直接使用;如需提取字幕,则转换为 oss://
oss:// 格式提取字幕时直接使用;视频翻译时转换为 HTTP URL
本地视频必须询问 OSS 上传路径,上传后保存两种格式
格式转换规则
oss:// format ⇄ HTTP URL format

oss://my-bucket/videos/test.mp4
    ⇄
https://my-bucket.oss-cn-shanghai.aliyuncs.com/videos/test.mp4

转换公式:

  • oss://<bucket>/<path> → https://<bucket>.oss-<region>.aliyuncs.com/<path>
  • HTTP URL 无需签名,直接使用 Bucket 域名格式
本地视频处理流程
User provides local video path
    │
    ├─ AskUserQuestion: "Please provide OSS upload path (format: oss://<bucket>/<path>/<filename>.mp4)"
    │
    ├─ User specifies upload path
    │   ├─ Check if Bucket exists
    │   ├─ Upload file: aliyun oss cp <local_path> <oss_path>
    │   ├─ Save oss:// format → for subtitle extraction
    │   └─ Save HTTP URL format → for video translation
    │
    └─ User does not specify path → STOP, user MUST provide upload path

上传命令:

aliyun oss cp <local_path> oss://<bucket>/<path>/<filename>.mp4

上传后保存两种格式:

Local: /Users/demo/videos/test.mp4
Uploaded to: oss://my-bucket/videos/test.mp4
    ├─ oss:// format: oss://my-bucket/videos/test.mp4 (for subtitle extraction)
    └─ HTTP URL: https://my-bucket.oss-cn-shanghai.aliyuncs.com/videos/test.mp4 (for video translation)

执行门控检查清单

严格要求:Agent 必须按阶段顺序执行,当前阶段未通过时不得继续!

阶段 0:环境和凭据检查(硬性门控)
检查项命令通过条件失败处理
CLI 版本aliyun version>= 3.3.1停止,参见 cli-installation-guide.md
凭据状态aliyun configure list状态有效停止,引导完成配置
插件安装aliyun configure set --auto-plugin-install true已设置自动设置

硬性门控:未通过检查前,不得进行任何后续操作!


阶段 1:确认翻译模式(阻塞)
AskUserQuestion: "Do you need subtitle translation (translate subtitles only) or speech translation (translate subtitles + replace voiceover)?"

┌─ Subtitle translation → NeedSpeechTranslate: false
└─ Speech translation → NeedSpeechTranslate: true

⚠️ No reply received → STOP, cannot proceed!

不得根据输入类型推断翻译模式!


阶段 2:确认字幕处理方式(阻塞)
AskUserQuestion: "Do you need to erase original subtitles from the video? Do you need to burn-in translated subtitles?"

⚠️ No reply received → STOP, cannot proceed!

参数映射:

功能参数值
擦除原字幕DetextArea"Auto" / 坐标 / 不设置(不擦除)
烧录新字幕SubtitleConfig配置对象 / 不设置(不烧录)

阶段 3:确认输出路径(非阻塞)
条件处理方式
用户明确指定使用用户指定的路径
用户未指定使用默认路径并告知用户

默认输出规则:

  • Bucket:与输入视频相同
  • 目录:与输入视频相同
  • 文件名:{source}_translated_{random8}.mp4
  • 示例:oss://bucket/videos/demo.mp4 → oss://bucket/videos/demo_translated_a1b2c3d4.mp4

不要使用 shell 变量,使用 Python:python3 -c "import random; print(''.join(random.choices('abcdefghijkmnpqrstuvwxyz23456789', k=8)))"


阶段 4:确认字幕审核(有条件阻塞)
触发条件处理方式
用户选择审核字幕阻塞,必须等待用户确认审核结果
用户不需要审核非阻塞,继续执行

关键:提取字幕后,必须原样输出内容供用户审核,不要更改格式!


场景入口选择器

要点:

  1. 用户输入本地视频时,必须先上传到 OSS 并获取 HTTP URL。
  2. 用户未提供字幕时,必须询问是否需要提取和审核字幕。
User inputs video
    │
    ├─ Local video?
    │   └─ Yes → AskUserQuestion: "Please provide OSS upload path"
    │       ├─ User provides path → Upload to OSS → Convert to HTTP URL → Continue
    │       └─ User does not provide → STOP
    │
    ├─ oss:// format?
    │   └─ Yes → Inform user to convert to HTTP URL format
    │
    └─ HTTP URL format? → Continue
        │
        ├─ User provides SRT file?
        │   ├─ Yes → Input type = with_subtitle
        │   │   ├─ Translation mode = speech → 【Scenario 4】 ⚠️ MUST ask CustomSrtType
        │   │   └─ Translation mode = subtitle → 【Scenario 3】
        │   │
        │   └─ No → Input type = only_video ⚠️ MUST ask if review needed
        │       │
        │       ├─ AskUserQuestion: "Do you need to extract subtitles for review first, or translate directly?"
        │       │
        │       ├─ Need review → 【Scenario 2】 ⚠️ Phase 4 blocking
        │       │
        │       └─ Direct translation → 【Scenario 1】 (TextSource=OCR_ASR)
场景名称阻塞点TextSource流程
0本地视频上传询问 OSS 上传路径-上传→HTTP URL→后续场景
1直接翻译阶段 1、2OCR_ASR直接提交翻译
2字幕审核阶段 1、2、询问字幕审核、阶段 4SubtitleFile提取字幕→审核→翻译
3字幕翻译 + 用户字幕阶段 1、2SubtitleFile使用用户提供的 SRT 直接翻译
4语音翻译 + 用户字幕阶段 1、2 + 确认 CustomSrtTypeSubtitleFile确认字幕语言后翻译

场景 0(本地视频)详细流程:

  1. AskUserQuestion:“请提供 OSS 上传路径(格式:oss:////.mp4)”
  2. 用户指定路径后,执行 aliyun oss cp <local_path> <oss_path>
  3. 转换为 HTTP URL:https://<bucket>.oss-<region>.aliyuncs.com/<path>/<filename>.mp4
  4. 继续执行后续场景流程

场景 2 详细流程:

  1. 询问字幕检测区域(roi 参数)
  2. 调用 CaptionExtraction 提取字幕,输入和输出均使用 oss:// 格式
  3. 原样输出字幕内容供用户审核
  4. 用户确认后,使用审核通过的 SRT 提交翻译

参数决策表

决策规则:明确每个参数的处理方式,切勿随意假设!

参数触发条件处理方式默认值禁止行为
NeedSpeechTranslate始终必须询问无切勿根据输入推断
NeedFaceTranslate始终固定值false切勿设为 true
DetextArea用户选择擦除必须询问无切勿随意设为 Auto
SubtitleConfig用户选择烧录可使用默认值标准样式切勿跳过确认
TextSource由场景决定遵循场景规则参见场景映射切勿随意选择
CustomSrtType场景 4必须询问无切勿随意推断
OutputConfig.MediaURL输出路径可使用默认值默认规则切勿使用 shell 变量
JobParams.roi字幕提取必须询问[[0.5,1],[0,1]]切勿随意设为默认值
SourceLanguage用户指定或可推断可使用默认值自动检测仅中文使用 zh
TargetLanguage用户指定可使用默认值en其他语言需询问

TextSource 场景映射:

场景值说明
1OCR_ASR自动检测字幕
2SubtitleFile审核通过的 SRT
3、4SubtitleFile用户提供的 SRT

CustomSrtType 触发规则:

条件值
CaptionExtraction 已提取SourceSrt
用户提供字幕(场景 4)必须询问:SourceSrt / TargetSrt

失败保护机制

硬性限制:语音翻译失败后,切勿自动切换为字幕翻译!

API 错误处理
ErrorCode处理操作
Forbidden.SubscriptionRequired参见 ram-policies.md
InvalidParameter参见 api-parameters.md
InputConfig.Subtitle is invalid参见 troubleshooting.md
JobFailed记录 JobId,并询问用户是否需要重试
SRT 格式修复流程
Detect empty subtitle entries → Delete empty entries → Renumber → Upload repaired file → Inform user

详情请参见 troubleshooting.md。


CLI 命令模板

重要:提交 API 前,必须参考 api-parameters.md 确认参数格式!

详情请参阅 cli-commands.md。

核心命令:

# Register media asset
aliyun ice register-media-info --input-url "oss://<bucket>/<object>" --media-type video --user-agent AlibabaCloud-Agent-Skills

# Submit subtitle extraction (use OSS path)
aliyun ice submit-iproduction-job \
  --function-name CaptionExtraction \
  --input "Media=oss://<bucket>/<object> Type=OSS" \
  --biz-output "Media=oss://<bucket>/<output>.srt Type=OSS" \
  --job-params '{"lang":"ch","roi":[[0.5,1],[0,1]]}' \
  --force \
  --user-agent AlibabaCloud-Agent-Skills

# Submit video translation
aliyun ice submit-video-translation-job \
  --user-agent AlibabaCloud-Agent-Skills

CLI 格式要点:

  • 字幕提取使用命令名称 submit-iproduction-job(小写,以 - 分隔)
  • --input 和 --biz-output 格式:以空格分隔的字符串 "Media=... Type=OSS",而非 JSON
  • --job-params 格式:JSON 字符串
  • 必须添加 --force 以跳过插件参数验证
  • 所有 ICE 命令都必须添加 --user-agent AlibabaCloud-Agent-Skills

文档参考

文档内容
workflow-details.md4 种场景的详细执行流程
cli-commands.mdCLI 命令模板库
troubleshooting.md错误处理详情
api-parameters.md完整的 API 参数文档
ram-policies.mdRAM 权限要求
cli-installation-guide.mdCLI 安装指南

关键约束

  • 提交 API 前,必须参考 api-parameters.md 确认参数格式
  • 所有 ICE CLI 命令都必须添加 --user-agent AlibabaCloud-Agent-Skills
  • 字幕提取(SubmitIProductionJob)使用 oss:// 格式
  • 视频翻译(SubmitVideoTranslationJob)使用 HTTP URL 格式,无需签名
  • 本地视频必须先上传到 OSS,用户必须提供上传路径
  • NeedFaceTranslate 必须为 false
  • SpeechTranslate 和 SubtitleTranslate 不能同时使用
  • InputConfig.Subtitle 必须使用 HTTPS 格式,不得使用 oss://
  • 语音翻译 + SRT 输入需要 SpeechTranslate.CustomSrtType
  • 不要根据输入类型推断翻译模式

任务轮询

强制要求:必须持续轮询任务状态,直到任务完成(State=Finished)或失败(State=Failed),不得提前退出!

任务类型查询命令间隔超时
字幕提取QueryIProductionJob30 秒5 分钟
视频翻译get-smart-handle-job30 秒30 分钟

轮询逻辑:

Loop polling until:
  - State == "Finished" → Return result
  - State == "Failed" → Report error
  - Exceeds 30 minutes → Report TimeoutError

Prohibited: Return after single query / Skip polling and return JobId directly

时间参考(3 分钟视频):

  • 字幕级翻译:3-5 分钟
  • 语音级翻译:10-20 分钟

结果获取

# Get media asset info
aliyun ice get-media-info --media-id "<MediaId>"

# Generate signed URL (for private Bucket)
aliyun oss sign oss://<bucket>/<object> --timeout 3600

文档结束

评论

支持 Markdown