{
  "schemaVersion": "1.0",
  "item": {
    "slug": "video-audio-replace",
    "name": "video-audio-replace",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/synthere/video-audio-replace",
    "canonicalUrl": "https://clawhub.ai/synthere/video-audio-replace",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/video-audio-replace",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=video-audio-replace",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "generate_subtitles.py",
      "replace.py",
      "SKILL.md",
      "video-audio-replace.sh",
      "_meta.json"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/video-audio-replace"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/video-audio-replace",
    "agentPageUrl": "https://openagent3.xyz/skills/video-audio-replace/agent",
    "manifestUrl": "https://openagent3.xyz/skills/video-audio-replace/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/video-audio-replace/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Video Audio Replace",
        "body": "Replace a video's original audio with TTS-generated voice while maintaining precise timing alignment. Also supports generating subtitles from video using Whisper."
      },
      {
        "title": "Step 1: Generate subtitles from video (optional)",
        "body": "If you don't have an SRT file, generate one from the video using the included script:\n\n# Generate subtitles from video (uses faster-whisper, free, local)\ngenerate_subtitles.py video.mp4 -o subtitles.srt -l zh\n\nOr manually with Python:\n\n# Using faster-whisper (recommended, local, free)\npip install faster-whisper srt\n\npython3 << 'EOF'\nfrom faster_whisper import WhisperModel\nimport srt\nfrom datetime import timedelta\n\nmodel = WhisperModel(\"base\", device=\"cpu\", compute_type=\"int8\")\nsegments, info = model.transcribe(\"input_video.mp4\", language=\"zh\")\n\n# Generate SRT\ndef format_time(seconds):\n    td = timedelta(seconds=seconds)\n    return f\"{td.seconds//3600:02d}:{(td.seconds%3600)//60:02d}:{td.seconds%60:02d},{td.microseconds//1000:03d}\"\n\nsrt_content = \"\"\nfor i, seg in enumerate(segments, 1):\n    start = format_time(seg.start)\n    end = format_time(seg.end)\n    srt_content += f\"{i}\\n{start} --> {end}\\n{seg.text.strip()}\\n\\n\"\n\nwith open(\"subtitles.srt\", \"w\", encoding=\"utf-8\") as f:\n    f.write(srt_content)\nEOF"
      },
      {
        "title": "Step 2: Replace audio with TTS",
        "body": "Use the generated SRT to create a new video with TTS voice."
      },
      {
        "title": "When to use",
        "body": "Dubbing videos with AI-generated voice\nConverting subtitle files to voice-over\nCreating multilingual video versions"
      },
      {
        "title": "API Keys (choose one)",
        "body": "ElevenLabs: Set ELEVENLABS_API_KEY environment variable\nEdge TTS (free, no key needed): Use --engine edge"
      },
      {
        "title": "System dependencies",
        "body": "ffmpeg\nsox (optional, for advanced processing)"
      },
      {
        "title": "Basic usage (ElevenLabs)",
        "body": "video-audio-replace --video input.mp4 --srt subtitles.srt --output output.mp4 --voice \"Liam\""
      },
      {
        "title": "Using Edge TTS (free, no API key)",
        "body": "video-audio-replace --video input.mp4 --srt subtitles.srt --output output.mp4 --engine edge --voice \"zh-CN-YunxiNeural\""
      },
      {
        "title": "Options",
        "body": "OptionDescriptionDefault--videoInput video fileRequired--srtSRT subtitle fileRequired--outputOutput video fileinput_tts.mp4--voiceVoice ID or nameLiam (ElevenLabs)--engineTTS engine: elevenlabs, edgeelevenlabs--speed-rangeSpeed adjustment range0.85-1.15"
      },
      {
        "title": "English voice (ElevenLabs)",
        "body": "video-audio-replace --video 2028.mp4 --srt 2028.srt --output 2028_final.mp4 --voice \"Liam\""
      },
      {
        "title": "Chinese voice (Edge TTS)",
        "body": "video-audio-replace --video video.mp4 --srt subs.srt --output result.mp4 --engine edge --voice \"zh-CN-YunxiNeural\""
      },
      {
        "title": "How it works",
        "body": "Extract original audio from video\nSplit audio into segments based on subtitle timestamps\nGenerate TTS audio for each subtitle segment\nAdjust TTS speed (within 0.85-1.15x) to match original segment duration\nAdd silence padding to fill any remaining time gap\nMerge all segments preserving original timing gaps\nReplace video audio with aligned TTS audio"
      },
      {
        "title": "ElevenLabs (require API key)",
        "body": "Liam - Energetic male (recommended)\nSarah - Professional female\nBrian - Deep resonant male\nRun curl with your API key to list all voices"
      },
      {
        "title": "Edge TTS (free)",
        "body": "Chinese: zh-CN-XiaoxiaoNeural, zh-CN-YunxiNeural, zh-CN-YunyangNeural\nEnglish: en-US-JennyNeural, en-US-GuyNeural\nMany more languages available"
      }
    ],
    "body": "Video Audio Replace\n\nReplace a video's original audio with TTS-generated voice while maintaining precise timing alignment. Also supports generating subtitles from video using Whisper.\n\nFull Workflow\nStep 1: Generate subtitles from video (optional)\n\nIf you don't have an SRT file, generate one from the video using the included script:\n\n# Generate subtitles from video (uses faster-whisper, free, local)\ngenerate_subtitles.py video.mp4 -o subtitles.srt -l zh\n\n\nOr manually with Python:\n\n# Using faster-whisper (recommended, local, free)\npip install faster-whisper srt\n\npython3 << 'EOF'\nfrom faster_whisper import WhisperModel\nimport srt\nfrom datetime import timedelta\n\nmodel = WhisperModel(\"base\", device=\"cpu\", compute_type=\"int8\")\nsegments, info = model.transcribe(\"input_video.mp4\", language=\"zh\")\n\n# Generate SRT\ndef format_time(seconds):\n    td = timedelta(seconds=seconds)\n    return f\"{td.seconds//3600:02d}:{(td.seconds%3600)//60:02d}:{td.seconds%60:02d},{td.microseconds//1000:03d}\"\n\nsrt_content = \"\"\nfor i, seg in enumerate(segments, 1):\n    start = format_time(seg.start)\n    end = format_time(seg.end)\n    srt_content += f\"{i}\\n{start} --> {end}\\n{seg.text.strip()}\\n\\n\"\n\nwith open(\"subtitles.srt\", \"w\", encoding=\"utf-8\") as f:\n    f.write(srt_content)\nEOF\n\nStep 2: Replace audio with TTS\n\nUse the generated SRT to create a new video with TTS voice.\n\nWhen to use\nDubbing videos with AI-generated voice\nConverting subtitle files to voice-over\nCreating multilingual video versions\nRequirements\nAPI Keys (choose one)\nElevenLabs: Set ELEVENLABS_API_KEY environment variable\nEdge TTS (free, no key needed): Use --engine edge\nSystem dependencies\nffmpeg\nsox (optional, for advanced processing)\nUsage\nBasic usage (ElevenLabs)\nvideo-audio-replace --video input.mp4 --srt subtitles.srt --output output.mp4 --voice \"Liam\"\n\nUsing Edge TTS (free, no API key)\nvideo-audio-replace --video input.mp4 --srt subtitles.srt --output output.mp4 --engine edge --voice \"zh-CN-YunxiNeural\"\n\nOptions\nOption\tDescription\tDefault\n--video\tInput video file\tRequired\n--srt\tSRT subtitle file\tRequired\n--output\tOutput video file\tinput_tts.mp4\n--voice\tVoice ID or name\tLiam (ElevenLabs)\n--engine\tTTS engine: elevenlabs, edge\televenlabs\n--speed-range\tSpeed adjustment range\t0.85-1.15\nExamples\nEnglish voice (ElevenLabs)\nvideo-audio-replace --video 2028.mp4 --srt 2028.srt --output 2028_final.mp4 --voice \"Liam\"\n\nChinese voice (Edge TTS)\nvideo-audio-replace --video video.mp4 --srt subs.srt --output result.mp4 --engine edge --voice \"zh-CN-YunxiNeural\"\n\nHow it works\nExtract original audio from video\nSplit audio into segments based on subtitle timestamps\nGenerate TTS audio for each subtitle segment\nAdjust TTS speed (within 0.85-1.15x) to match original segment duration\nAdd silence padding to fill any remaining time gap\nMerge all segments preserving original timing gaps\nReplace video audio with aligned TTS audio\nAvailable Voices\nElevenLabs (require API key)\nLiam - Energetic male (recommended)\nSarah - Professional female\nBrian - Deep resonant male\nRun curl with your API key to list all voices\nEdge TTS (free)\nChinese: zh-CN-XiaoxiaoNeural, zh-CN-YunxiNeural, zh-CN-YunyangNeural\nEnglish: en-US-JennyNeural, en-US-GuyNeural\nMany more languages available"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/synthere/video-audio-replace",
    "publisherUrl": "https://clawhub.ai/synthere/video-audio-replace",
    "owner": "synthere",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/video-audio-replace",
    "downloadUrl": "https://openagent3.xyz/downloads/video-audio-replace",
    "agentUrl": "https://openagent3.xyz/skills/video-audio-replace/agent",
    "manifestUrl": "https://openagent3.xyz/skills/video-audio-replace/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/video-audio-replace/agent.md"
  }
}