视频截取

SKILL前端设计
前端设计 未标注权限 许可证不明确
安装这个技能

视频截取技能用于从 mp4、mov、mkv、webm 等常见格式的视频中精确截取指定时间段,例如"截取前 56 秒""截取 10 到 30 秒""去掉片尾 20 秒"。技能会自动在隔离环境中准备便携版 ffmpeg,无需用户预装任何工具;采用 H.264 + AAC 重编码保证输出时长精确(误差小于 0.1 秒)、播放兼容性好,并自动回读输出时长进行校验。支持自定义画质(CRF 0–51)、指定输出路径与文件名。适合剪辑素材预处理、社交平台投稿片段截取、会议录像节选等场景。

一句话选型结论

按资料字段整理

视频截取是前端设计类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类前端设计 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_3e9bfccb/video-cut
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

前端设计
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_3e9bfccb仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验未标注上游最后核验时间 · 数据更新 1791684415
正文体量14.0 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
出页面与组件

按描述生成页面结构和组件草稿。

调整样式与布局

改间距、配色与响应式布局。

生成设计说明

把设计稿整理成开发能接的说明。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在前端设计场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
视频截取当前 未标注权限 未标注 未标注 未标注 有
前端设计 只读 GitHub 仓库 882.3 万 Codex、Claude、Cursor 有
Vercel 组合模式 联网访问 GitHub 仓库 385.9 万 Codex、Claude、Cursor 有
Vercel React native skills 前端 只读 GitHub 仓库 246.9 万 Codex、Claude、Cursor 有
adapt 搜索 浏览器控制 GitHub 仓库 202.7 万 Codex、Claude、Cursor 有
使用我的浏览器 浏览器控制 GitHub 仓库 184.8 万 Codex、Claude、Cursor 有

SKILL.md 全文

14.0 KB
模型实际读到的说明书原文,来自技能仓库

Video Cut

Turn one unedited long video into a compact, watchable first cut — decisive,
content-aware, and self-verified. Human (you, the model) makes the editorial
decision of WHAT to keep; the bundled scripts do the mechanical precision (boundary
alignment, dead-air reclaim, memory-safe render, self-check).

When to use

  • A raw/unedited video (YouTube URL or local file) needs to become a tighter cut.
  • The ask is "halve it", "cut the boring parts", "make a first/rough cut".
  • NOT for: word-by-word filler micro-surgery, multi-cam B-roll assembly, color/audio
    polish — those are a later P1/P2 polish pass. This skill is P0: validate the
    diagnosis + produce a solid cut.

Dependencies

Activate any environment that has these (do NOT assume a specific conda env name):
- yt-dlp (download), ffmpeg/ffprobe (cut/render/probe) on PATH
- Python with faster-whisper (CPU works: device=cpu, compute_type=int8)
Check first: yt-dlp --version, ffmpeg -version, python -c "import faster_whisper".

Project protocol workflow

Use these durable project files:

work/cut/edit-plan.json          # hand-authored keep/drop decisions only
work/timeline.json               # generated precision ranges + source/program mapping
review/01-cut/cut-summary.md
review/01-cut/timeline-map.png
review/01-cut/boundary-review.mp4
review/01-cut/full-proxy.mp4  # optional whole-program pacing review

Each canonical decision has a stable id, action (keep or drop), start_s,
end_s, reason, and semantic/transcript evidence_refs. Keep decisions chronological;
V1 does not support reordered or duplicated source clips.

Reuse the shared evidence layer rather than transcribing or diagnosing again:

python skills/video-understand/scripts/transcribe.py work/cache/audio16k.wav work/understand/transcript
python skills/video-understand/scripts/analyze.py work/understand/transcript.json work/understand/analysis.json

The existing precision scripts accept the canonical plan. Expand word-safe boundaries,
optionally assign linear varispeed, then generate the shared timeline:

python skills/video-cut/scripts/build_edit.py work/cut/edit-plan.json work/understand/transcript.json work/cache/edit-final.json
python skills/video-cut/scripts/assign_speed.py work/cache/edit-final.json work/understand/transcript.json
python skills/video-understand/scripts/build_timeline.py work/cache/edit-final.json work/timeline.json --fps-num SOURCE_FPS_NUM --fps-den SOURCE_FPS_DEN

Use the exact rational FPS from work/understand/media.json; never round 30000/1001 to
30/1. Review timeline-map.png and the short boundary-review.mp4. Generate
full-proxy.mp4 only when whole-program pacing must be reviewed. Write the result to
cut-summary.md and point the operation check report at that file.

Record the timeline contribution with its required source input, update the operation integer
revision, and set based_on to the exact understanding revision consumed:

"render": {
  "kind": "timeline-transform",
  "input": "../input/original-video.mp4",
  "plan": "timeline.json"
}

The shared delivery renderer encodes the active sequence after all revision checks pass.

Standalone compatibility workflow

The legacy files and commands below remain supported during migration. build_edit.py
accepts both edit_coarse.json and canonical decisions[]; cut_render.py accepts both
edit_final.json and timeline.json; this skill's transcribe.py is a compatibility
wrapper around ../video-understand/scripts/transcribe.py.

Keep all intermediates under work/, deliver to project root:

work/source.mp4            # downloaded original
work/audio16k.wav          # 16k mono audio for whisper
work/transcript.json/.srt  # word-level timestamps
work/analysis.json         # diagnosis (silences/fillers/runs)
work/edit_coarse.json      # *** YOUR editorial decision (hand-written) ***
work/edit_final.json       # expanded tight render segments (generated; carries per-segment speed)
work/selfcheck/            # cut re-transcript + join frames
first_cut.mp4              # THE DELIVERABLE
first_cut_report.md        # edit + self-check report

The pipeline (6 steps)

1. Download

Highest accessible quality + audio. The default player client often fails
(not-available / DRM / sign-in). The reliable fallback is the android client:

yt-dlp --extractor-args "youtube:player_client=android" \
       -o work/source.mp4 "<URL>"

If only a muxed 360p (format 18) is reachable without login, accept it and document
the constraint — HD DASH is frequently DRM/login-gated. Then extract audio:

ffmpeg -y -i work/source.mp4 -ac 1 -ar 16000 work/audio16k.wav

2. Transcribe (word-level)

python scripts/transcribe.py work/audio16k.wav work/transcript [base.en]

Produces work/transcript.json (segments + per-word start/end) and .srt.
faster-whisper, CPU/int8, VAD on, word_timestamps=True.
Non-English: pass a multilingual model + --lang, e.g.
python scripts/transcribe.py work/audio16k.wav work/transcript medium --lang zh
(the .en models are English-only). Verify the language on a short sample first.
Note: Whisper strips most vocalized "um/uh" — they are NOT transcript-measurable,
so filler detection must combine the lexical word-search below with silence-gap
analysis, not rely on the transcript text alone.

3. Diagnose ("see" + "read")

python scripts/analyze.py work/transcript.json work/analysis.json

Surfaces: leading/trailing dead air, inter-word silences ≥0.8s (with the word they
follow), filler counts, wpm, speaking_ratio, near-duplicate repetitions, monologue
runs >40s (ramble candidates).

To see the picture, sample a frame every ~2s into a contact sheet and read it
yourself; confirm scene structure / hunt black or junk frames:

ffmpeg -y -i work/source.mp4 -vf "fps=1/2,scale=240:-1,tile=10x10" -frames:v 1 work/contact.png
ffmpeg -i work/source.mp4 -vf "blackdetect=d=0.1:pic_th=0.98" -an -f null -

For a single static talking-head shot there are no scene cuts — expect this, and
note that the later jump-cuts are normal, not glitches.

4. Decide the cut — write edit_coarse.json BY HAND

This is the editorial core. Read the transcript + analysis, then write a coarse plan
of keep-blocks and drop-spans that tile the entire timeline with no gaps/overlaps,
each with in, out, and a one-line reason. Compress slow preamble to a few
high-value nuggets; keep substance as large blocks; drop clear tangents/rambles.
Preserve chronological order; the canonical V1 timeline rejects reordering.
Aim to roughly halve runtime.
- Format spec + a real worked example: reference/edit_coarse.schema.md.
- Align every block boundary to a sentence/clause end — never start/stop
mid-sentence or on a stammer. Use:
python scripts/inspect_bounds.py work/edit_coarse.json work/transcript.json
It accepts both legacy keep[] and canonical decisions[] plans and prints the words
straddling each boundary so you can nudge them onto clean edges.

5. Expand → auto-speed → render

Turn coarse blocks into tight, dead-air-free render segments, normalize the speaking
pace, then render:

python scripts/build_edit.py   work/edit_coarse.json work/transcript.json work/edit_final.json 1.5
python scripts/assign_speed.py work/edit_final.json   work/transcript.json   # adds per-segment speed
python scripts/cut_render.py    work/edit_final.json   work/source.mp4 first_cut.mp4
  • build_edit.py splits each block at internal pauses > SPLIT_GAP (4th arg, e.g. 1.5s)
    and trims every boundary INTO the silence (LEAD 0.10s / TRAIL 0.30s) so no word is
    clipped and dead air is reclaimed. Lower SPLIT_GAP = tighter but choppier; for a
    slow, deliberate speaker prefer ~1.5, not 0.6 (avoids twitchy micro-cuts).
  • assign_speed.py (auto varispeed) — groups render segments by decision_ref, measures
    the speaking pace of each hand-authored keep decision, and writes one shared speed
    factor plus each segment's resulting out_dur back into edit_final.json. Pace already
    inside the comfortable band stays at 1.0; out-of-band pace moves only to the nearest
    deadband edge. Adjacent decision blocks differ by at most 0.08x to avoid "pumpy" joins.
    It changes pace only — never which content is kept. Read the printed table before rendering:
  • Metric: words/min (English) — auto-switches to chars/min for CJK (zh/ja/ko).
  • Defaults are first-run starting points, not validated constants: deadband 145–185
    WPM and speed clamped to 1.0–1.3. This is speed-up-only: slow decision blocks can
    be tightened, while natural-fast delivery remains at 1.0. Short decision blocks
    (<3.5s / <6 words) are too noisy to measure and inherit the global factor.
  • The rate is measured after dead-air reclaim, so it reads higher than gross WPM and is
    closer to articulation rate. The printed-table review is load-bearing: eyeball it
    and tune deadband to the speaker before rendering, don't trust the defaults blind.
  • Knobs (k=v): mode=segment|global|off (default segment; global=one factor for
    the whole video, off=disable), deadband=lo,hi, min_speed=/max_speed=,
    min_seg=/min_words=, lang=auto|en|cjk. To skip the feature entirely, just don't
    run this step — cut_render.py treats a missing speed as 1.0.
  • cut_render.py uses N separate seeked inputs + concat filter, single re-encode.
    This is mandatory: trimming N times off ONE decoded input makes ffmpeg buffer the
    whole decoded stream (tens of GB for a long video). See reference/pitfalls.md.
    When segments carry a speed, it re-times each input (setpts video / atempo audio)
    and normalizes fps/timebase/sample-rate per input before concat so A/V stays locked;
    with no speed it falls back to the exact original graph.
  • Final comparison: video-edit-compare reads the canonical timeline plus the actual
    final delivery. It projects final pixels back to source time, stretches varispeed clips
    to their source duration, and shows dropped ranges as black.

6. Self-check — do not declare done until this passes

# protocol precision regression check (run from the repository root)
python skills/video-cut/scripts/check_project_protocol.py
# re-transcribe the finished cut
ffmpeg -y -i first_cut.mp4 -ac 1 -ar 16000 work/selfcheck/cut_audio16k.wav
python scripts/transcribe.py work/selfcheck/cut_audio16k.wav work/selfcheck/cut_transcript
# content + filler + boundary check
python scripts/verify_cut.py work/edit_final.json work/transcript.json work/selfcheck/cut_transcript.json
# frame / black / join check (join times use post-speed out_dur, so they stay accurate)
python scripts/selfcheck_frames.py work/edit_final.json first_cut.mp4 work/selfcheck
# A/V sync + no residual dead air
ffprobe -v error -select_streams v:0 -show_entries stream=duration -of csv=p=0 first_cut.mp4
ffprobe -v error -select_streams a:0 -show_entries stream=duration -of csv=p=0 first_cut.mp4
ffmpeg -i first_cut.mp4 -af silencedetect=noise=-32dB:d=1.5 -f null -

Pass thresholds:
| Check | Pass condition |
|---|---|
| Black frames | none |
| Join frames | clean — only natural head-jumps, no black/frozen/torn |
| A/V sync | video vs audio duration within ~1 frame (≈30ms); total ≈ final_duration_s_after_speed when varispeed is on |
| Dead air ≥1.5s | 0 (speaking_ratio should rise markedly) |
| Dropped/dup segment | none — all key content present (difflib ~0.90 is OK; lower
ratio is usually 2nd-pass transcription noise on mumbled speech, not loss — verify
by keyword presence before blaming the cut) |
| Cut-off half-sentences | none — boundaries land in silence / on sentence ends |

Honest filler caveat: paragraph-level cutting will NOT achieve "almost no fillers".
Per-minute density can even rise because the retained substance is conversational.
Report this honestly; word-level filler excision belongs to P1/P2 (and would make a
single-shot talking head visibly choppy).

Finally

Write first_cut_report.md: source summary, what was cut & why, the self-check table,
and any honest caveats (quality ceiling from 360p source, filler density, etc.).
If varispeed was applied, disclose it: how many segments were re-timed and the speed
range
(from assign_speed.py's table / speed_params), so the reader knows the cut is
not 1:1 real-time. Note too that verify_cut.py's filler-per-minute figure reads slightly
higher after speed-up (same words, shorter minutes) — a reporting artifact, not added fillers.

Key principles (the hard-won ones)

  • You decide content; scripts decide frames. Hand-write edit_coarse.json;
    let build_edit.py do precision and assign_speed.py do pace.
  • Speed touches pace, never content. Auto-varispeed gives all render segments from
    one decision_ref the same speed, moves out-of-band pace only to the nearest deadband
    edge, limits adjacent decisions to a 0.08x delta, and clamps output to 1.0–1.3.
    atempo preserves pitch. Review the table; mode=off or skip the step to disable.
  • Never clip a word. Boundaries always fall inside silence.
  • Memory-safe render only (N seeked inputs + concat). Never multi-trim one input.
  • Be decisive. Make reasonable calls and proceed; don't over-ask.
  • Self-check is non-negotiable. Re-transcribe + frame-check before claiming done.
  • See reference/pitfalls.md for the full list of traps and fixes.

常见问题

5 问
答案由本站依据条目字段整理
视频截取怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_3e9bfccb/video-cut。安装方式为未标注。装完刷新技能列表或重开客户端。

视频截取支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

视频截取权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

视频截取收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

视频截取用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 未标注。