api-config.json 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. {
  2. "name": "douyin-video-transcript",
  3. "displayName": "抖音视频逐字稿转写",
  4. "description": "输入视频文件、视频 URL 或人工文案,通过 provider 抽象输出统一 transcript.json/txt,供抖音口播爆款拆解使用。",
  5. "category": "douyin",
  6. "version": "0.2.2",
  7. "type": "local-script",
  8. "execution": {
  9. "kind": "command",
  10. "command": "node",
  11. "args": [
  12. "scripts/tools/openclaw-tool-runner.js",
  13. "--tool",
  14. "douyin-video-transcriber.js",
  15. "--result-prefix",
  16. "DOUYIN_TRANSCRIPT_RESULT",
  17. "--",
  18. "--provider",
  19. "{{provider}}",
  20. "--order-id",
  21. "{{orderId}}",
  22. "--aweme-id",
  23. "{{awemeId}}",
  24. "--video-url",
  25. "{{videoUrl}}",
  26. "--douyin-url",
  27. "{{douyinUrl}}",
  28. "--media-url",
  29. "{{mediaUrl}}",
  30. "--file",
  31. "{{file}}",
  32. "--text",
  33. "{{text}}",
  34. "--transcript",
  35. "{{transcript}}",
  36. "--output",
  37. "{{output}}",
  38. "--download-media",
  39. "{{downloadMedia}}",
  40. "--extract-audio",
  41. "{{extractAudio}}",
  42. "--max-download-mb",
  43. "{{maxDownloadMb}}",
  44. "--download-timeout-ms",
  45. "{{downloadTimeoutMs}}",
  46. "--download-idle-timeout-ms",
  47. "{{downloadIdleTimeoutMs}}",
  48. "--language",
  49. "{{language}}",
  50. "--model",
  51. "{{model}}",
  52. "--timestamps",
  53. "{{timestamps}}",
  54. "--duration-ms",
  55. "{{durationMs}}",
  56. "--role-type",
  57. "{{roleType}}",
  58. "--role-num",
  59. "{{roleNum}}",
  60. "--pd",
  61. "{{pd}}",
  62. "--poll-interval-ms",
  63. "{{pollIntervalMs}}",
  64. "--max-polls",
  65. "{{maxPolls}}",
  66. "--ffmpeg-path",
  67. "{{ffmpegPath}}",
  68. "--ffprobe-path",
  69. "{{ffprobePath}}",
  70. "--gateway-base-url",
  71. "{{gatewayBaseUrl}}",
  72. "--gateway-max-duration-ms",
  73. "{{gatewayMaxDurationMs}}"
  74. ],
  75. "cwd": "{{workspaceRoot}}",
  76. "outputParser": { "type": "stdout-prefix-json", "prefix": "DOUYIN_TRANSCRIPT_RESULT=" },
  77. "exitCodes": { "0": "ok | media_resolved | needs_transcription | needs_provider_config | needs_media_processing | transcription_pending | transcription_failed", "1": "error" }
  78. },
  79. "parameters": {
  80. "type": "object",
  81. "required": ["provider", "output"],
  82. "properties": {
  83. "provider": { "type": "string", "enum": ["manual", "openai", "iflytek-ist", "iflytek-gateway", "iflytek-ast", "none", "volcengine"], "default": "none" },
  84. "orderId": { "type": "string", "description": "已有网关转写订单 ID;provider=iflytek-gateway 时可跳过上传直接查询" },
  85. "awemeId": { "type": "string" },
  86. "videoUrl": { "type": "string" },
  87. "douyinUrl": { "type": "string", "description": "抖音分享链接,脚本会先解析视频详情并下载真实媒体" },
  88. "mediaUrl": { "type": "string", "description": "已解析出的真实音频/视频媒体 URL" },
  89. "file": { "type": "string" },
  90. "text": { "type": "string" },
  91. "transcript": { "type": "string" },
  92. "output": { "type": "string" },
  93. "downloadMedia": { "type": "boolean", "default": false, "description": "provider=none 时只解析/下载媒体,不调用 ASR" },
  94. "extractAudio": { "type": "boolean", "default": false, "description": "强制用 ffmpeg 从视频中抽取 16k 单声道 WAV" },
  95. "maxDownloadMb": { "type": "integer", "default": 200, "description": "媒体下载大小上限,单位 MB" },
  96. "downloadTimeoutMs": { "type": "integer", "default": 120000 },
  97. "downloadIdleTimeoutMs": { "type": "integer", "default": 30000 },
  98. "language": { "type": "string", "default": "zh" },
  99. "model": { "type": "string", "default": "gpt-4o-mini-transcribe" },
  100. "timestamps": { "type": "boolean", "default": false },
  101. "durationMs": { "type": "integer", "description": "讯飞 IST 必填,真实音频时长毫秒数" },
  102. "roleType": { "type": "integer", "default": 1, "description": "讯飞 IST 说话人分离:0=关闭,1=通用角色分离,3=声纹角色分离" },
  103. "roleNum": { "type": "integer", "default": 0, "description": "讯飞 IST 说话人数量:0=盲分,1-10=已知人数" },
  104. "pd": { "type": "string", "default": "com", "description": "讯飞 IST 应用领域,默认通用 com" },
  105. "pollIntervalMs": { "type": "integer", "default": 4000 },
  106. "maxPolls": { "type": "integer", "default": 30 },
  107. "ffmpegPath": { "type": "string", "default": "ffmpeg" },
  108. "ffprobePath": { "type": "string", "default": "ffprobe" },
  109. "gatewayBaseUrl": { "type": "string", "default": "https://server.fmode.cn/api/apig/transcription" },
  110. "gatewayMaxDurationMs": {
  111. "type": "integer",
  112. "default": 480000,
  113. "description": "iflytek-gateway 单次转写时长上限,超过时不上传,返回 needs_media_processing。"
  114. }
  115. }
  116. },
  117. "output": {
  118. "type": "object",
  119. "properties": {
  120. "status": { "type": "string" },
  121. "provider": { "type": "string" },
  122. "outputDir": { "type": "string" },
  123. "files": { "type": "array" },
  124. "orderId": { "type": "string" },
  125. "awemeId": { "type": "string" },
  126. "sourceFile": { "type": "string" },
  127. "audioFile": { "type": "string" },
  128. "mediaUrl": { "type": "string" },
  129. "sourceKind": { "type": "string" },
  130. "durationMs": { "type": "integer" },
  131. "textLength": { "type": "integer" },
  132. "segmentCount": { "type": "integer" },
  133. "warningCount": { "type": "integer" }
  134. }
  135. },
  136. "deployment": {
  137. "toolInstallPaths": [
  138. "~/.openclaw/tools/douyin-video-transcriber.js",
  139. "~/.openclaw/workspace/scripts/tools/douyin-video-transcriber.js",
  140. "~/.openclaw/workspace/scripts/tools/openclaw-tool-runner.js"
  141. ]
  142. }
  143. }