# 3w **Repository Path**: youngcodes/3w ## Basic Information - **Project Name**: 3w - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-21 - **Last Updated**: 2025-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 3w - 视频处理工具 一个基于 Node.js 的视频处理工具,支持从 YouTube 等平台下载视频、转换视频比例(带背景模糊效果)和切割视频。 ## 功能特性 - 🎥 **视频下载**:使用 yt-dlp 从 YouTube 等平台下载视频 - 🎬 **视频转换**:将视频转换为 1080x1920 竖屏格式,支持背景模糊效果 - ✂️ **视频切割**:将视频按指定时间切片 - 📁 **时间戳文件夹**:自动创建带时间戳的文件夹,避免文件重名 - ⚙️ **配置文件支持**:通过配置文件管理常用参数 - 🎯 **灵活模式**:支持单独执行或组合执行各个步骤 - 💬 **交互式输入**:参数不足时自动进入交互式输入模式 ## 系统要求 - Node.js (推荐 v14 或更高版本) - [yt-dlp](https://github.com/yt-dlp/yt-dlp) - 视频下载工具 - [ffmpeg](https://ffmpeg.org/) - 视频处理工具 ## 安装 1. 克隆或下载本项目 2. 确保已安装 Node.js 3. 安装 yt-dlp 和 ffmpeg,并添加到系统 PATH 环境变量中 ## 配置文件 在项目根目录创建或编辑 `config.json` 文件: ```json { "proxy": "socks://127.0.0.1:10808", "ffmpegLocation": "D:\\ffmpeg-ytp\\bin", "downloadPath": "D:\\youtube", "baseName": "game", "downloadName": "game.mp4", "resultName": "game_result.mp4", "segmentTime": 15, "title": "Sonic Rumber | All Races", "scale": 1.5 } ``` ### 配置项说明 - `proxy`: 代理地址(可选,用于下载) - `ffmpegLocation`: ffmpeg 可执行文件路径(如果不在 PATH 中) - `downloadPath`: 下载文件的基础目录 - `baseName`: 基础名称,用于生成时间戳文件夹(如 `game`) - `downloadName`: 下载的文件名(如 `game.mp4`) - `resultName`: 转换后的文件名(如 `game_result.mp4`) - `segmentTime`: 视频切片时间(秒,默认 20) - `title`: 文字水印内容(可选,用于视频转换时添加文字水印) - `scale`: 前景缩放比例(可选,默认 1.5,用于视频转换时放大前景视频) ## 使用方法 ### 基本用法 ```bash # 显示帮助信息 node 3w.js --help # 或 node 3w.js -h ``` ### 模式说明 - `0` - 全部执行(下载、转换、切割) - `1` - 仅下载视频 - `2` - 仅转换视频比例 - `3` - 仅切割视频 - `1,2` - 下载并转换 - `2,3` - 转换并切割 - 等等... ### 使用示例 #### 1. 全部执行(使用配置文件) ```bash node 3w.js 0 <视频链接> ``` 会自动使用配置文件中的路径,并创建时间戳文件夹(如 `game_202511241720`) #### 2. 全部执行(指定路径) ```bash node 3w.js 0 <视频链接> <下载路径> <输出路径> ``` #### 3. 全部执行(自定义切片时间) ```bash node 3w.js 0 <视频链接> --segment-time 30 # 或使用简写 node 3w.js 0 <视频链接> -s 30 ``` #### 3.1. 全部执行(自定义文字水印) ```bash node 3w.js 0 <视频链接> --title "My Custom Title" # 或使用简写 node 3w.js 0 <视频链接> -t "My Custom Title" ``` #### 4. 仅下载视频 ```bash node 3w.js 1 <视频链接> # 或指定下载路径 node 3w.js 1 <视频链接> <下载路径> ``` #### 5. 仅转换视频 ```bash node 3w.js 2 <输入文件> <输出文件> ``` #### 6. 仅切割视频 ```bash node 3w.js 3 <输入文件> # 或指定切片时间 node 3w.js 3 <输入文件> -s 15 ``` #### 7. 组合模式 ```bash # 下载并转换 node 3w.js 1,2 <视频链接> # 转换并切割 node 3w.js 2,3 <输入文件> <输出文件> # 转换并切割(自定义切片时间) node 3w.js 2,3 <输入文件> <输出文件> -s 25 # 全部执行(自定义切片时间和文字水印) node 3w.js 0 <视频链接> -s 30 -t "My Title" ``` ### 交互式模式 如果参数不足,程序会自动进入交互式输入模式,引导您输入所需参数。 ## 工作流程 ### 完整流程(模式 0) 1. **下载视频**:使用 yt-dlp 从指定链接下载视频 2. **转换视频**:将视频转换为 1080x1920 竖屏格式 - 使用背景模糊效果(高斯模糊,sigma=20) - 前景视频按配置的缩放比例放大(默认 1.5 倍)并居中显示 - 可选的文字水印(从配置文件或命令行参数读取) - 使用 H.264 编码,CRF 23,veryfast 预设 3. **切割视频**:按指定时间(默认 20 秒)将视频切片 ### 时间戳文件夹 当使用配置文件且配置中有 `baseName` 时,会自动创建带时间戳的文件夹: - 格式:`baseName_YYYYMMDDHHMM` - 示例:`game_202511241720` - 所有文件(下载、转换、切割结果)都保存在该文件夹中 这样可以避免文件重名问题,每次执行都会创建新的文件夹。 ## 视频转换特性 转换步骤使用复杂的滤镜效果: - **背景处理**:缩放并裁剪到 1080x1920,应用高斯模糊(sigma=20) - **前景处理**: - 缩放到 1080x1920(保持宽高比) - 按配置的缩放比例放大(默认 1.5 倍,可通过 `scale` 配置项调整) - **合成**:放大后的前景居中叠加到模糊背景上 - **文字水印**:可选的文字水印(可通过 `title` 配置项或 `--title` 参数设置) - 位置:水平居中,垂直位置 y=350 - 样式:白色字体,70 号大小,带黑色阴影 - **编码**:H.264 High Profile Level 4.0,CRF 23,veryfast 预设,优化网络播放(faststart) ## 项目结构 ``` 3w/ ├── 3w.js # 主程序入口 ├── download.js # 视频下载模块 ├── convert.js # 视频转换模块 ├── cut.js # 视频切割模块 ├── utils.js # 工具函数 ├── config.json # 配置文件 └── README.md # 说明文档 ``` ## 注意事项 1. 确保 yt-dlp 和 ffmpeg 已正确安装并添加到 PATH 2. 如果使用代理,请在配置文件中设置 `proxy` 3. 如果 ffmpeg 不在 PATH 中,请在配置文件中设置 `ffmpegLocation` 4. 视频转换需要一定的计算资源,建议使用性能较好的机器 5. 切片时间建议根据视频内容调整,避免在关键帧处切割 ## 许可证 本项目采用 MIT 许可证。 ## 贡献 欢迎提交 Issue 和 Pull Request! ## 更新日志 ### 最新版本 - ✅ 支持时间戳文件夹,避免文件重名 - ✅ 支持配置文件管理参数 - ✅ 支持命令行参数和交互式输入 - ✅ 支持背景模糊效果的视频转换 - ✅ 支持前景视频缩放(可配置缩放比例) - ✅ 支持文字水印(可配置内容和位置) - ✅ 支持自定义切片时间(命令行参数 `--segment-time` 或 `-s`、配置文件) - ✅ 支持自定义文字水印(命令行参数 `--title` 或 `-t`、配置文件)