一个智能的字幕搜索和下载系统,支持手动搜索和自动监控下载。
- 通过IMDB API搜索电影信息
- 显示电影海报、年份、评分、简介等详细信息
- 支持模糊搜索和精确匹配
- 通过OpenSubtitles API搜索字幕
- 支持多语言字幕(中文、英文等)
- 按下载量和评分智能排序
- 一键下载字幕文件
- 使用DeepSeek AI简化复杂电影文件名
- 自动翻译英语字幕为中文
- 智能识别电影信息
- 监控指定目录的新增电影文件
- 自动搜索并下载匹配的字幕
- 保持字幕和电影文件在同一目录
- 自动重命名字幕文件
- 完整的操作日志记录
- 下载历史管理
- 错误追踪和调试信息
- Express.js - Web框架
- Chokidar - 文件监控
- Axios - HTTP客户端
- fs-extra - 文件系统操作
- React 18 - UI框架
- TypeScript - 类型安全
- Tailwind CSS - 样式框架
- Lucide React - 图标库
- IMDB API - 电影信息搜索
- OpenSubtitles API - 字幕搜索下载
- DeepSeek API - AI智能处理
复制环境变量文件:
cp env.example .env编辑 .env 文件,配置必要的API密钥:
# TMDB API配置
TMDB_API_KEY=your_tmdb_api_key_here
# OpenSubtitles API配置
OPENSUBTITLES_API_KEY=your_opensubtitles_api_key_here
# OpenSubtitles账号密码(下载字幕必需)
OPENSUBTITLES_USERNAME=your_opensubtitles_username
OPENSUBTITLES_PASSWORD=your_opensubtitles_password
# User-Agent可选,默认使用Chrome浏览器User-Agent
# OPENSUBTITLES_USER_AGENT=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
# DeepSeek AI API配置
DEEPSEEK_API_KEY=your_deepseek_api_key_here
# 电影监控目录配置
MOVIE_WATCH_DIR=G:/Movies
SUBTITLE_DOWNLOAD_DIR=G:/Subtitles
# 服务器配置
PORT=3001 # 后端服务端口
CLIENT_PORT=3000 # 前端服务端口
# 字幕语言偏好(逗号分隔)
PREFERRED_LANGUAGES=zh-CN,zh,en
# SOCKS代理配置(推荐使用)
USE_SOCKS_PROXY=true
SOCKS_PROXY_HOST=127.0.0.1
SOCKS_PROXY_PORT=10808
# HTTP代理配置(备选方案)
# 如果遇到网络超时或连接问题,可以配置代理
# 常见的代理软件端口:Clash(7890)、V2Ray(10809)、Shadowsocks(1080)
# PROXY_HOST=127.0.0.1
# PROXY_PORT=10809
# PROXY_PROTOCOL=http
# 或者使用环境变量方式(优先级更高)
# HTTP_PROXY=http://127.0.0.1:10809
# HTTPS_PROXY=http://127.0.0.1:10809# 安装所有依赖
npm run install-all# 开发模式(同时启动前后端)
npm run dev
# 或者分别启动
npm run server # 后端服务 (端口3001)
npm run client # 前端服务 (端口3000)打开浏览器访问:http://localhost:3000
- 在搜索框中输入电影名称
- 点击搜索按钮
- 从搜索结果中选择电影
- 查看可用的字幕列表
- 点击下载按钮获取字幕
- 在
.env文件中配置MOVIE_WATCH_DIR - 将电影文件放入监控目录
- 系统自动检测新文件并下载字幕
- 字幕文件保存在电影同目录下
- 查看所有下载的字幕文件
- 显示文件大小、下载时间等信息
- 支持按时间排序
subtitles_finder/
├── server/ # 后端服务
│ ├── services/ # 业务服务层
│ │ ├── imdbService.js
│ │ ├── opensubtitlesService.js
│ │ ├── deepseekService.js
│ │ ├── fileWatcher.js
│ │ └── movieProcessor.js
│ ├── routes/ # API路由
│ │ ├── movies.js
│ │ └── subtitles.js
│ ├── utils/ # 工具函数
│ │ └── logger.js
│ └── index.js # 服务入口
├── client/ # 前端应用
│ ├── app/ # Next.js App Router
│ ├── components/ # React组件
│ ├── types/ # TypeScript类型定义
│ └── package.json
├── env.example # 环境变量示例
└── README.md
GET /api/movies/search?q=电影名称
GET /api/movies/:id
GET /api/subtitles/search?title=电影标题&year=年份&language=语言
POST /api/subtitles/download
{
"subtitleId": "字幕ID",
"fileName": "文件名",
"movieTitle": "电影标题"
}
POST /api/subtitles/translate
{
"subtitleContent": "字幕内容",
"targetLanguage": "目标语言"
}
GET /api/subtitles/history
- 使用ESLint进行代码检查
- 遵循TypeScript类型安全
- 模块化设计,职责分离
- 完整的错误处理
- 在
server/services/中创建服务模块 - 在
server/routes/中添加API路由 - 在
client/components/中创建UI组件
# 开发模式(同时启动前后端)
npm run dev
# 或者分别启动
npm run server # 后端服务 (端口3001)
npm run client # 前端服务 (端口3000)1. 安装PM2
npm install -g pm22. 配置环境变量
cp env.example .env
# 编辑.env文件,配置所有必要的API密钥和参数3. 一键部署
# Linux/Mac
chmod +x deploy.sh
./deploy.sh
# Windows
deploy.bat
# 或者使用npm脚本
npm run deploy4. PM2管理命令
# 启动服务
npm run pm2:start
# 查看状态
npm run pm2:status
# 查看日志
npm run pm2:logs
# 重启服务
npm run pm2:restart
# 停止服务
npm run pm2:stop
# 删除服务
npm run pm2:delete
# 监控面板
npm run pm2:monit5. 服务配置
- 后端服务:
subtitles-finder-server- 运行在配置的PORT端口(默认3001) - 前端服务:
subtitles-finder-client- 运行在配置的CLIENT_PORT端口(默认3000) - 日志文件: 保存在
./logs/目录下 - 自动重启: 内存使用超过限制时自动重启
6. 开机自启动
# 保存当前PM2进程列表
pm2 save
# 生成开机启动脚本
pm2 startup
# 按照提示执行生成的命令(需要管理员权限)MIT License
欢迎提交Issue和Pull Request!
- 🎉 初始版本发布
- ✨ 支持电影搜索和字幕下载
- 🤖 集成AI智能处理
- 📁 自动文件监控功能
- 📊 完整的日志系统