video-pipeline 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.env.example ADDED
@@ -0,0 +1,168 @@
1
+ # =============================================================================
2
+ # 视频处理流水线 - 环境变量配置模板
3
+ # =============================================================================
4
+ # 用法:
5
+ # 1. 复制此文件: cp .env.example .env
6
+ # 2. 修改 .env 中的值以适配你的 Excel 结构和平台
7
+ # 3. 运行脚本: python process_videos.py
8
+ #
9
+ # 核心思路:只需提供 Excel + 列名映射 + 平台 URL 模板,
10
+ # 脚本自动完成 下载 → 转码 → 语音识别 全流程。
11
+ # =============================================================================
12
+ #
13
+ # ── 配置项变更权限说明 ──────────────────────────────────────────────────────
14
+ # 为方便修改,每个配置项用以下标记标注变更规则:
15
+ #
16
+ # 【自由】= 值可随意变更为任意合法内容(路径、开关、数字、字符串等)
17
+ # 【调序】= 值来自一个固定集合,可以:增减条目 / 调整顺序 / 改优先级
18
+ # 但不能使用集合之外的值(否则脚本无法识别)
19
+ # 【关联】= 值需与脚本内约定的 Key 名一致(通常跟随 PLATFORM_PRIORITY)
20
+ # 【固定】= 除非 Excel 列名或脚本内部逻辑改变,否则不应修改
21
+ #
22
+ # =============================================================================
23
+
24
+ # ── 输入文件 ────────────────────────────────────────────────────────────────
25
+ # 【自由】任意合法的 Excel 文件路径(相对或绝对)
26
+ EXCEL_FILE=data/export_2026-06-10_split.xlsx
27
+
28
+ # ── 输出目录(相对于项目根目录)─────────────────────────────────────────────
29
+ # 【自由】任意合法目录名
30
+ DOWNLOADS_DIR=downloads # 下载的视频文件
31
+ TRANSCODED_DIR=transcoded # 转码后的音频文件
32
+ REPORTS_DIR=reports # 执行报告 JSON
33
+ COOKIES_DIR=cookies # 站点 cookie 文件
34
+
35
+ # ── 外部工具 ────────────────────────────────────────────────────────────────
36
+ # 【自由】可改为工具的绝对路径或自定义命令名
37
+ YTDLP=yt-dlp # yt-dlp 命令行工具
38
+ FFMPEG=ffmpeg # ffmpeg 转码工具
39
+ FFPROBE=ffprobe # ffprobe 媒体信息
40
+
41
+ # ── Whisper 语音识别 ───────────────────────────────────────────────────────
42
+ # 【自由】backend: "service" 或 "local"(任选其一)
43
+ # 【自由】model: tiny / base / small / medium / large(仅 backend=local)
44
+ # 【自由】device: cpu 或 cuda(仅 backend=local)
45
+ # 【自由】language: 空=多语言自动检测, zh/en/ja 等(仅 backend=local)
46
+ # 【自由】service_model: 任意合法的模型文件路径(仅 backend=service)
47
+ # 留空则使用服务器当前已加载的模型,首次识别时自动 POST /load 切换
48
+ #
49
+ # service 模式语言由服务端管理后台设定,API 不支持指定
50
+
51
+ # 远程服务模式 - whisper.cpp server (默认)
52
+ WHISPER_BACKEND=service # 【自由】service 或 local
53
+ WHISPER_SERVICE=http://localhost:9588 # 【自由】服务地址
54
+
55
+ # 本地模式 - openai-whisper CLI (取消下方注释并注释上方即可切换)
56
+ # WHISPER_BACKEND=local
57
+ # WHISPER_MODEL=base
58
+ # WHISPER_DEVICE=cpu
59
+ # WHISPER_LANGUAGE=zh
60
+
61
+ # ── 转码参数 ────────────────────────────────────────────────────────────────
62
+ # 【自由】wav 格式参数通常不变;如需其他格式(mp3/flac)可一起修改
63
+ TRANSCODE_EXT=.wav # 输出音频格式
64
+ TRANSCODE_ARGS=-ar 16000 -ac 1 -c:a pcm_s16le # ffmpeg 参数(空格分隔)
65
+
66
+ # ── Excel 字段映射 ──────────────────────────────────────────────────────────
67
+ # 以下变量值 = 你的 Excel 表头列名。
68
+ # 【固定】除非 Excel 列名发生变化,否则不应修改
69
+ #
70
+ # 【必填列】
71
+ COL_ID=extra.id # 唯一标识(行匹配 + 文件命名)
72
+ COL_TITLE=title # 视频标题
73
+ COL_CONTENT=content # 输出列:识别文本写入此列
74
+ COL_KEYWORDS=keywords # 输出列:AI 分析结果(关键词归纳)写入此列
75
+ #
76
+ # 【平台视频 ID 列】至少配置一个,列值会替换 URL 模板中的占位符
77
+ COL_TENCENTVID=extra.tencentVid
78
+ COL_BILIBILIBVID=extra.bilibiliBvid
79
+ COL_YOUTUBEID=extra.youtubeId
80
+ COL_YOUKUID=extra.youkuId
81
+
82
+ # ── 处理的 Sheet ────────────────────────────────────────────────────────────
83
+ # 【自由】逗号分隔的 sheet 名称列表,可增删、调序;不指定则处理所有 sheet
84
+ VIDEO_SHEETS=YouTube视频,普诺赛中文站
85
+
86
+ # ── 平台优先级 ──────────────────────────────────────────────────────────────
87
+ # 【调序】可选值来自以下固定集合(与上方平台列名后缀对应):
88
+ # bilibiliBvid = B 站 BV 号
89
+ # youtubeId = YouTube 视频 ID
90
+ # tencentVid = 腾讯视频 VID
91
+ # youkuId = 优酷视频 ID
92
+ #
93
+ # 你可以:
94
+ # 1. 调整顺序 → 排前面的平台优先下载
95
+ # 2. 增减条目 → 只保留你需要的平台
96
+ # ✗ 不能使用集合之外的值(如 "tiktokId"、"douyinId" 等未定义的 key)
97
+ PLATFORM_PRIORITY=bilibiliBvid,youtubeId,tencentVid,youkuId
98
+
99
+ # ── 平台 URL 模板 ───────────────────────────────────────────────────────────
100
+ # 【关联】模板中的 {占位符} 必须与 PLATFORM_PRIORITY 中的 key 名一致
101
+ # 如 {youtubeId} 会被 COL_YOUTUBEID 列的值替换
102
+ # 【自由】URL 本身可随意修改(例如从 youtu.be 改为 www.youtube.com/watch?v=)
103
+ #
104
+ # 前缀规则: TENCENT=腾讯视频 BILIBILI=B站 YOUTUBE=YouTube YOUKU=优酷
105
+ TENCENT_URL_TPL=https://v.qq.com/x/page/{tencentVid}.html
106
+ BILIBILI_URL_TPL=https://www.bilibili.com/video/{bilibiliBvid}/
107
+ YOUTUBE_URL_TPL=https://youtu.be/{youtubeId}
108
+ YOUKU_URL_TPL=https://v.youku.com/v_show/id_{youkuId}.html
109
+
110
+ # ── 平台通用配置 ────────────────────────────────────────────────────────────
111
+ # 以下变量对每个平台分别配置,前缀 = 平台前缀(BILIBILI / YOUTUBE / TENCENT / YOUKU)
112
+ #
113
+ # {前缀}_COOKIE_FILE 【自由】cookie 文件路径(留空=不使用)
114
+ # {前缀}_COOKIES_FROM_BROWSER 【自由】chrome / firefox / edge / 留空
115
+ # 优先于 COOKIE_FILE,直接从浏览器读 cookie
116
+ # {前缀}_PROXY 【自由】代理地址 (http://或socks5://)
117
+ # 如 Clash Verge 默认 http://127.0.0.1:7897
118
+ # {前缀}_USER_AGENT 【自由】自定义 User-Agent (留空=yt-dlp 默认)
119
+ # {前缀}_FORMAT 【自由】yt-dlp 下载格式 (默认 bestvideo+bestaudio/best)
120
+ # {前缀}_CONCURRENT_FRAGMENTS 【自由】并发分片数 (加速下载, 仅 B站)
121
+ # {前缀}_JS_RUNTIMES 【自由】JS 运行时 (node/deno, YouTube n-sig 求解)
122
+ # {前缀}_REMOTE_COMPONENTS 【自由】远程组件 (如 ejs:github, YouTube 必需)
123
+ # {前缀}_REFERER 【自由】Referer 请求头 (如 B站)
124
+ # {前缀}_URL_TPL 【自由】URL 模板 (见"平台 URL 模板"段)
125
+
126
+ # ── Bilibili 配置 ───────────────────────────────────────────────────────────
127
+ BILIBILI_COOKIE_FILE=cookies/bilibili.txt # 【自由】cookie 文件路径
128
+ BILIBILI_USER_AGENT=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 # 【自由】
129
+ BILIBILI_REFERER=https://www.bilibili.com/ # 【自由】
130
+ BILIBILI_CONCURRENT_FRAGMENTS=4 # 【自由】并发分片数
131
+ BILIBILI_FORMAT=bestvideo[height<=720]+bestaudio/bestvideo+bestaudio/best # 【自由】
132
+
133
+ # ── YouTube 配置 ────────────────────────────────────────────────────────────
134
+ # 方案 A(推荐): 直接从 Firefox 浏览器读 cookie,yt-dlp 能稳定解密
135
+ YOUTUBE_COOKIES_FROM_BROWSER=firefox # 【自由】firefox / chrome / edge
136
+ # 方案 B(备用): 从文件读取 cookie,但需定期更新(YouTube 约 48h 轮换 cookie)
137
+ # Chrome 用 "Get cookies.txt LOCALLY" 扩展导出 → cookies/youtube.txt
138
+ # YOUTUBE_COOKIE_FILE=cookies/youtube.txt # 【自由】cookie 文件路径
139
+ # ⚠️ Windows Chromium 系浏览器 DPAPI 解密已知失败,不建议用 --cookies-from-browser chrome
140
+ YOUTUBE_PROXY=http://127.0.0.1:7897 # 【自由】代理地址 (Clash Verge 默认 7897, v2rayN 默认 10809)
141
+ # ⚠️ 脚本会自动给 yt-dlp 及其 node/ejs 子进程注入 HTTPS_PROXY 环境变量
142
+ YOUTUBE_USER_AGENT=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 # 【自由】
143
+ YOUTUBE_JS_RUNTIMES=node # 【自由】解 n-sig 的 JS 运行时
144
+ YOUTUBE_REMOTE_COMPONENTS=ejs:github # 【自由】YouTube n-sig 需要的远程组件
145
+ YOUTUBE_FORMAT=bestvideo[height<=720]+bestaudio/bestvideo+bestaudio/best # 【自由】
146
+
147
+ # ── 腾讯视频配置 ────────────────────────────────────────────────────────────
148
+ # 腾讯视频通常不需要 cookie
149
+ TENCENT_COOKIE_FILE= # 【自由】
150
+ TENCENT_USER_AGENT= # 【自由】
151
+
152
+ # ── 优酷配置 ────────────────────────────────────────────────────────────────
153
+ YOUKU_COOKIE_FILE= # 【自由】
154
+ YOUKU_USER_AGENT= # 【自由】
155
+
156
+
157
+ # ── AI 分析/关键词归纳 ─────────────────────────────────────────────────────
158
+ # 【自由】是否启用 AI 分析环节(true/false),在 transcribe 之后执行
159
+ AI_ENABLED=true
160
+ # 【自由】OpenAI 兼容 API 配置
161
+ AI_API_KEY=sk-jewvkpoAQNKAARQMYULWW1vv8x6UH4H9Qe4j10tp2AJFM3TY
162
+ AI_BASE_URL=https://apihub.agnes-ai.com/v1
163
+ AI_MODEL=agnes-2.0-flash
164
+ # 【自由】请求超时(秒),默认 300
165
+ AI_TIMEOUT=300
166
+ # 【关联】提示词模板,{content} 占位符会被识别文本替换
167
+ # 【自由】提示词内容可随意修改,但必须保留 {content} 占位符
168
+ AI_PROMPT_TPL=帮我归纳总结一下Keywords,尽可能全一点,这是内容:{content}
package/CHANGELOG.md ADDED
@@ -0,0 +1,98 @@
1
+ # Changelog
2
+
3
+ ## [1.0.4] - 2026-06-11
4
+
5
+ ### Features
6
+
7
+ - rename npm package to video-pipeline (`644cc8a`)
8
+ - add --url option to Python version (parity with Node.js) (`e1df301`)
9
+
10
+ ### Bug Fixes
11
+
12
+ - recreate v1.0.3 tag and regenerate CHANGELOG with correct scopes (`9c2db90`)
13
+ - normalize CHANGELOG format to Keep a Changelog standard (`2b887f4`)
14
+ - correct changelog per-version ranges + fix getLastTag for Windows (`755222a`)
15
+
16
+
17
+ ## [Unreleased]
18
+
19
+ ### Features
20
+
21
+ - rename npm package to video-pipeline (`644cc8a`)
22
+ - add --url option to Python version (parity with Node.js) (`e1df301`)
23
+
24
+ ### Bug Fixes
25
+
26
+ - normalize CHANGELOG format to Keep a Changelog standard (`2b887f4`)
27
+ - correct changelog per-version ranges + fix getLastTag for Windows (`755222a`)
28
+
29
+ ## [1.0.3] - 2026-06-11
30
+
31
+ ### Features
32
+
33
+ - add --url option for direct video URL download pipeline (`468bc1e`)
34
+ - use arrow-key navigation for --init conflict prompt (`571f24a`)
35
+
36
+ ### Bug Fixes
37
+
38
+ - hard-fail on GitHub push failure + verify tag on remote (`5ca14ab`)
39
+ - regenerate CHANGELOG with correct per-version commit ranges (`e265f57`)
40
+
41
+ ## [1.0.2] - 2026-06-11
42
+
43
+ ### Features
44
+
45
+ - migrate to ESM, interactive --init, move data files to data/ (`a5edd07`)
46
+
47
+ ### Bug Fixes
48
+
49
+ - changelog generation + arrow-key version select + default Y confirm (`f7f3ce0`)
50
+
51
+ ## [1.0.1] - 2026-06-11
52
+
53
+ ### Features
54
+
55
+ - upgrade deps + add --init/--file/--env-file CLI options (`879d05c`)
56
+ - npm 发布体系搭建 + Node.js 关键修复 (`d3e2c40`)
57
+ - 新增 Node.js 版本的 process_videos.js (`1631670`)
58
+ - 执行前工具预检 + 超时默认值统一 (`bb8c181`)
59
+ - dry-run 增加环境检测和每步可用性状态展示 (`a5defbd`)
60
+ - 新增 AI 关键词归纳分析环节 (step analyze) (`8f1a4e1`)
61
+ - YouTube cookie 方案改为 Firefox 浏览器直读(替代手动导出,解决 Chrome DPAPI 解密失败问题) (`3230df0`)
62
+ - YouTube 下载增加代理支持 (`a7274b3`)
63
+ - YouTube 下载增加 --cookies-from-browser 支持 (`2fbd020`)
64
+ - WHISPER_LANGUAGE 双后端通用,默认多语言自动检测 (`80679d1`)
65
+ - service 模式也支持 WHISPER_MODEL 指定模型 (`470ee4d`)
66
+ - 本地 Whisper 支持 + 文件名三级去重 (`2ee8aaf`)
67
+ - 引入 .env 环境变量配置系统,脚本可适配任意 Excel (`2622439`)
68
+ - run_with_progress 同步化 + 智能重转码 + 文档更新 (`375a9d2`)
69
+ - video processing pipeline with platform fixes and timeout control (`24b178d`)
70
+
71
+ ### Bug Fixes
72
+
73
+ - update husky commit-msg hook to v9 format (`25f557e`)
74
+ - 下载失败后清理残留的 .part/.ytdl 临时文件 (`0251a4b`)
75
+ - yt-dlp 子进程( node/ejs )不走代理导致 n-sig 求解失败 (`e00ec5f`)
76
+ - whisper.cpp server API 适配 — /inference 不传 model/language (`3a83ab5`)
77
+ - 移除 run_with_progress 逐行 DEBUG 打印,解决 Windows 控制台中文路径乱码 (`fb20e4d`)
78
+
79
+ ### Documentation
80
+
81
+ - README 新增各平台 URL 格式与视频ID提取正则 (`3cd423d`)
82
+ - README 修复目录重复 + 新增 .env 变更权限说明 (`e27d267`)
83
+ - .env.example 增加变更权限标注(自由/调序/关联/固定) (`b542865`)
84
+ - 文档全面更新 + security: cookie 文件移出版本控制 (`a90b5af`)
85
+ - 更新 .env.example (代理端口7897, 注释完善, WHISPER_MODEL标注仅local) (`63dca08`)
86
+ - service 模式语言说明修正 — API 不支持指定语言 (`adcb265`)
87
+
88
+ ### Chores
89
+
90
+ - add auto-changelog dev dependency (`9785cbf`)
91
+ - env 审查优化 + 清理 __pycache__ 跟踪 (`02361b8`)
92
+
93
+ ### Other
94
+
95
+ - update (`e3b57e5`)
96
+ - update default timeout (`57d329b`)
97
+ - update (`fd9b8ac`)
98
+ - 初始版本,基本可用 (`0e24d69`)
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.