{"slug":"imlewc-video-to-subtitle-summary-skill-6c3100","title":"\u89c6\u9891\u8f6c\u5b57\u5e55\u4e0eAI\u603b\u7ed3\u6d41\u7a0b","description":"\u628a\u6296\u97f3\u3001\u5c0f\u7ea2\u4e66\u3001B\u7ad9\u3001YouTube\u94fe\u63a5\u6216\u672c\u5730\u97f3\u89c6\u9891\u8f6c\u6210SRT\u5b57\u5e55\u4e0e\u7eaf\u6587\u672c\uff0c\u518d\u751f\u6210\u6807\u9898\u3001\u6458\u8981\u548c\u8981\u70b9\u3002\u5305\u542b\u4f9d\u8d56\u68c0\u67e5\u3001ASR\u540e\u7aef\u5207\u6362\u3001\u5e73\u53f0\u89e3\u6790\u4e0e\u4e0b\u8f7d\u811a\u672c\uff1b\u9700\u81ea\u5907API Key\u3001FFmpeg\u3001yt-dlp\u7b49\u73af\u5883\u3002","category":"\u9009\u9898\u4e0e\u7814\u7a76","tags":["imlewc","\u9009\u9898\u4e0e\u7814\u7a76"],"author":"imlewc","source_url":"https://github.com/imlewc/video-to-subtitle-summary-skill/blob/cbb4b6e5124fce8a3c448bb813c6aa9599235fb0/SKILL.md","license":"MIT","status":"published","verification":"source_reviewed","verification_notes":"\u5df2\u6838\u5bf9\u539f\u59cb\u4ed3\u5e93\u3001\u56fa\u5b9a\u63d0\u4ea4\u3001\u8bb8\u53ef\u3001\u6280\u80fd\u6b63\u6587\u4e0e\u5305\u7ed3\u6784\uff0c\u5e76\u8865\u5145\u4e2d\u6587\u6267\u884c\u9a8c\u6536\u8bf4\u660e\uff1b\u672a\u8fd0\u884c\u5305\u5185\u811a\u672c\u3002","revision":"0b519d0c8c3241498c8e21d2e561c36c","created_at":"2026-11-02T14:47:08+00:00","updated_at":"2026-11-02T14:47:08+00:00","source_repo":"imlewc/video-to-subtitle-summary-skill","source_path":"SKILL.md","source_commit":"cbb4b6e5124fce8a3c448bb813c6aa9599235fb0","source_updated_at":"2026-11-02T14:46:04+00:00","stars":0,"proxy_score":null,"score":null,"grade":null,"dimensions":{},"evaluation":{},"installs":0,"platforms":[],"formats":[],"category_slug":"research","category_name":"\u9009\u9898\u4e0e\u7814\u7a76","quality":{"review_type":"text_and_package_review","readiness":"requires_setup","reviewed_at":"2026-11-02T14:46:04+00:00","review_summary":"\u6d41\u7a0b\u4e0e\u811a\u672c\u6750\u6599\u8f83\u5b8c\u6574\uff0c\u4f46\u9700\u7528\u6237\u81ea\u5907\u7b2c\u4e09\u65b9API\u4e0e\u672c\u5730\u4f9d\u8d56\uff0c\u4e14\u73af\u5883\u68c0\u67e5\u811a\u672c\u542b\u672a\u66ff\u6362\u5360\u4f4d\u7b26\uff0c\u6267\u884c\u524d\u987b\u5148\u5b8c\u6210\u914d\u7f6e\u4e0e\u5360\u4f4d\u7b26\u66ff\u6362\u3002","cost_notes":"AI Douyin\u6309\u6210\u529f\u89e3\u6790\u6263\u79ef\u5206\u3001TikHub\u4e0e\u706b\u5c71\u5f15\u64ceVC\u5747\u4e3a\u7b2c\u4e09\u65b9\u8ba1\u8d39\u670d\u52a1\uff0c\u4ef7\u683c\u4e0e\u514d\u8d39\u989d\u5ea6\u9700\u7528\u6237\u81ea\u884c\u5230\u5bf9\u5e94\u5e73\u53f0\u786e\u8ba4\uff0c\u672c\u5ba1\u9605\u4e0d\u63d0\u4f9b\u62a5\u4ef7\u3002","source_sha256":"4ea48e55028f251e78cff2d4312d55137803651410d562aa304277b0ea8bd4de","prerequisites":["FFmpeg\uff1bB\u7ad9/YouTube\u9700yt-dlp\uff1b\u5728\u7ebf\u89e3\u6790\u9700jq","\u6296\u97f3/\u5c0f\u7ea2\u4e66/B\u7ad9\u9700AI Douyin API Key\u6216TikHub Token\uff08\u7b2c\u4e09\u65b9\u4ed8\u8d39/\u989d\u5ea6\u670d\u52a1\uff0c\u9700\u7528\u6237\u81ea\u884c\u6ce8\u518c\u786e\u8ba4\uff09","\u672c\u5730ASR\u9700Python 3.9+\u53cafaster-whisper\u3001ctranslate2\uff1b\u6216\u706b\u5c71\u5f15\u64ceVC\u8d26\u53f7\u51ed\u636e","\u53ef\u5199/tmp/video_analysis\u76ee\u5f55"],"checks":["\u73af\u5883\u68c0\u67e5\u811a\u672c\u8f93\u51faOK\uff0c\u4e14ASR_BACKEND\u4e0eVIDEO_INFO_PROVIDER\u53d6\u503c\u5728\u5141\u8bb8\u8303\u56f4\u5185","subtitle.srt\u65f6\u95f4\u8f74\u9012\u589e\u3001\u5e8f\u53f7\u8fde\u7eed\uff0ctext.txt\u4e0e\u5b57\u5e55\u5185\u5bb9\u4e00\u81f4","AI\u6458\u8981\u4e3a200-300\u5b57\uff0c\u6838\u5fc3\u8981\u70b93-5\u6761\uff0c\u6807\u9898\u4e0d\u8d85\u8fc730\u5b57","\u8f93\u51fa\u4e2d\u672a\u6cc4\u9732API Key\u6216Token","\u5728\u7ebf\u89c6\u9891\u6a21\u5f0f\u4e0b\u5217\u51fa\u4e86\u5b9e\u9645\u4f7f\u7528\u7684\u89e3\u6790\u6765\u6e90\u4e0e\u4e0b\u8f7d\u6587\u4ef6\u8def\u5f84"],"limitations":["\u672a\u8fd0\u884c\u4efb\u4f55\u811a\u672c\u6216\u6d4b\u8bd5\uff0c\u65e0\u6cd5\u786e\u8ba4\u4e0b\u8f7d\u3001\u8f6c\u5199\u4e0eAPI\u8c03\u7528\u5728\u5f53\u524d\u73af\u5883\u53ef\u7528","\u5e73\u53f0\u63a5\u53e3\u4e0e\u8fd4\u56de\u5b57\u6bb5\u53ef\u80fd\u53d8\u5316\uff0c\u811a\u672c\u5bf9\u5b57\u6bb5\u7f3a\u5931\u7684\u5bb9\u9519\u672a\u9a8c\u8bc1","faster-whisper\u9996\u6b21\u8fd0\u884c\u9700\u4e0b\u8f7d\u6a21\u578b\uff0c\u8017\u65f6\u4e0e\u78c1\u76d8\u5360\u7528\u672a\u5b9e\u6d4b","YouTube\u5b57\u5e55\u6293\u53d6\u4f9d\u8d56yt-dlp\u7248\u672c\uff0c\u5931\u8d25\u56de\u9000ASR\u7684\u8def\u5f84\u672a\u9a8c\u8bc1"],"issues":["SKILL.md\u73af\u5883\u68c0\u67e5\u811a\u672c\u4f7f\u7528{INPUT_MODE}\u3001{PLATFORM}\u3001{NEEDS_FFMPEG}\u7b49\u5360\u4f4d\u7b26\uff0c\u9700Agent\u81ea\u884c\u66ff\u6362\uff0c\u76f4\u63a5\u590d\u5236\u6267\u884c\u4f1a\u5224\u65ad\u9519\u8bef","\u6b65\u9aa41.5\u5386\u53f2\u4efb\u52a1\u67e5\u8be2\u4e0e\u4e3b\u6d41\u7a0b\u8026\u5408\u8f83\u5f31\uff0c\u4e14\u4f9d\u8d56AI Douyin\u79c1\u6709\u63a5\u53e3\uff0c\u63a5\u53e3\u7a33\u5b9a\u6027\u5f85\u6838\u5b9e","docs/plans/2026-05-22-ai-douyin-credit-proxy-plan.md\u4e3a\u5185\u90e8\u8ba1\u5212\u6587\u6863\uff0c\u4e0e\u7528\u6237\u6267\u884c\u65e0\u76f4\u63a5\u5173\u7cfb\uff0c\u53ef\u80fd\u9020\u6210\u5e72\u6270"],"missing_files":[]},"quality_url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/SHILIU-QUALITY.md","usage_guide":{"task":"\u5c06\u7528\u6237\u63d0\u4f9b\u7684\u77ed\u89c6\u9891\u5e73\u53f0\u94fe\u63a5\u6216\u672c\u5730\u97f3\u89c6\u9891\u6587\u4ef6\u8f6c\u5199\u4e3a\u5b57\u5e55\u6587\u672c\uff0c\u5e76\u57fa\u4e8e\u8f6c\u5199\u5185\u5bb9\u751f\u6210\u6807\u9898\u3001\u6458\u8981\u4e0e\u6838\u5fc3\u8981\u70b9\u3002","inputs":"\u5fc5\u9700\uff1a\u89c6\u9891URL\uff08douyin.com/v.douyin.com\u3001xiaohongshu.com/xhslink.com\u3001bilibili.com/b23.tv\u3001youtube.com/youtu.be\uff09\u6216\u672c\u5730\u97f3\u89c6\u9891\u6587\u4ef6\u8def\u5f84\u3002\u73af\u5883\uff1aFFmpeg\uff1bB\u7ad9/YouTube\u9700yt-dlp\uff1b\u5728\u7ebf\u89e3\u6790\u9700jq\uff1b\u6296\u97f3/\u5c0f\u7ea2\u4e66/B\u7ad9\u9700AI_DOUYIN_API_KEY\u6216TIKHUB_TOKEN\uff1b\u672c\u5730ASR\u9700Python 3.9+\u4e0efaster-whisper\uff0c\u6216\u6539\u7528\u706b\u5c71\u5f15\u64ceVC\u7684BYTEDANCE_VC_TOKEN\u4e0eBYTEDANCE_VC_APPID\u3002","outputs":"\u5b57\u5e55\u6587\u4ef6subtitle.srt\u3001\u7eaf\u6587\u672ctext.txt\u3001AI\u751f\u6210\u6807\u9898\uff08\u4e0d\u8d85\u8fc730\u5b57\uff09\u3001200-300\u5b57\u6458\u8981\u30013-5\u6761\u6838\u5fc3\u8981\u70b9\uff0c\u4ee5\u53ca\u89c6\u9891/\u97f3\u9891\u7b49\u4e2d\u95f4\u6587\u4ef6\u8def\u5f84\u6e05\u5355\u3002","example_input":"\u5e2e\u6211\u628a\u8fd9\u4e2a\u89c6\u9891\u8f6c\u6210\u5b57\u5e55\u5e76\u603b\u7ed3\uff1ahttps://www.bilibili.com/video/BV1xx411c7mD/","example_output":"\u793a\u610f\u7ed3\u6784\uff08\u975e\u771f\u5b9e\u7ed3\u679c\uff09\uff1a## \u89c6\u9891\u5206\u6790\u7ed3\u679c / ### \u89c6\u9891\u4fe1\u606f\uff08\u89c6\u9891ID\u3001\u4f5c\u8005\u3001\u65f6\u957f\uff09/ ### AI\u751f\u6210\u6807\u9898 / ### AI\u6458\u8981 / ### \u6838\u5fc3\u8981\u70b9 1-5 / ### \u751f\u6210\u6587\u4ef6\uff08video.mp4\u3001audio.mp3\u3001subtitle.srt\u3001text.txt \u8def\u5f84\uff09"},"read_url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100","skill_url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/SKILL.md","download_url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/download","install_url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/install","files":[{"path":".env.example","bytes":1033,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/.env.example"},{"path":"LICENSE","bytes":1065,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/LICENSE"},{"path":"README.md","bytes":12019,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/README.md"},{"path":"README_en.md","bytes":10919,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/README_en.md"},{"path":"SHILIU-QUALITY.md","bytes":2267,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/SHILIU-QUALITY.md"},{"path":"SKILL.md","bytes":23159,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/SKILL.md"},{"path":"docs/ai-douyin-setup.md","bytes":2523,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/docs/ai-douyin-setup.md"},{"path":"docs/bytedance-vc-setup.md","bytes":5273,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/docs/bytedance-vc-setup.md"},{"path":"docs/faster-whisper-setup.md","bytes":3966,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/docs/faster-whisper-setup.md"},{"path":"docs/plans/2026-05-22-ai-douyin-credit-proxy-plan.md","bytes":13837,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/docs/plans/2026-05-22-ai-douyin-credit-proxy-plan.md"},{"path":"docs/tikhub-setup.md","bytes":1996,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/docs/tikhub-setup.md"},{"path":"docs/volcengine-console.jpeg","bytes":416549,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/docs/volcengine-console.jpeg"},{"path":"scripts/download_video_candidates.py","bytes":3736,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/scripts/download_video_candidates.py"},{"path":"scripts/download_youtube_subtitles.py","bytes":4951,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/scripts/download_youtube_subtitles.py"},{"path":"scripts/install_faster_whisper.py","bytes":4803,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/scripts/install_faster_whisper.py"},{"path":"scripts/list_ai_douyin_tasks.py","bytes":5298,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/scripts/list_ai_douyin_tasks.py"},{"path":"scripts/transcribe_faster_whisper.py","bytes":8551,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/scripts/transcribe_faster_whisper.py"},{"path":"shiliu-quality.json","bytes":2067,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/shiliu-quality.json"},{"path":"shiliu-source.json","bytes":267,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/shiliu-source.json"},{"path":"tests/test_download_video_candidates.py","bytes":3391,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/tests/test_download_video_candidates.py"},{"path":"tests/test_download_youtube_subtitles.py","bytes":2048,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/tests/test_download_youtube_subtitles.py"},{"path":"tests/test_install_faster_whisper.py","bytes":1988,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/tests/test_install_faster_whisper.py"},{"path":"tests/test_list_ai_douyin_tasks.py","bytes":3204,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/tests/test_list_ai_douyin_tasks.py"},{"path":"tests/test_transcribe_faster_whisper.py","bytes":4293,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/tests/test_transcribe_faster_whisper.py"},{"path":"usage.json","bytes":1125,"url":"https://shiliuai.cn/api/v2/skills/imlewc-video-to-subtitle-summary-skill-6c3100/files/usage.json"}],"content":"---\nname: video-to-subtitle-summary\ndescription: Use when user provides a short video platform URL or local video/audio file and wants subtitles/AI summary, or when user asks to list their own AI Douyin historical tasks. Triggers on v.douyin.com, xhslink.com, bilibili.com, b23.tv, YouTube URLs, local .mp4/.mp3/.wav files, or task history requests.\nargs: <video_url_or_file_path> - \u89c6\u9891\u94fe\u63a5\uff08\u6296\u97f3/\u5c0f\u7ea2\u4e66/B\u7ad9\u7b49\uff09\u6216\u672c\u5730\u89c6\u9891/\u97f3\u9891\u6587\u4ef6\u8def\u5f84\uff08\u5fc5\u9700\uff09\n---\n\n# \u89c6\u9891\u8f6c\u5b57\u5e55\u4e0e AI \u603b\u7ed3\u6280\u80fd\n\n## Overview\n\n\u5c06\u77ed\u89c6\u9891\u5e73\u53f0\uff08\u6296\u97f3\u3001\u5c0f\u7ea2\u4e66\u3001B \u7ad9\u3001YouTube \u7b49\uff09\u89c6\u9891\u6216\u672c\u5730\u89c6\u9891/\u97f3\u9891\u6587\u4ef6\u8f6c\u6362\u4e3a\u5b57\u5e55\u6587\u672c\u5e76\u751f\u6210 AI \u6458\u8981\u3002\n\n**\u6838\u5fc3\u6d41\u7a0b\uff1a**\n- **\u5728\u7ebf\u89c6\u9891\uff1a** \u83b7\u53d6\u89c6\u9891\u4fe1\u606f \u2192 \u4e0b\u8f7d\u89c6\u9891/\u76f4\u63a5\u6293\u5b57\u5e55 \u2192 \u9009\u62e9\u5b57\u5e55\u540e\u7aef \u2192 \u751f\u6210\u5b57\u5e55 \u2192 AI \u603b\u7ed3\n- **\u672c\u5730\u6587\u4ef6\uff1a** \u63d0\u53d6\u97f3\u9891\uff08\u5982\u9700\uff09 \u2192 \u9009\u62e9\u5b57\u5e55\u540e\u7aef \u2192 \u751f\u6210\u5b57\u5e55 \u2192 AI \u603b\u7ed3\n\n\u9ed8\u8ba4\u4f7f\u7528\u672c\u5730 `faster-whisper`\uff0c\u4e5f\u652f\u6301\u901a\u8fc7\u73af\u5883\u53d8\u91cf\u5207\u6362\u5230\u706b\u5c71\u5f15\u64ce VC API\u3002\nYouTube \u4f18\u5148\u4f7f\u7528 `yt-dlp` \u76f4\u63a5\u6293\u53d6\u4eba\u5de5\u5b57\u5e55\u6216\u81ea\u52a8\u5b57\u5e55\uff1b\u53ea\u6709\u6ca1\u6709\u53ef\u7528\u5b57\u5e55\u65f6\uff0c\u624d\u9700\u8981\u4e0b\u8f7d\u97f3\u89c6\u9891\u5e76\u56de\u9000\u5230 ASR\u3002\n\n## When to Use\n\n- \u7528\u6237\u63d0\u4f9b\u77ed\u89c6\u9891\u5e73\u53f0\u94fe\u63a5\uff08\u6296\u97f3\u3001\u5c0f\u7ea2\u4e66\u3001B \u7ad9\u3001YouTube \u7b49\uff09\uff0c\u8981\u6c42\u63d0\u53d6\u5b57\u5e55\u6216\u751f\u6210\u603b\u7ed3\n- \u7528\u6237\u63d0\u4f9b\u672c\u5730\u89c6\u9891/\u97f3\u9891\u6587\u4ef6\u8def\u5f84\uff0c\u8981\u6c42\u8f6c\u5b57\u5e55\u6216\u751f\u6210\u603b\u7ed3\n- \u7528\u6237\u8981\u6c42\u67e5\u770b\u81ea\u5df1\u7684 AI Douyin \u5386\u53f2\u4efb\u52a1\u3001\u6700\u8fd1\u4efb\u52a1\u3001\u4efb\u52a1\u5217\u8868\n- \u9700\u8981\u5c06\u89c6\u9891\u5185\u5bb9\u8f6c\u4e3a\u6587\u5b57\n\n**\u4e0d\u9002\u7528\u4e8e\uff1a** \u5b9e\u65f6\u8bed\u97f3\u8bc6\u522b\u3001\u76f4\u64ad\u5b57\u5e55\n\n## \u5916\u90e8\u4f9d\u8d56\n\n| \u4f9d\u8d56 | \u7528\u9014 | \u5fc5\u9700 |\n| --- | --- | --- |\n| **AI Douyin API Key** | \u63a8\u8350\u7684\u89c6\u9891\u89e3\u6790/\u4e0b\u8f7d\u4ee3\u7406\uff1b\u6ce8\u518c\u540e\u53ef\u7528\u514d\u8d39\u989d\u5ea6\uff0c\u6210\u529f\u89e3\u6790\u4e0b\u8f7d\u76f4\u94fe\u540e\u6263 1 \u79ef\u5206 | \u4ec5\u6296\u97f3/\u5c0f\u7ea2\u4e66/B \u7ad9\u9700\u8981 |\n| **TikHub API** | \u53ef\u9009\u9ad8\u7ea7/\u81ea\u6258\u7ba1\u65b9\u6848\uff1a\u4f7f\u7528\u81ea\u5df1\u7684 TikHub Token \u76f4\u63a5\u89e3\u6790 | \u53ef\u9009 |\n| **Python 3.9+** | \u8fd0\u884c `faster-whisper` helper | \u4ec5 `ASR_BACKEND=faster-whisper` \u65f6\u9700\u8981 |\n| **faster-whisper** | \u672c\u5730\u8bed\u97f3\u8f6c\u6587\u5b57 | \u4ec5 `ASR_BACKEND=faster-whisper` \u65f6\u9700\u8981 |\n| **\u5b57\u8282\u8df3\u52a8 VC API** | \u4e91\u7aef\u8bed\u97f3\u8f6c\u6587\u5b57 | \u4ec5 `ASR_BACKEND=volcengine` \u65f6\u9700\u8981 |\n| **FFmpeg** | \u4ece\u89c6\u9891\u63d0\u53d6\u97f3\u9891 | \u2705\uff08\u97f3\u9891\u6587\u4ef6\u53ef\u8df3\u8fc7\uff09 |\n| **yt-dlp** | \u4e0b\u8f7d B \u7ad9\u89c6\u9891\uff1b\u6293\u53d6 YouTube \u5b57\u5e55 | \u4ec5 B \u7ad9\u6216 YouTube \u9700\u8981 |\n| **jq** | \u89e3\u6790 AI Douyin/TikHub JSON \u54cd\u5e94 | \u5728\u7ebf\u89c6\u9891\u6a21\u5f0f\u9700\u8981 |\n\n## \u73af\u5883\u53d8\u91cf\n\n\u901a\u8fc7\u73af\u5883\u53d8\u91cf\u8bfb\u53d6\uff0c\u652f\u6301\u4ee5\u4e0b\u4efb\u610f\u65b9\u5f0f\u914d\u7f6e\uff1a\n\n**\u65b9\u5f0f\u4e00\uff1a.env \u6587\u4ef6\uff08\u63a8\u8350\uff09** \u2014 \u5728 skill \u76ee\u5f55\u4e0b\u521b\u5efa `.env` \u6587\u4ef6\uff1a\n\n```bash\nASR_BACKEND=\"faster-whisper\"\nVIDEO_INFO_PROVIDER=\"ai-douyin\"\nAI_DOUYIN_API_BASE=\"https://top9.cc\"\nAI_DOUYIN_API_KEY=\"your_ai_douyin_api_key\"\nTIKHUB_TOKEN=\"\"\n\nFW_MODEL_SIZE=\"small\"\nFW_DEVICE=\"auto\"\nFW_COMPUTE_TYPE=\"\"\nFW_PYTHON=\"\"\n\nBYTEDANCE_VC_TOKEN=\"your_token\"\nBYTEDANCE_VC_APPID=\"your_appid\"\n```\n\n**\u65b9\u5f0f\u4e8c\uff1aShell \u914d\u7f6e** \u2014 \u6dfb\u52a0\u5230 `~/.zshrc` \u6216 `~/.bashrc`\uff1a\n\n```bash\nexport ASR_BACKEND=\"faster-whisper\"\nexport VIDEO_INFO_PROVIDER=\"ai-douyin\"\nexport AI_DOUYIN_API_BASE=\"https://top9.cc\"\nexport AI_DOUYIN_API_KEY=\"your_ai_douyin_api_key\"\nexport TIKHUB_TOKEN=\"\"\n\nexport FW_MODEL_SIZE=\"small\"\nexport FW_DEVICE=\"auto\"\nexport FW_COMPUTE_TYPE=\"\"\nexport FW_PYTHON=\"\"\n\nexport BYTEDANCE_VC_TOKEN=\"your_token\"\nexport BYTEDANCE_VC_APPID=\"your_appid\"\n```\n\n\u8bf4\u660e\uff1a\n- `ASR_BACKEND`\uff1a\u53ef\u9009\uff0c\u9ed8\u8ba4 `faster-whisper`\n- `VIDEO_INFO_PROVIDER`\uff1a\u53ef\u9009\uff0c\u9ed8\u8ba4 `ai-douyin`\uff1b\u53ef\u6539\u4e3a `tikhub` \u4f7f\u7528\u81ea\u6709 TikHub Token\n- `AI_DOUYIN_API_BASE` / `AI_DOUYIN_API_KEY`\uff1a\u63a8\u8350\u7684\u89c6\u9891\u89e3\u6790\u4ee3\u7406\uff1b\u6296\u97f3/\u5c0f\u7ea2\u4e66/B \u7ad9\u9700\u8981\uff1bYouTube \u4e0d\u9700\u8981\n- `TIKHUB_TOKEN`\uff1a\u53ef\u9009\u9ad8\u7ea7/\u81ea\u6258\u7ba1\u65b9\u6848\uff1b\u5f53 `VIDEO_INFO_PROVIDER=tikhub` \u65f6\u9700\u8981\n- `FW_MODEL_SIZE` / `FW_DEVICE` / `FW_COMPUTE_TYPE`\uff1a\u4ec5 `faster-whisper` \u540e\u7aef\u4f7f\u7528\n- `FW_PYTHON`\uff1a\u53ef\u9009\uff0c\u6307\u5b9a\u5b89\u88c5\u4e86 `faster-whisper` \u7684 Python\uff1b\u7559\u7a7a\u65f6\u4f18\u5148\u4f7f\u7528\u5b89\u88c5 helper \u521b\u5efa\u7684\u9ed8\u8ba4 venv\uff0c\u518d\u56de\u9000\u7cfb\u7edf `python3`\n- `BYTEDANCE_VC_TOKEN` / `BYTEDANCE_VC_APPID`\uff1a\u4ec5 `volcengine` \u540e\u7aef\u4f7f\u7528\n\n> \u5b89\u88c5\u4e0e\u8fd0\u884c\u65f6\u8bf4\u660e\u89c1 [AI Douyin \u914d\u7f6e\u6307\u5357](./docs/ai-douyin-setup.md)\u3001[TikHub \u7533\u8bf7\u6307\u5357](./docs/tikhub-setup.md)\u3001[faster-whisper \u5b89\u88c5\u6307\u5357](./docs/faster-whisper-setup.md) \u548c [\u706b\u5c71\u5f15\u64ce\u5f00\u901a\u6307\u5357](./docs/bytedance-vc-setup.md)\n\n## \u6267\u884c\u6b65\u9aa4\n\n### \u6b65\u9aa4 0\uff1a\u5224\u65ad\u8f93\u5165\u7c7b\u578b\n\n\u6839\u636e\u7528\u6237\u8f93\u5165\u5224\u65ad\u5904\u7406\u6a21\u5f0f\uff1a\n\n- **\u5728\u7ebf\u89c6\u9891\u6a21\u5f0f**\uff1a\u8f93\u5165\u4e3a URL\n  - **\u6296\u97f3/TikTok**\uff1a`douyin.com`\u3001`v.douyin.com`\u3001`tiktok.com`\n  - **\u5c0f\u7ea2\u4e66**\uff1a`xiaohongshu.com`\u3001`xhslink.com`\n  - **B \u7ad9**\uff1a`bilibili.com`\u3001`b23.tv`\n  - **YouTube**\uff1a`youtube.com`\u3001`youtu.be`\n- **\u672c\u5730\u6587\u4ef6\u6a21\u5f0f**\uff1a\u8f93\u5165\u4e3a\u672c\u5730\u6587\u4ef6\u8def\u5f84\n  - \u672c\u5730**\u89c6\u9891**\u6587\u4ef6\uff08`.mp4`\u3001`.mov`\u3001`.avi`\u3001`.mkv` \u7b49\uff09\u2192 \u4ece\u6b65\u9aa4 3\uff08\u63d0\u53d6\u97f3\u9891\uff09\u5f00\u59cb\n  - \u672c\u5730**\u97f3\u9891**\u6587\u4ef6\uff08`.mp3`\u3001`.wav`\u3001`.m4a`\u3001`.flac` \u7b49\uff09\u2192 \u8df3\u8fc7\u6b65\u9aa4 3\uff0c\u76f4\u63a5\u4ece\u6b65\u9aa4 4\uff08\u8f6c\u5199\uff09\u5f00\u59cb\n\n### \u6b65\u9aa4 0.5\uff1a\u8bfb\u53d6\u540e\u7aef\u914d\u7f6e\n\n\u5148\u8bfb\u53d6 `ASR_BACKEND`\uff0c\u672a\u914d\u7f6e\u65f6\u9ed8\u8ba4\u4f7f\u7528 `faster-whisper`\uff1a\n\n```bash\nSKILL_DIR=\"${SKILL_DIR:-$HOME/.codex/skills/video-to-subtitle-summary}\"\n[ -d \"$SKILL_DIR\" ] || SKILL_DIR=\"$HOME/.claude/skills/video-to-subtitle-summary\"\nENV_FILE=\"$SKILL_DIR/.env\"\n\nread_env() {\n  local key=\"$1\"\n  if [ -f \"$ENV_FILE\" ]; then\n    grep \"^${key}=\" \"$ENV_FILE\" | head -1 | cut -d'=' -f2- | tr -d '\"' | tr -d \"'\"\n  else\n    printenv \"$key\"\n  fi\n}\n\nASR_BACKEND=\"$(read_env ASR_BACKEND)\"\n[ -z \"$ASR_BACKEND\" ] && ASR_BACKEND=\"faster-whisper\"\n\necho \"ASR_BACKEND=$ASR_BACKEND\"\n```\n\n\u652f\u6301\u503c\uff1a\n- `faster-whisper`\n- `volcengine`\n\n### \u6b65\u9aa4 0.6\uff1a\u73af\u5883\u68c0\u67e5\uff08\u5fc5\u987b\u9996\u5148\u6267\u884c\uff09\n\n\u5728\u5f00\u59cb\u4efb\u4f55\u5904\u7406\u4e4b\u524d\uff0c\u5148\u68c0\u67e5\u5f53\u524d\u6a21\u5f0f\u548c\u5f53\u524d\u5b57\u5e55\u540e\u7aef\u9700\u8981\u7684\u4f9d\u8d56\u3002\n\n```bash\nSKILL_DIR=\"${SKILL_DIR:-$HOME/.codex/skills/video-to-subtitle-summary}\"\n[ -d \"$SKILL_DIR\" ] || SKILL_DIR=\"$HOME/.claude/skills/video-to-subtitle-summary\"\nENV_FILE=\"$SKILL_DIR/.env\"\n\nread_env() {\n  local key=\"$1\"\n  if [ -f \"$ENV_FILE\" ]; then\n    grep \"^${key}=\" \"$ENV_FILE\" | head -1 | cut -d'=' -f2- | tr -d '\"' | tr -d \"'\"\n  else\n    printenv \"$key\"\n  fi\n}\n\nASR_BACKEND=\"$(read_env ASR_BACKEND)\"\n[ -z \"$ASR_BACKEND\" ] && ASR_BACKEND=\"faster-whisper\"\nVIDEO_INFO_PROVIDER=\"$(read_env VIDEO_INFO_PROVIDER)\"\n[ -z \"$VIDEO_INFO_PROVIDER\" ] && VIDEO_INFO_PROVIDER=\"ai-douyin\"\nAI_DOUYIN_API_BASE=\"$(read_env AI_DOUYIN_API_BASE)\"\n[ -z \"$AI_DOUYIN_API_BASE\" ] && AI_DOUYIN_API_BASE=\"https://top9.cc\"\nAI_DOUYIN_API_KEY=\"$(read_env AI_DOUYIN_API_KEY)\"\nTIKHUB_TOKEN=\"$(read_env TIKHUB_TOKEN)\"\nBYTEDANCE_VC_TOKEN=\"$(read_env BYTEDANCE_VC_TOKEN)\"\nBYTEDANCE_VC_APPID=\"$(read_env BYTEDANCE_VC_APPID)\"\nFW_PYTHON=\"$(read_env FW_PYTHON)\"\n[ -z \"$FW_PYTHON\" ] && [ -x \"$HOME/.cache/video-to-subtitle-summary/faster-whisper-venv/bin/python\" ] && FW_PYTHON=\"$HOME/.cache/video-to-subtitle-summary/faster-whisper-venv/bin/python\"\n[ -z \"$FW_PYTHON\" ] && FW_PYTHON=\"python3\"\n\nMISSING=\"\"\n\nif [ \"{INPUT_MODE}\" = \"url\" ]; then\n  if [ \"{PLATFORM}\" = \"douyin\" ] || [ \"{PLATFORM}\" = \"xiaohongshu\" ] || [ \"{PLATFORM}\" = \"bilibili\" ]; then\n    if [ \"$VIDEO_INFO_PROVIDER\" = \"ai-douyin\" ]; then\n      [ -z \"$AI_DOUYIN_API_KEY\" ] && MISSING=\"$MISSING AI_DOUYIN_API_KEY\"\n    elif [ \"$VIDEO_INFO_PROVIDER\" = \"tikhub\" ]; then\n      [ -z \"$TIKHUB_TOKEN\" ] && MISSING=\"$MISSING TIKHUB_TOKEN\"\n    else\n      MISSING=\"$MISSING invalid_VIDEO_INFO_PROVIDER\"\n    fi\n  fi\n  if [ \"$VIDEO_INFO_PROVIDER\" = \"ai-douyin\" ] || [ \"$VIDEO_INFO_PROVIDER\" = \"tikhub\" ]; then\n    command -v jq >/dev/null 2>&1 || MISSING=\"$MISSING jq\"\n  fi\n  if [ \"{PLATFORM}\" = \"bilibili\" ] || [ \"{PLATFORM}\" = \"youtube\" ]; then\n    command -v yt-dlp >/dev/null 2>&1 || MISSING=\"$MISSING yt-dlp\"\n  fi\nfi\n\nif [ \"{NEEDS_FFMPEG}\" = \"yes\" ] && [ \"{PLATFORM}\" != \"youtube\" ]; then\n  command -v ffmpeg >/dev/null 2>&1 || MISSING=\"$MISSING ffmpeg\"\nfi\n\nif [ \"$ASR_BACKEND\" = \"faster-whisper\" ]; then\n  command -v \"$FW_PYTHON\" >/dev/null 2>&1 || [ -x \"$FW_PYTHON\" ] || MISSING=\"$MISSING FW_PYTHON\"\n  \"$FW_PYTHON\" - <<'PY' >/dev/null 2>&1 || MISSING=\"$MISSING faster-whisper\"\nimport faster_whisper\nimport ctranslate2\nPY\nelif [ \"$ASR_BACKEND\" = \"volcengine\" ]; then\n  [ -z \"$BYTEDANCE_VC_TOKEN\" ] && MISSING=\"$MISSING BYTEDANCE_VC_TOKEN\"\n  [ -z \"$BYTEDANCE_VC_APPID\" ] && MISSING=\"$MISSING BYTEDANCE_VC_APPID\"\nelse\n  MISSING=\"$MISSING invalid_ASR_BACKEND\"\nfi\n\nif [ -n \"$MISSING\" ]; then\n  echo \"ERROR: \u7f3a\u5c11\u5fc5\u9700\u4f9d\u8d56\u6216\u914d\u7f6e:$MISSING\"\n  echo \"ASR_BACKEND=$ASR_BACKEND VIDEO_INFO_PROVIDER=$VIDEO_INFO_PROVIDER\"\n  echo \"ASR_BACKEND \u53ef\u9009\u503c: faster-whisper / volcengine\"\n  echo \"VIDEO_INFO_PROVIDER \u53ef\u9009\u503c: ai-douyin / tikhub\"\n  exit 1\nelse\n  echo \"OK: \u8fd0\u884c\u4f9d\u8d56\u5df2\u5c31\u7eea (ASR_BACKEND=$ASR_BACKEND)\"\nfi\n```\n\n\u5982\u679c\u68c0\u67e5\u5931\u8d25\uff1a\n- `ASR_BACKEND=faster-whisper`\uff1a\u4f18\u5148\u8fd0\u884c `python3 \"$SKILL_DIR/scripts/install_faster_whisper.py\"`\uff0c\u6216\u53c2\u8003 [docs/faster-whisper-setup.md](./docs/faster-whisper-setup.md)\n- `ASR_BACKEND=volcengine`\uff1a\u53c2\u8003 [docs/bytedance-vc-setup.md](./docs/bytedance-vc-setup.md)\n- `AI_DOUYIN_API_KEY`\uff1a\u6ce8\u518c [AI Douyin](https://top9.cc) \u9886\u53d6\u514d\u8d39\u989d\u5ea6\u5e76\u521b\u5efa API Key\uff1b\u4f59\u989d\u4e0d\u8db3\u65f6\u5145\u503c\u79ef\u5206\uff0c\u6216\u6539\u7528 `VIDEO_INFO_PROVIDER=tikhub` + `TIKHUB_TOKEN`\n\n### \u6b65\u9aa4 1\uff1a\u83b7\u53d6\u89c6\u9891\u4fe1\u606f/\u4e0b\u8f7d\u76f4\u94fe\uff08\u4ec5\u5728\u7ebf\u89c6\u9891\u6a21\u5f0f\uff09\n\n\u6839\u636e URL \u57df\u540d\u8bc6\u522b\u5e73\u53f0\uff1a\n\n| \u5e73\u53f0 | URL \u7279\u5f81 | \u9ed8\u8ba4\u5904\u7406\u65b9\u5f0f |\n| --- | --- | --- |\n| \u6296\u97f3/TikTok | `douyin.com`\u3001`v.douyin.com`\u3001`tiktok.com` | `AI Douyin` \u4ee3\u7406\u89e3\u6790\u4e0b\u8f7d\u76f4\u94fe\uff1b\u53ef\u9009 TikHub |\n| \u5c0f\u7ea2\u4e66 | `xiaohongshu.com`\u3001`xhslink.com` | `AI Douyin` \u4ee3\u7406\u89e3\u6790\u4e0b\u8f7d\u76f4\u94fe\uff1b\u53ef\u9009 TikHub |\n| B \u7ad9 | `bilibili.com`\u3001`b23.tv` | `AI Douyin` \u4ee3\u7406\u89e3\u6790\u4e0b\u8f7d\u76f4\u94fe\uff1b\u5fc5\u8981\u65f6\u53ef\u56de\u9000 `yt-dlp` |\n| YouTube | `youtube.com`\u3001`youtu.be` | \u4e0d\u8c03\u7528 AI Douyin/TikHub\uff0c\u76f4\u63a5\u8fdb\u5165\u6b65\u9aa4 2 \u6293\u5b57\u5e55 |\n\n#### \u9ed8\u8ba4\u63a8\u8350\uff1aAI Douyin \u4ee3\u7406\n\nAI Douyin \u9002\u5408\u4e0d\u60f3\u5355\u72ec\u6ce8\u518c TikHub \u7684\u7528\u6237\u3002\u6ce8\u518c [https://top9.cc](https://top9.cc) \u540e\u9886\u53d6\u514d\u8d39\u989d\u5ea6\u5e76\u521b\u5efa API Key\uff0c\u6210\u529f\u89e3\u6790\u4e0b\u8f7d\u76f4\u94fe\u540e\u6263 1 \u79ef\u5206\uff1b\u5931\u8d25\u4e0d\u6263\u3002\u4f59\u989d\u4e0d\u8db3\u65f6\u63a5\u53e3\u8fd4\u56de HTTP `402` / `insufficient balance`\u3002\n\n```bash\nSKILL_DIR=\"${SKILL_DIR:-$HOME/.codex/skills/video-to-subtitle-summary}\"\n[ -d \"$SKILL_DIR\" ] || SKILL_DIR=\"$HOME/.claude/skills/video-to-subtitle-summary\"\nENV_FILE=\"$SKILL_DIR/.env\"\nread_env() {\n  local key=\"$1\"\n  if [ -f \"$ENV_FILE\" ]; then\n    grep \"^${key}=\" \"$ENV_FILE\" | head -1 | cut -d'=' -f2- | tr -d '\"' | tr -d \"'\"\n  else\n    printenv \"$key\"\n  fi\n}\n\nAI_DOUYIN_API_BASE=\"$(read_env AI_DOUYIN_API_BASE)\"\n[ -z \"$AI_DOUYIN_API_BASE\" ] && AI_DOUYIN_API_BASE=\"https://top9.cc\"\nAI_DOUYIN_API_KEY=\"$(read_env AI_DOUYIN_API_KEY)\"\n\n# API Base \u652f\u6301\u586b https://top9.cc \u6216 https://top9.cc/api/v1\ncase \"$AI_DOUYIN_API_BASE\" in\n  */api/v1) AI_DOUYIN_DOWNLOAD_URL_ENDPOINT=\"$AI_DOUYIN_API_BASE/video/download-url\" ;;\n  */api) AI_DOUYIN_DOWNLOAD_URL_ENDPOINT=\"$AI_DOUYIN_API_BASE/v1/video/download-url\" ;;\n  *) AI_DOUYIN_DOWNLOAD_URL_ENDPOINT=\"${AI_DOUYIN_API_BASE%/}/api/v1/video/download-url\" ;;\nesac\n\ncurl -sS -w '\\n%{http_code}' -X POST \"$AI_DOUYIN_DOWNLOAD_URL_ENDPOINT\" \\\n  -H \"X-API-Key: $AI_DOUYIN_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"$(jq -n --arg url \"{ORIGINAL_URL}\" '{url: $url}')\" \\\n  > /tmp/video_analysis/download_url_response.txt\n\nHTTP_CODE=$(tail -n1 /tmp/video_analysis/download_url_response.txt)\nsed '$d' /tmp/video_analysis/download_url_response.txt > /tmp/video_analysis/download_url.json\n\nif [ \"$HTTP_CODE\" = \"402\" ]; then\n  echo \"ERROR: AI Douyin \u4f59\u989d\u4e0d\u8db3\uff08insufficient balance\uff09\u3002\u8bf7\u5230 https://top9.cc \u8d2d\u4e70\u79ef\u5206\uff0c\u6216\u6539\u7528 VIDEO_INFO_PROVIDER=tikhub + TIKHUB_TOKEN\u3002\"\n  exit 1\nelif [ \"$HTTP_CODE\" = \"401\" ]; then\n  echo \"ERROR: AI Douyin API Key \u7f3a\u5931\u6216\u65e0\u6548\u3002\u8bf7\u68c0\u67e5 AI_DOUYIN_API_KEY\u3002\"\n  exit 1\nelif [ \"$HTTP_CODE\" -lt 200 ] || [ \"$HTTP_CODE\" -ge 300 ]; then\n  echo \"ERROR: AI Douyin \u89e3\u6790\u5931\u8d25 (HTTP $HTTP_CODE)\"\n  cat /tmp/video_analysis/download_url.json\n  exit 1\nfi\n\nVIDEO_URL=$(jq -r '.download_url // empty' /tmp/video_analysis/download_url.json)\nVIDEO_URL_COUNT=$(jq -r '(.download_urls // [.download_url] | map(select(. != null and . != \"\")) | length)' /tmp/video_analysis/download_url.json)\nEXTRACTED_URL=$(jq -r '.extracted_url // empty' /tmp/video_analysis/download_url.json)\nDOWNLOAD_COST=$(jq -r '.cost // 1' /tmp/video_analysis/download_url.json)\n[ -z \"$VIDEO_URL\" ] && echo \"ERROR: \u672a\u8fd4\u56de download_url\" && cat /tmp/video_analysis/download_url.json && exit 1\n```\n\n\u63d0\u53d6\u5173\u952e\u5b57\u6bb5\uff1a\n\n```bash\njq '{download_url, download_urls_count: (.download_urls // [] | length), extracted_url, cost}' /tmp/video_analysis/download_url.json\n```\n\n#### \u53ef\u9009\u89c6\u9891\u63a5\u53e3\u83b7\u53d6\u65b9\u6848\uff1a\u81ea\u6709 TikHub Token\n\n\u5f53 `VIDEO_INFO_PROVIDER=tikhub` \u65f6\uff0c\u4f7f\u7528\u81ea\u5df1\u7684 TikHub Token \u76f4\u63a5\u89e3\u6790\u3002\u6ce8\u610f\u4e0d\u8981\u628a\u771f\u5b9e Token \u5199\u5165\u65e5\u5fd7\u6216\u56de\u590d\u3002\n\n**\u6296\u97f3/TikTok\uff1a**\n\n```bash\ncurl -s -X GET \"https://api.tikhub.io/api/v1/hybrid/video_data?url={ENCODED_URL}&minimal=true\" \\\n  -H \"Authorization: Bearer your_tikhub_api_token\" \\\n  -H \"Accept: application/json\"\n```\n\n\u4f18\u5148\u63d0\u53d6\u65e0\u6c34\u5370\u5730\u5740\uff1a\n\n```bash\njq -r '.data.video_data.nwm_video_url // .data.video.play_addr.url_list[0] // empty'\n```\n\n**\u5c0f\u7ea2\u4e66\uff1a**\n\n```bash\ncurl -s -X GET \"https://api.tikhub.io/api/v1/xiaohongshu/web/get_note_info_v7?share_text={ENCODED_URL}\" \\\n  -H \"Authorization: Bearer your_tikhub_api_token\" \\\n  -H \"Accept: application/json\"\n```\n\n**B \u7ad9\uff1a**\n\n```bash\ncurl -s -X GET \"https://api.tikhub.io/api/v1/bilibili/web/fetch_one_video_v3?url={ENCODED_URL}\" \\\n  -H \"Authorization: Bearer your_tikhub_api_token\" \\\n  -H \"Accept: application/json\"\n```\n\n> B \u7ad9\u5982\u672a\u83b7\u5f97\u53ef\u4e0b\u8f7d\u76f4\u94fe\uff0c\u53ef\u5728\u6b65\u9aa4 2 \u4e2d\u4f7f\u7528 `yt-dlp` \u4e0b\u8f7d\u3002\n\n### \u6b65\u9aa4 1.5\uff1a\u67e5\u8be2\u7528\u6237\u81ea\u5df1\u7684 AI Douyin \u5386\u53f2\u4efb\u52a1\uff08\u6309\u9700\uff09\n\n\u5f53\u7528\u6237\u8981\u6c42\u67e5\u770b\u81ea\u5df1\u7684\u5386\u53f2 task / \u6700\u8fd1\u4efb\u52a1 / \u4efb\u52a1\u5217\u8868\u65f6\uff0c\u8c03\u7528 AI Douyin \u7684 `GET /api/v1/tasks`\u3002\u8be5\u63a5\u53e3\u4f7f\u7528 `X-API-Key` \u8ba4\u8bc1\uff0c\u53ea\u8fd4\u56de\u5f53\u524d API Key \u5bf9\u5e94\u7528\u6237\u81ea\u5df1\u7684\u4efb\u52a1\u3002\n\n```bash\nSKILL_DIR=\"${SKILL_DIR:-$HOME/.codex/skills/video-to-subtitle-summary}\"\n[ -d \"$SKILL_DIR\" ] || SKILL_DIR=\"$HOME/.claude/skills/video-to-subtitle-summary\"\n\npython3 \"$SKILL_DIR/scripts/list_ai_douyin_tasks.py\" \\\n  --page 1 \\\n  --page-size 20\n```\n\n\u53ef\u9009\u7b5b\u9009\uff1a\n\n```bash\npython3 \"$SKILL_DIR/scripts/list_ai_douyin_tasks.py\" --status completed --page 1 --page-size 10\npython3 \"$SKILL_DIR/scripts/list_ai_douyin_tasks.py\" --search \"\u5173\u952e\u8bcd\" --json\n```\n\n\u811a\u672c\u9ed8\u8ba4\u8bfb\u53d6 `$SKILL_DIR/.env` \u6216\u73af\u5883\u53d8\u91cf\u4e2d\u7684 `AI_DOUYIN_API_BASE` / `AI_DOUYIN_API_KEY`\u3002\u8f93\u51fa\u7ed9\u7528\u6237\u65f6\u4e0d\u8981\u5c55\u793a\u771f\u5b9e API Key\u3002\n\n### \u6b65\u9aa4 2\uff1a\u4e0b\u8f7d\u89c6\u9891\uff08\u4ec5\u5728\u7ebf\u89c6\u9891\u6a21\u5f0f\uff09\n\n\u6839\u636e\u5e73\u53f0\u4f7f\u7528\u4e0d\u540c\u7684\u4e0b\u8f7d\u65b9\u5f0f\uff1a\n\n**YouTube\uff08\u4f18\u5148\u76f4\u63a5\u6293\u5b57\u5e55\uff0c\u4e0d\u4e0b\u8f7d\u89c6\u9891\uff09\uff1a**\n\n```bash\nmkdir -p /tmp/video_analysis/{VIDEO_ID}\nSKILL_DIR=\"${SKILL_DIR:-$HOME/.codex/skills/video-to-subtitle-summary}\"\n[ -d \"$SKILL_DIR\" ] || SKILL_DIR=\"$HOME/.claude/skills/video-to-subtitle-summary\"\npython3 \"$SKILL_DIR/scripts/download_youtube_subtitles.py\" \\\n  \"https://www.youtube.com/watch?v={VIDEO_ID}\" \\\n  --output-dir /tmp/video_analysis/{VIDEO_ID} \\\n  --languages zh-Hans,zh-Hant,zh,en\n```\n\n\u8f93\u51fa\u6587\u4ef6\u56fa\u5b9a\u4e3a\uff1a\n- `/tmp/video_analysis/{VIDEO_ID}/subtitle.srt`\n- `/tmp/video_analysis/{VIDEO_ID}/text.txt`\n\n\u5982\u679c\u547d\u4ee4\u63d0\u793a\u6ca1\u6709\u53ef\u7528\u5b57\u5e55\uff0c\u518d\u4f7f\u7528 `yt-dlp` \u4e0b\u8f7d\u97f3\u9891\u6216\u89c6\u9891\uff0c\u5e76\u4ece\u6b65\u9aa4 3 \u7ee7\u7eed\u8d70 `ASR_BACKEND`\u3002\n\n**\u6296\u97f3 / TikTok / \u5c0f\u7ea2\u4e66 / B \u7ad9\uff08\u5df2\u6709 `VIDEO_URL` \u4e0b\u8f7d\u76f4\u94fe\u65f6\uff09\uff1a**\n\n```bash\nmkdir -p /tmp/video_analysis/{VIDEO_ID}\nSKILL_DIR=\"${SKILL_DIR:-$HOME/.codex/skills/video-to-subtitle-summary}\"\n[ -d \"$SKILL_DIR\" ] || SKILL_DIR=\"$HOME/.claude/skills/video-to-subtitle-summary\"\npython3 \"$SKILL_DIR/scripts/download_video_candidates.py\" \\\n  --response-json /tmp/video_analysis/download_url.json \\\n  --output /tmp/video_analysis/{VIDEO_ID}/video.mp4 \\\n  --timeout 30\n```\n\n**B \u7ad9\uff08\u6ca1\u6709\u4e0b\u8f7d\u76f4\u94fe\u65f6\u56de\u9000\uff09\uff1a**\n\n```bash\nmkdir -p /tmp/video_analysis/{BVID}\nyt-dlp -o /tmp/video_analysis/{BVID}/video.mp4 \"https://www.bilibili.com/video/{BVID}/\"\n```\n\n### \u6b65\u9aa4 3\uff1a\u63d0\u53d6\u97f3\u9891\uff08\u672c\u5730\u97f3\u9891\u6587\u4ef6\u53ef\u8df3\u8fc7\uff09\n\n> \u672c\u5730\u6587\u4ef6\u6a21\u5f0f\u4e0b\uff0c\u5982\u679c\u8f93\u5165\u662f\u672c\u5730\u89c6\u9891\u6587\u4ef6\uff0c\u5c06 `{VIDEO_ID}` \u66ff\u6362\u4e3a\u6587\u4ef6\u540d\uff08\u4e0d\u542b\u6269\u5c55\u540d\uff09\uff0c\u8f93\u5165\u8def\u5f84\u66ff\u6362\u4e3a\u5b9e\u9645\u89c6\u9891\u8def\u5f84\u3002\n\n```bash\nffmpeg -i /tmp/video_analysis/{VIDEO_ID}/video.mp4 -q:a 0 -map a -y /tmp/video_analysis/{VIDEO_ID}/audio.mp3\n```\n\n### \u6b65\u9aa4 4\uff1a\u6839\u636e `ASR_BACKEND` \u9009\u62e9\u5b57\u5e55\u540e\u7aef\n\n\u5982\u679c\u5e73\u53f0\u662f YouTube \u4e14\u6b65\u9aa4 2 \u5df2\u6210\u529f\u751f\u6210 `subtitle.srt` \u548c `text.txt`\uff0c\u8df3\u8fc7\u672c\u6b65\u9aa4\uff0c\u76f4\u63a5\u8fdb\u5165\u6b65\u9aa4 5 \u603b\u7ed3\u3002\n\n#### \u65b9\u6848 A\uff1a`ASR_BACKEND=faster-whisper`\uff08\u9ed8\u8ba4\uff09\n\nhelper \u8def\u5f84\uff1a\n\n```bash\n$SKILL_DIR/scripts/transcribe_faster_whisper.py\n```\n\n\u6267\u884c\u547d\u4ee4\uff1a\n\n```bash\nSKILL_DIR=\"${SKILL_DIR:-$HOME/.codex/skills/video-to-subtitle-summary}\"\n[ -d \"$SKILL_DIR\" ] || SKILL_DIR=\"$HOME/.claude/skills/video-to-subtitle-summary\"\nFW_PYTHON=\"${FW_PYTHON:-$HOME/.cache/video-to-subtitle-summary/faster-whisper-venv/bin/python}\"\n[ -x \"$FW_PYTHON\" ] || FW_PYTHON=\"python3\"\n\"$FW_PYTHON\" \"$SKILL_DIR/scripts/transcribe_faster_whisper.py\" \\\n  /tmp/video_analysis/{VIDEO_ID}/audio.mp3 \\\n  --output-dir /tmp/video_analysis/{VIDEO_ID}\n```\n\n\u8bf4\u660e\uff1a\n- helper \u4f1a\u81ea\u52a8\u8bfb\u53d6 `FW_MODEL_SIZE`\u3001`FW_DEVICE`\u3001`FW_COMPUTE_TYPE`\n- \u5f53 `FW_DEVICE=auto` \u65f6\uff0c\u53ea\u6709\u68c0\u6d4b\u5230 NVIDIA/CUDA \u624d\u4f1a\u4f7f\u7528 `device=\"cuda\"`\n- \u8f93\u51fa\u6587\u4ef6\u56fa\u5b9a\u4e3a\uff1a\n  - `/tmp/video_analysis/{VIDEO_ID}/subtitle.srt`\n  - `/tmp/video_analysis/{VIDEO_ID}/text.txt`\n\n#### \u65b9\u6848 B\uff1a`ASR_BACKEND=volcengine`\n\n\u63d0\u4ea4\u4efb\u52a1\uff1a\n\n```bash\nSKILL_DIR=\"${SKILL_DIR:-$HOME/.codex/skills/video-to-subtitle-summary}\"\n[ -d \"$SKILL_DIR\" ] || SKILL_DIR=\"$HOME/.claude/skills/video-to-subtitle-summary\"\nENV_FILE=\"$SKILL_DIR/.env\"\nif [ -f \"$ENV_FILE\" ]; then\n  BYTEDANCE_VC_TOKEN=$(grep \"^BYTEDANCE_VC_TOKEN=\" \"$ENV_FILE\" | cut -d'=' -f2- | tr -d '\"' | tr -d \"'\")\n  BYTEDANCE_VC_APPID=$(grep \"^BYTEDANCE_VC_APPID=\" \"$ENV_FILE\" | cut -d'=' -f2- | tr -d '\"' | tr -d \"'\")\nelse\n  BYTEDANCE_VC_TOKEN=\"$BYTEDANCE_VC_TOKEN\"\n  BYTEDANCE_VC_APPID=\"$BYTEDANCE_VC_APPID\"\nfi\n\ncurl -s -X POST \"https://openspeech.bytedance.com/api/v1/vc/submit?appid=$BYTEDANCE_VC_APPID&language=zh-CN&words_per_line=20&max_lines=2\" \\\n  -H \"Content-Type: audio/mpeg\" \\\n  -H \"Authorization: Bearer;$BYTEDANCE_VC_TOKEN\" \\\n  --data-binary @/tmp/video_analysis/{VIDEO_ID}/audio.mp3\n```\n\n\u8f6e\u8be2\u7ed3\u679c\uff1a\n\n```bash\nSKILL_DIR=\"${SKILL_DIR:-$HOME/.codex/skills/video-to-subtitle-summary}\"\n[ -d \"$SKILL_DIR\" ] || SKILL_DIR=\"$HOME/.claude/skills/video-to-subtitle-summary\"\nENV_FILE=\"$SKILL_DIR/.env\"\nif [ -f \"$ENV_FILE\" ]; then\n  BYTEDANCE_VC_TOKEN=$(grep \"^BYTEDANCE_VC_TOKEN=\" \"$ENV_FILE\" | cut -d'=' -f2- | tr -d '\"' | tr -d \"'\")\n  BYTEDANCE_VC_APPID=$(grep \"^BYTEDANCE_VC_APPID=\" \"$ENV_FILE\" | cut -d'=' -f2- | tr -d '\"' | tr -d \"'\")\nelse\n  BYTEDANCE_VC_TOKEN=\"$BYTEDANCE_VC_TOKEN\"\n  BYTEDANCE_VC_APPID=\"$BYTEDANCE_VC_APPID\"\nfi\n\ncurl -s \"https://openspeech.bytedance.com/api/v1/vc/query?appid=$BYTEDANCE_VC_APPID&id={TASK_ID}\" \\\n  -H \"Authorization: Bearer;$BYTEDANCE_VC_TOKEN\"\n```\n\n\u7ed3\u679c\u5904\u7406\uff1a\n\n```bash\njq -r '.utterances[].text' subtitle.json | tr '\\n' ' ' > /tmp/video_analysis/{VIDEO_ID}/text.txt\n```\n\n\u751f\u6210 SRT\uff1a\n\n```python\nimport json\n\nwith open('subtitle.json', 'r') as f:\n    data = json.load(f)\n\ndef ms_to_srt(ms):\n    h, m, s, millis = ms//3600000, (ms%3600000)//60000, (ms%60000)//1000, ms%1000\n    return f\"{h:02d}:{m:02d}:{s:02d},{millis:03d}\"\n\nwith open('/tmp/video_analysis/{VIDEO_ID}/subtitle.srt', 'w') as f:\n    for i, u in enumerate(data['utterances'], 1):\n        f.write(f\"{i}\\n{ms_to_srt(u['start_time'])} --> {ms_to_srt(u['end_time'])}\\n{u['text']}\\n\\n\")\n```\n\n### \u6b65\u9aa4 5\uff1aAI \u751f\u6210\u603b\u7ed3\n\n\u76f4\u63a5\u7531 Claude \u5b8c\u6210\uff0c\u65e0\u9700\u8c03\u7528\u7b2c\u4e09\u65b9\u603b\u7ed3 API\u3002\n\n\u8bfb\u53d6 `text.txt` \u540e\u751f\u6210\u3002\n\n\u603b\u7ed3\u65f6\u5e94\u4e00\u5e76\u63d0\u4f9b\u4ee5\u4e0b\u4e0a\u4e0b\u6587\uff1a\n- **\u539f\u89c6\u9891\u6807\u9898**\uff1a\u5982\u679c\u662f\u5728\u7ebf\u89c6\u9891\uff0c\u4f18\u5148\u4f7f\u7528\u5e73\u53f0\u8fd4\u56de\u7684\u539f\u59cb\u6807\u9898\u5b57\u6bb5\n  - \u6296\u97f3/TikTok\uff1a\u4f18\u5148 `desc`\n  - \u5c0f\u7ea2\u4e66\uff1a\u4f18\u5148 `title`\n  - B \u7ad9\uff1a\u4f18\u5148 `title`\n- **\u515c\u5e95\u6807\u9898**\uff1a\u5982\u679c\u6ca1\u6709\u660e\u786e\u6807\u9898\uff0c\u53ef\u4f7f\u7528\u6587\u4ef6\u540d\u6216\u89c6\u9891 ID \u4f5c\u4e3a\u53c2\u8003\u6807\u8bc6\n- **\u5b57\u5e55\u8bf4\u660e**\uff1a\u660e\u786e\u544a\u8bc9 Claude\uff0c\u6b63\u6587\u53ef\u80fd\u6765\u81ea YouTube \u5b57\u5e55\u3001\u81ea\u52a8\u5b57\u5e55\u6216\u8bed\u97f3\u8bc6\u522b\uff0c\u53ef\u80fd\u5b58\u5728\u540c\u97f3\u5b57\u3001\u65ad\u53e5\u3001\u4e13\u6709\u540d\u8bcd\u8bc6\u522b\u9519\u8bef\uff1b\u5728\u4e0d\u504f\u79bb\u539f\u610f\u7684\u524d\u63d0\u4e0b\uff0c\u53ef\u4ee5\u7ed3\u5408\u539f\u89c6\u9891\u6807\u9898\u548c\u4e0a\u4e0b\u6587\u505a\u9002\u5ea6\u4fee\u6b63\n\n\u63a8\u8350\u76f4\u63a5\u4f7f\u7528\u5982\u4e0b\u63d0\u793a\u65b9\u5f0f\uff1a\n\n```text\n\u4ee5\u4e0b\u662f\u4e00\u4e2a\u89c6\u9891\u7684\u5206\u6790\u7d20\u6750\uff0c\u8bf7\u57fa\u4e8e\u8fd9\u4e9b\u4fe1\u606f\u751f\u6210\u603b\u7ed3\uff1a\n\n\u539f\u89c6\u9891\u6807\u9898\uff1a{ORIGINAL_TITLE}\n\u6765\u6e90\u5e73\u53f0\uff1a{PLATFORM}\n\u4f5c\u8005\uff1a{AUTHOR}\n\u8bf4\u660e\uff1a\u4e0b\u9762\u7684\u6b63\u6587\u6765\u81ea\u5e73\u53f0\u5b57\u5e55\u3001\u81ea\u52a8\u5b57\u5e55\u6216\u8bed\u97f3\u8bc6\u522b\uff0c\u53ef\u80fd\u5b58\u5728\u5c11\u91cf\u8bc6\u522b\u8bef\u5dee\u3001\u65ad\u53e5\u95ee\u9898\u6216\u4e13\u6709\u540d\u8bcd\u9519\u8bef\u3002\u8bf7\u4ee5\u539f\u89c6\u9891\u6807\u9898\u548c\u4e0a\u4e0b\u6587\u4e3a\u53c2\u8003\uff0c\u5728\u4e0d\u6539\u53d8\u539f\u610f\u7684\u524d\u63d0\u4e0b\u505a\u9002\u5ea6\u4fee\u6b63\uff0c\u518d\u5b8c\u6210\u603b\u7ed3\u3002\n\n\u8bed\u97f3\u8bc6\u522b\u6587\u672c\uff1a\n{TEXT_CONTENT}\n\n\u8bf7\u8f93\u51fa\uff1a\n1. AI\u751f\u6210\u6807\u9898\uff1a\u7b80\u6d01\u6982\u62ec\uff0c\u4e0d\u8d85\u8fc730\u5b57\uff1b\u53ef\u4ee5\u53c2\u8003\u539f\u89c6\u9891\u6807\u9898\uff0c\u4f46\u4e0d\u8981\u673a\u68b0\u7167\u6284\uff0c\u5fc5\u8981\u65f6\u53ef\u6839\u636e\u6b63\u6587\u7ea0\u6b63\u660e\u663e\u9519\u8bef\n2. AI\u6458\u8981\uff1a\u63d0\u70bc\u4e3b\u8981\u89c2\u70b9\u548c\u5173\u952e\u4fe1\u606f\uff0c200-300\u5b57\n3. \u6838\u5fc3\u8981\u70b9\uff1a\u8f93\u51fa3-5\u6761\u7ed3\u6784\u5316\u8981\u70b9\n```\n\n\u5982\u679c\u539f\u89c6\u9891\u6807\u9898\u4e0e\u6b63\u6587\u660e\u663e\u51b2\u7a81\uff1a\n- \u4f18\u5148\u4ee5\u6b63\u6587\u4e3b\u65e8\u4e3a\u51c6\n- \u4fdd\u7559\u201c\u53ef\u80fd\u56e0\u8bed\u97f3\u8bc6\u522b\u5b58\u5728\u8bef\u5dee\u201d\u7684\u5224\u65ad\uff0c\u4e0d\u8981\u51ed\u7a7a\u8865\u5145\u672a\u51fa\u73b0\u7684\u4fe1\u606f\n\n1. **\u6807\u9898**\uff1a\u7b80\u6d01\u6982\u62ec\uff0c\u4e0d\u8d85\u8fc7 30 \u5b57\n2. **\u6458\u8981**\uff1a\u4e3b\u8981\u89c2\u70b9\u548c\u5173\u952e\u4fe1\u606f\uff0c200-300 \u5b57\n3. **\u8981\u70b9**\uff1a\u6838\u5fc3\u89c2\u70b9\u7684\u7ed3\u6784\u5316\u5217\u8868\n\n## \u8f93\u51fa\u683c\u5f0f\n\n```markdown\n## \u89c6\u9891\u5206\u6790\u7ed3\u679c\n\n### \u89c6\u9891\u4fe1\u606f\n\n| \u9879\u76ee | \u5185\u5bb9 |\n| --- | --- |\n| \u89c6\u9891ID | xxx |\n| \u4f5c\u8005 | xxx |\n| \u65f6\u957f | xxx |\n\n### AI\u751f\u6210\u6807\u9898\n\nxxx\n\n### AI\u6458\u8981\n\nxxx\n\n### \u6838\u5fc3\u8981\u70b9\n\n1. xxx\n2. xxx\n\n### \u751f\u6210\u6587\u4ef6\n\n- \u89c6\u9891: /tmp/video_analysis/{ID}/video.mp4\n- \u97f3\u9891: /tmp/video_analysis/{ID}/audio.mp3\n- SRT\u5b57\u5e55: /tmp/video_analysis/{ID}/subtitle.srt\n- \u7eaf\u6587\u672c: /tmp/video_analysis/{ID}/text.txt\n```\n\n## \u5e38\u89c1\u95ee\u9898\n\n| \u95ee\u9898 | \u89e3\u51b3\u65b9\u6848 |\n| --- | --- |\n| **\u7f3a\u5c11\u73af\u5883\u53d8\u91cf** | \u5148\u786e\u8ba4 `ASR_BACKEND`\uff1b\u6296\u97f3/\u5c0f\u7ea2\u4e66/B\u7ad9\u9ed8\u8ba4\u9700\u8981 `AI_DOUYIN_API_KEY`\uff0c\u81ea\u6709 TikHub \u6a21\u5f0f\u9700\u8981 `TIKHUB_TOKEN`\uff1b\u706b\u5c71\u540e\u7aef\u9700\u8981 `BYTEDANCE_VC_TOKEN` \u548c `BYTEDANCE_VC_APPID` |\n| `ASR_BACKEND` \u65e0\u6548 | \u53ea\u652f\u6301 `faster-whisper` \u548c `volcengine` |\n| `faster-whisper` \u5bfc\u5165\u5931\u8d25 | \u6267\u884c `python3 \"$SKILL_DIR/scripts/install_faster_whisper.py\"`\uff0c\u5b89\u88c5 helper \u4f1a\u5148\u6d4b\u901f PyPI \u955c\u50cf\u5e76\u521b\u5efa\u72ec\u7acb venv\uff1b\u81ea\u5b9a\u4e49 venv \u65f6\u8bbe\u7f6e `FW_PYTHON=/path/to/venv/bin/python` |\n| \u706b\u5c71 API \u8ba4\u8bc1\u5931\u8d25 | Authorization \u5fc5\u987b\u662f `Bearer;token`\uff08\u5206\u53f7\u65e0\u7a7a\u683c\uff09 |\n| \u9996\u6b21\u8fd0\u884c\u8f83\u6162 | `faster-whisper` \u9996\u6b21\u4f1a\u4e0b\u8f7d\u6a21\u578b\uff0c\u7b49\u5f85\u4e0b\u8f7d\u5b8c\u6210\u540e\u91cd\u8bd5 |\n| CUDA \u73af\u5883\u4e0d\u53ef\u7528 | `FW_DEVICE=auto` \u4f1a\u81ea\u52a8\u56de\u9000\u5230 CPU\uff1b\u53ea\u6709 NVIDIA/CUDA \u624d\u8d70 GPU |\n| \u89c6\u9891\u4e0b\u8f7d\u5931\u8d25 | AI Douyin \u8fd4\u56de 401 \u65f6\u68c0\u67e5 API Key\uff1b402 \u65f6\u5145\u503c\u79ef\u5206\u6216\u5207\u6362 TikHub\uff1b\u76f4\u94fe\u4e0b\u8f7d\u52a0 `User-Agent`\uff1bB \u7ad9\u53ef\u56de\u9000 `yt-dlp` |\n| FFmpeg \u627e\u4e0d\u5230 | macOS: `brew install ffmpeg` / Linux: `sudo apt install ffmpeg` / Windows: `choco install ffmpeg` |\n| yt-dlp \u627e\u4e0d\u5230 | macOS: `brew install yt-dlp` / \u901a\u7528: `python3 -m pip install -U yt-dlp`\uff08B \u7ad9 / YouTube \u9700\u8981\uff09 |\n","usage":"\u8bfb\u53d6 SKILL.md\uff0c\u5e76\u6309\u9700\u8bfb\u53d6\u914d\u5957\u6587\u4ef6\uff1b\u4e0b\u8f7d ZIP \u83b7\u53d6\u5b8c\u6574\u5305\u3002\u6280\u80fd\u662f\u4efb\u52a1\u65b9\u6cd5\uff0c\u4e0d\u6388\u4e88\u65b0\u589e\u8d26\u6237\u3001\u4ed8\u8d39\u6216\u7cfb\u7edf\u6743\u9650\u3002"}
