video-analyzer
npx skills add https://github.com/ceeon/video-analyzer-skill --skill video-analyzer
Agent 安装分布
Skill 文档
è§é¢å 容åæ
ä¸è½½è§é¢ â å缩 â Files API ä¸ä¼ â Responses API åæã䏿¬¡ API è°ç¨åºå®æ´ç»æã
ä¾èµ
yt-dlpï¼brew install yt-dlpï¼ffmpegï¼brew install ffmpegï¼
æ¥éª¤
1. 读åé ç½®
# ä» ~/.claude/skills/video-analyzer/config/secrets.md 读å
API_KEY="your-api-key-here"
API_URL="https://ark.cn-beijing.volces.com/api/v3/responses"
MODEL="doubao-seed-2-0-pro-260215"
2. è·åè§é¢
æ¬å°æä»¶ï¼ç´æ¥ç¨ã
å¨çº¿è§é¢ï¼Bç«/YouTube çï¼ï¼
yt-dlp -f "bv*+ba/b" -o "/tmp/video-analyzer-%(id)s.%(ext)s" --no-playlist "URL"
Bç«é«æ¸ éè¦ Cookieï¼
yt-dlp --cookies-from-browser chrome -f "bv*+ba/b" -o "/tmp/video-analyzer-%(id)s.%(ext)s" --no-playlist "URL"
3. å缩ï¼è¶ è¿ 100MB æ¶ï¼
ffmpeg -i "è¾å
¥æä»¶" -vf "scale='min(720,iw)':-2" -c:v libx264 -crf 28 -preset fast -c:a aac -b:a 64k -y /tmp/video-analyzer-compressed.mp4
宿µææï¼327MB â 74MBã妿è¿å¤§ï¼å -crf 32 æ -t 600 æªå 10 åéã
4. ä¸ä¼ Files API
curl -s https://ark.cn-beijing.volces.com/api/v3/files \
-H "Authorization: Bearer $API_KEY" \
-F "purpose=user_data" \
-F "file=@/tmp/video-analyzer-compressed.mp4"
è¿å {"id": "file-xxx", "status": "processing"}ï¼æå id å³ file_idã
5. çå¾ æä»¶å¤ç宿
æä»¶ä¸ä¼ åç¶æä¸º processingï¼å¿
é¡»çå¤ç宿è½è°ç¨åæã
| æä»¶å¤§å° | çå¾ æ¶é´ |
|---|---|
| < 30MB | sleep 15 |
| 30-100MB | sleep 45 |
| > 100MB | sleep 60ï¼æè½®è¯¢ç¶æ |
妿è°ç¨åæè¿å OperationDenied.InvalidState 说æè¿æ²¡å¤çå®ï¼åç 15 ç§éè¯ã
6. è°ç¨ Responses API
curl -s "$API_URL" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $API_KEY" \
-d '{
"model": "'"$MODEL"'",
"input": [{
"role": "user",
"content": [
{"type": "input_video", "file_id": "'"$FILE_ID"'"},
{"type": "input_text", "text": "æç¤ºè¯"}
]
}]
}'
å
³é®ï¼ç¨ "file_id" åæ®µå¼ç¨è§é¢ï¼ä¸è¦ç¨ "video_url" ä¼ file_idï¼ä¼æ¥ invalid schemeï¼ã
7. é»è®¤æç¤ºè¯
ä½ æ¯ä¸ä¸ªè§é¢å
容åæå©æãè¯·ææ¶é´çº¿è¯¦ç»æ¢³çè§é¢å
容ï¼è¦æ±ï¼
1. æ æ³¨åç¡®çæ¶é´æ³ [mm:ss]
2. æåææå
³é®ä¿¡æ¯ï¼è®²è§£çç¥è¯ç¹ãåºç°çæåãå¾è¡¨ãå
¬å¼ã人ç©å¨ä½ãåºæ¯åå
3. çæç»æåçå
容ç¬è®°
请ç¨ä¸æè¯¦ç»åçã
ç¨æ·å¯æå®ä¾§éç¹ï¼”éç¹åæä»£ç ”ã”æåå ¬å¼”ã”æ»ç»è§ç¹”ï¼ï¼èå ¥ promptã
8. è§£æååº
ååº output æ°ç»å
å«ä¸¤ç±»ï¼
"type": "reasoning"â æ¨¡åæèè¿ç¨ï¼å¿½ç¥ï¼"type": "message"â æç»ç»æï¼åcontent[].text
for item in result["output"]:
if item["type"] == "message":
for c in item["content"]:
if c["type"] == "output_text":
print(c["text"])
9. æ¸ ç
rm -f /tmp/video-analyzer-*
10. è¾åºæ ¼å¼
æ¿å°åå§åæåï¼æ ¹æ®ç¨æ·æå¾å³å®è¾åºè¯¦ç»ç¨åº¦ï¼
- ç¨æ·è¯´”åæè§é¢”ã”è§é¢ç¬è®°” â ç´æ¥è¾åºå®æ´ç¬è®°
- ç¨æ·è¯´”ç®åæè¿°”ã”讲äºä»ä¹” â ç¨èªå·±çè¯ç²¾ç®æ¦æ¬ï¼ä¸è´´åæ
踩åè®°å½
| é®é¢ | åå | è§£å³ |
|---|---|---|
invalid scheme |
ç¨ video_url ä¼ äº file_id |
æ¹ç¨ file_id åæ®µ |
OperationDenied.InvalidState |
æä»¶è¿å¨ processing | å¤çä¸ä¼å¿åè°ç¨ |
| 429 RequestBurstTooFast | base64 ç´ä¼ 请æ±ä½å¤ªå¤§è§¦åçªåä¿æ¤ | æ¹ç¨ Files API ä¸ä¼ ï¼ä¸è¦ç¨ base64 |
input_file æ¥ not pdf |
input_file ç±»ååªæ¯æ PDF |
è§é¢ç¨ input_video + file_id |
| yt-dlp ä¸è½½ 480p | Bç«é«æ¸ éç»å½ | å --cookies-from-browser chrome |