关于 compress-video
compress-video 是使用 FFmpeg 压缩视频的技能,支持基于质量的 CRF 模式和指定目标大小的两遍编码。它会先检查源文件、选择编码器和参数,并在编码前等待确认。
主要功能
- 01使用 ffprobe 检查源文件
- 02CRF 或两遍编码
- 03选择 H.264 或 H.265 编码器
- 04计算目标大小所需码率
- 05编码前等待确认
适用场景
- 01缩小视频文件体积
- 02将视频压至指定大小
- 03为注重画质的压缩选择参数
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ gupsammy/ claudest --skill compress-video安装后在 Claude Code 中输入/compress-video确认已加载。
附带文件scripts/calc_bitrate.py
详细介绍
视频压缩
使用基于质量(CRF)或基于大小(2-pass)的编码来压缩视频。
流程
1. 获取输入文件
如果用户没有提供文件路径,请先使用 AskUserQuestion 询问。
2. 探测源文件
ffprobe -v quiet -print_format json -show_streams -show_format "$INPUT"
提取:时长(秒)、文件大小(字节)、现有视频编码格式、音频比特率。如果 ffprobe 失败(找不到文件或文件不是有效视频),请报告错误并停止——不要尝试编码。
3. 根据用户意图确定模式
- CRF 模式(基于质量):用户表示“无损画质”“画质不错”“缩小文件”,或未指定目标大小
- 2-pass 模式(基于大小):用户指定目标(“小于 50MB”“约 20MB”“适合放入 X”)
4. 选择编码格式
H.264 是稳妥的默认选择:设备兼容性广,编码速度快。只有在节省的空间足以弥补较慢的编码速度和较窄的设备支持范围时,才使用 H.265。
- H.265 / libx265:目标大小不超过原始大小的 50%,或用户要求“最大压缩”/“HEVC”
- H.264 / libx264:其他情况——编码更快、设备兼容性更广,是稳妥的默认选择
5. 构建命令
CRF 模式:
ffmpeg -i "$INPUT" -c:v libx264 -crf 23 -c:a copy -movflags +faststart "$OUTPUT"
# CRF scale: 18=near-lossless, 23=default quality, 28=aggressive (visible loss)
# -movflags +faststart moves moov atom to front — enables progressive web playback
2-pass 模式——先计算视频比特率:
python3 ${CLAUDE_PLUGIN_ROOT}/skills/compress-video/scripts/calc_bitrate.py "$INPUT" --target-mb "$TARGET_MB"
# Outputs: VIDEO_BITRATE_KBPS (integer)
# Formula: (target_mb * 8192 / duration_s) - audio_bitrate_kbps
# Typical audio budget: 128 kbps
# Exit 1 = target too small (bitrate would go negative); report the error and ask for a larger target before retrying.
# Pass 1 — video analysis only, no output file:
ffmpeg -y -i "$INPUT" -c:v libx264 -b:v ${VIDEO_BITRATE_KBPS}k -pass 1 -an -f null /dev/null
# Pass 2 — final encode with audio:
ffmpeg -i "$INPUT" -c:v libx264 -b:v ${VIDEO_BITRATE_KBPS}k -pass 2 \
-c:a aac -b:a 128k -movflags +faststart "$OUTPUT"
6. 与用户确认
显示:输入文件大小、所选编码格式、模式(CRF 值或计算出的比特率)、输出路径。运行前等待用户批准。
7. 执行并报告
完成后报告:输入大小 → 输出大小、压缩率(例如,“73.2 MB → 18.4 MB,压缩率为 75%”)。
关键决策
- 在 CRF 模式下,使用
-c:a copy无损保留音频。在 2-pass 模式下,必须重新编码音频(AAC 128k),因为第 1 遍只处理视频——不会处理音频流。 - 如果输入文件已经是 H.264,而用户只想剪辑或重新封装,请改为推荐使用
convert-video和-c copy——即时完成且无损。 - 对于 H.265 输出,替换为
libx265,并添加-tag:v hvc1以兼容 Apple 设备。 - 2-pass 编码完成后,清理
ffmpeg2pass-0.log和ffmpeg2pass-0.log.mbtree。
评论
支持 Markdown