video-trim
npx skills add https://github.com/infquest/vibe-ops-plugin --skill video-trim
Agent 安装分布
Skill 文档
Video Trimmer
è£åªè§é¢çæ®µï¼æ¯æå缩ãé³é¢å¤çåè¾åºæ ¼å¼éæ©ã
Usage
When the user wants to trim a video: $ARGUMENTS
Instructions
ä½ æ¯ä¸ä¸ªè§é¢è£åªå©æï¼ä½¿ç¨ ffmpeg 帮å©ç¨æ·è£åªè§é¢ã请æä»¥ä¸æ¥éª¤æä½ï¼
Step 1: è·åè¾å ¥æä»¶
å¦æç¨æ·æ²¡ææä¾è¾å ¥æä»¶è·¯å¾ï¼è¯¢é®ä»ä»¬æä¾ä¸ä¸ªã
éªè¯æä»¶åå¨å¹¶è·åä¿¡æ¯ï¼
ffprobe -v error -show_entries format=duration,size,bit_rate -show_entries stream=codec_name,width,height,r_frame_rate -of json "$INPUT_FILE"
åç¨æ·å±ç¤ºï¼
- æä»¶æ¶é¿
- å辨çï¼å¦ææ¯è§é¢ï¼
- ç¼ç ä¿¡æ¯
- æä»¶å¤§å°
Step 2: 询é®ç¨æ·è£åªé ç½®
â ï¸ å¿ é¡»ï¼ä½ å¿ é¡»ä½¿ç¨ AskUserQuestion å·¥å ·è¯¢é®ç¨æ·çå好ï¼ç¶ååæ§è¡ä»»ä½ ffmpeg å½ä»¤ãä¸è¦è·³è¿è¿ä¸æ¥ææ ¹æ®ç¨æ·çåå§è¯·æ±ååºå设ãå³ä½¿ç¨æ·æä¾äºä¸äºåæ°ï¼å¦å¼å§/ç»ææ¶é´ï¼ï¼ä½ ä»ç¶å¿ 须询é®å缩ãé³é¢å¤ççé项ã
ä½¿ç¨ AskUserQuestion å·¥å ·æ¶éç¨æ·å好ï¼
-
å¼å§æ¶é´ï¼ä»ä»ä¹æ¶é´å¼å§ï¼ï¼æ ¼å¼ï¼HH:MM:SS æç§æ°ï¼
- è®©ç¨æ·æå¨è¾å ¥
-
ç»ææ¶é´ï¼å¨åªéç»æï¼
- é项ï¼
- “æå®ç»ææ¶é´”
- “æå®æç»æ¶é¿”
- “è£åªå°è§é¢æ«å°¾”
- é项ï¼
-
åç¼©è®¾ç½®ï¼æ¯å¦å缩è¾åºæä»¶ï¼
- é项ï¼
- “ä¸å缩 – ç´æ¥å¤å¶æµï¼æå¿«ï¼æ æï¼(Recommended)”
- “轻度å缩ï¼CRF 23ï¼ç»è´¨å¥½ï¼”
- “ä¸åº¦å缩ï¼CRF 28ï¼å¹³è¡¡ï¼”
- “é«åº¦å缩ï¼CRF 32ï¼æä»¶æ´å°ï¼”
- “èªå®ä¹ CRF å¼”
- é项ï¼
-
é³é¢å¤çï¼å¦ä½å¤çé³é¢ï¼
- é项ï¼
- “ä¿çåå§é³é¢ (Recommended)”
- “å®å ¨ç§»é¤é³é¢”
- “éæ°ç¼ç é³é¢ï¼AAC 128kï¼”
- “éæ°ç¼ç é³é¢ï¼AAC 256kï¼é«è´¨éï¼”
- é项ï¼
-
éå é项ï¼å¤éï¼ï¼éè¦å ¶ä»é项åï¼
- é项ï¼
- “å¨åªåç¹æ·»å æ·¡å ¥/æ·¡åºææ”
- “å¨ä¸ç¹çæç¼©ç¥å¾”
- “å¨å¼å§å¤å¼ºå¶å ³é®å¸§ï¼æ´ç²¾ç¡®çåªåï¼”
- “æ éå ¶ä»é项”
- é项ï¼
-
è¾åºæ ¼å¼ï¼è¾åºä»ä¹æ ¼å¼ï¼
- é项4ä¸è¾å ¥ç¸å (Recommended)”ã”MP4″ã”MKV”ã”WebM”ã”MOV”
-
è¾åºè·¯å¾ï¼ä¿åå°åªéï¼ï¼å»ºè®®é»è®¤ï¼input_trimmed.extï¼
Step 3: æå»º FFmpeg å½ä»¤
æ ¹æ®ç¨æ·éæ©ï¼æå»º ffmpeg å½ä»¤ï¼
æ¶é´é项
# å¼å§æ¶é´
-ss HH:MM:SS
# åºäºæ¶é¿çç»æ
-t DURATION
# åºäºç»ææ¶é´
-to HH:MM:SS
éè¦ï¼å° -ss æ¾å¨ -i ä¹åå¯ä»¥å¿«éå®ä½ï¼è¾å
¥å®ä½ï¼ï¼æ¾å¨ -i ä¹åå¯ä»¥ç²¾ç¡®å°å¸§ï¼æ´æ
¢ä½æ´ç²¾ç¡®ï¼ã
å缩é项
# ä¸åç¼©ï¼æµå¤å¶ï¼- æå¿«
-c copy
# éæ°ç¼ç ï¼å
许å缩ï¼
-c:v libx264 -crf VALUE -preset medium
CRF å¼è¯´æï¼
- 18-23ï¼è§è§æ æå°å¥½ç»è´¨
- 23-28ï¼å¥½å°å¯æ¥åçç»è´¨
- 28-32ï¼è¾ä½ç»è´¨ï¼æä»¶æ´å°
é³é¢é项
# ä¿çåå§ï¼ä½¿ç¨æµå¤å¶ï¼
-c:a copy
# ç§»é¤é³é¢
-an
# éæ°ç¼ç é³é¢
-c:a aac -b:a 128k # æ 256k
éå é项
# æ·¡å
¥/æ·¡åºï¼0.5ç§ï¼
-vf "fade=t=in:st=0:d=0.5,fade=t=out:st=END-0.5:d=0.5"
-af "afade=t=in:st=0:d=0.5,afade=t=out:st=END-0.5:d=0.5"
# 强å¶å¼å§å¤å
³é®å¸§ï¼ä¸ä½¿ç¨æµå¤å¶æ¶ï¼
-force_key_frames "expr:gte(t,0)"
# çæç¼©ç¥å¾
ffmpeg -ss MIDPOINT -i input -vframes 1 -q:v 2 thumbnail.jpg
Step 4: æ§è¡å¹¶æ¥å
- æ§è¡ååç¨æ·å±ç¤ºå®æ´ç ffmpeg å½ä»¤
- æ§è¡å½ä»¤å¹¶æ¾ç¤ºè¿åº¦
- æ¥åæå/失败
- æ¾ç¤ºè¾åºæä»¶è·¯å¾å大å°å¯¹æ¯
å½ä»¤æ¨¡æ¿
# åºç¡è£åªï¼ä½¿ç¨æµå¤å¶ï¼æå¿«ï¼
ffmpeg -ss START -to END -i "INPUT" -c copy "OUTPUT"
# 另鿰ç¼ç çè£åª
ffmpeg -ss START -to END -i "INPUT" -c:v libx264 -crf 23 -c:a aac -b:a 128k "OUTPUT"
# æ é³é¢çè£åª
ffmpeg -ss START -to END -i "INPUT" -c:v copy -an "OUTPUT"
Step 5: éªè¯è¾åº
è£åªå®æåï¼éªè¯è¾åºï¼
ffprobe -v error -show_entries format=duration,size -of json "OUTPUT_FILE"
æ¥åï¼
- è¾åºæ¶é¿æ¯å¦ç¬¦å颿
- æä»¶å¤§å°å¯¹æ¯ï¼åå§ vs è£åªåï¼
- ä»»ä½è¦åæé®é¢
示ä¾äº¤äº
ç¨æ·ï¼å¸®ææè§é¢ä» 1:30 è£åªå° 3:45