It helps you download long videos from YouTube, analyzes the video to provide a "long-to-short" editing proposal, and automatically adds bilingual Chinese and English subtitles.
#!/bin/bash
##############################################################################
# YouTube Clipper - Claude Code Skill 安装脚本
#
# 功能:
# 1. 自动创建 Skill 目录
# 2. 复制所有必要文件
# 3. 安装 Python 依赖
# 4. 检测系统依赖(yt-dlp、FFmpeg)
#
# 使用方法:
# bash install_as_skill.sh
##############################################################################
set -e # 遇到错误立即退出
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 打印函数
print_info() {
echo -e "${BLUE}ℹ️ $1${NC}"
}
print_success() {
echo -e "${GREEN}✅ $1${NC}"
}
print_warning() {
echo -e "${YELLOW}⚠️ $1${NC}"
}
print_error() {
echo -e "${RED}❌ $1${NC}"
}
print_header() {
echo ""
echo "========================================"
echo "$1"
echo "========================================"
echo ""
}
# 检查命令是否存在
command_exists() {
command -v "$1" >/dev/null 2>&1
}
# 主函数
main() {
print_header "YouTube Clipper - Claude Code Skill 安装"
# 1. 确定 Skill 目录
SKILL_DIR="$HOME/.claude/skills/youtube-clipper"
print_info "目标目录: $SKILL_DIR"
# 2. 检查是否已存在
if [ -d "$SKILL_DIR" ]; then
print_warning "Skill 目录已存在: $SKILL_DIR"
read -p "是否覆盖安装?(y/N) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
print_info "安装已取消"
exit 0
fi
print_info "删除旧版本..."
rm -rf "$SKILL_DIR"
fi
# 3. 创建目录
print_info "创建 Skill 目录..."
mkdir -p "$SKILL_DIR"
print_success "目录已创建"
# 4. 复制文件
print_info "复制项目文件..."
# 获取当前脚本所在目录(即项目根目录)
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# 复制所有必要文件
cp -r "$SCRIPT_DIR"/* "$SKILL_DIR/"
# 排除不需要的文件
if [ -d "$SKILL_DIR/.git" ]; then
rm -rf "$SKILL_DIR/.git"
fi
if [ -d "$SKILL_DIR/venv" ]; then
rm -rf "$SKILL_DIR/venv"
fi
if [ -d "$SKILL_DIR/__pycache__" ]; then
rm -rf "$SKILL_DIR/__pycache__"
fi
if [ -d "$SKILL_DIR/youtube-clips" ]; then
rm -rf "$SKILL_DIR/youtube-clips"
fi
if [ -f "$SKILL_DIR/.env" ]; then
rm "$SKILL_DIR/.env"
fi
print_success "文件复制完成"
# 5. 检查 Python
print_info "检查 Python 环境..."
if ! command_exists python3; then
print_error "未找到 Python 3,请先安装 Python 3.8+"
exit 1
fi
PYTHON_VERSION=$(python3 --version)
print_success "Python 已安装: $PYTHON_VERSION"
# 6. 检查 pip
if ! command_exists pip3 && ! command_exists pip; then
print_error "未找到 pip,请先安装 pip"
exit 1
fi
print_success "pip 已安装"
# 7. 安装 Python 依赖
print_info "安装 Python 依赖..."
cd "$SKILL_DIR"
# 尝试使用 pip3,如果不存在则使用 pip
if command_exists pip3; then
pip3 install -q yt-dlp pysrt python-dotenv
else
pip install -q yt-dlp pysrt python-dotenv
fi
print_success "Python 依赖安装完成(yt-dlp、pysrt、python-dotenv)"
# 8. 检查 yt-dlp
print_info "检查 yt-dlp..."
if command_exists yt-dlp; then
YT_DLP_VERSION=$(yt-dlp --version)
print_success "yt-dlp 已安装: $YT_DLP_VERSION"
else
print_warning "yt-dlp 命令行工具未安装"
print_info "安装方法:"
print_info " macOS: brew install yt-dlp"
print_info " Ubuntu: sudo apt-get install yt-dlp"
print_info " 或: pip3 install -U yt-dlp"
fi
# 9. 检查 FFmpeg(关键:需要 libass 支持)
print_header "检查 FFmpeg(字幕烧录需要)"
FFMPEG_FOUND=false
LIBASS_SUPPORTED=false
# 检查 ffmpeg-full(macOS 推荐)
if [ -f "/opt/homebrew/opt/ffmpeg-full/bin/ffmpeg" ]; then
print_success "ffmpeg-full 已安装(Apple Silicon)"
FFMPEG_FOUND=true
LIBASS_SUPPORTED=true
elif [ -f "/usr/local/opt/ffmpeg-full/bin/ffmpeg" ]; then
print_success "ffmpeg-full 已安装(Intel Mac)"
FFMPEG_FOUND=true
LIBASS_SUPPORTED=true
elif command_exists ffmpeg; then
FFMPEG_VERSION=$(ffmpeg -version | head -n 1)
print_success "FFmpeg 已安装: $FFMPEG_VERSION"
FFMPEG_FOUND=true
# 检查 libass 支持
if ffmpeg -filters 2>&1 | grep -q "subtitles"; then
print_success "FFmpeg 支持 libass(字幕烧录可用)"
LIBASS_SUPPORTED=true
else
print_warning "FFmpeg 不支持 libass(字幕烧录不可用)"
fi
fi
if [ "$FFMPEG_FOUND" = false ]; then
print_error "FFmpeg 未安装"
print_info "安装方法:"
print_info " macOS: brew install ffmpeg-full # 推荐,包含 libass"
print_info " Ubuntu: sudo apt-get install ffmpeg libass-dev"
elif [ "$LIBASS_SUPPORTED" = false ]; then
print_warning "FFmpeg 缺少 libass 支持,字幕烧录功能将不可用"
print_info "解决方法(macOS):"
print_info " brew uninstall ffmpeg"
print_info " brew install ffmpeg-full"
fi
# 10. 创建 .env 文件
print_header "配置环境变量"
if [ -f "$SKILL_DIR/.env.example" ]; then
print_info "创建 .env 文件..."
cp "$SKILL_DIR/.env.example" "$SKILL_DIR/.env"
print_success ".env 文件已创建"
echo ""
print_info "配置文件位置: $SKILL_DIR/.env"
print_info "如需自定义配置,可编辑:"
print_info " nano $SKILL_DIR/.env"
print_info " 或"
print_info " code $SKILL_DIR/.env"
else
print_warning "未找到 .env.example 文件"
fi
# 11. 完成
print_header "安装完成!"
print_success "YouTube Clipper 已成功安装为 Claude Code Skill"
echo ""
print_info "安装位置: $SKILL_DIR"
echo ""
# 检查依赖状态
if [ "$FFMPEG_FOUND" = false ] || [ "$LIBASS_SUPPORTED" = false ]; then
print_warning "系统依赖不完整,部分功能可能不可用"
echo ""
fi
print_info "使用方法:"
print_info " 在 Claude Code 中输入:"
print_info " \"剪辑这个 YouTube 视频:https://youtube.com/watch?v=VIDEO_ID\""
echo ""
print_info "详细文档:"
print_info " - Skill 使用指南: $SKILL_DIR/SKILL.md"
print_info " - 项目文档: $SKILL_DIR/README.md"
print_info " - 技术说明: $SKILL_DIR/TECHNICAL_NOTES.md"
echo ""
print_success "祝使用愉快! 🎉"
echo ""
}
# 错误处理
trap 'print_error "安装过程中发生错误"; exit 1' ERR
# 运行主函数
main