MoreRSS

site iconNoise修改

开发者,开发了Rss-Translation(众多RSS翻译项目之一)。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Noise的 RSS 预览

JsDelivr-CDN加速访问服务部署

2026-05-23 10:00:00

前言:这个服务本意是提供一些开发文件及图床的jsd代理加速,避免国内使用相关服务时无法访问或访问过慢,现提供两种高效使用该服务的部署方式,如果你在使用中有问题,也可以留言反馈

服务介绍

主要把常见的 GitHub / npm / unpkg 资源链接解析为 jsDelivr CDN 资源,并提供多种输出方式(直连/代理/跳转):

  • 带有安全管理体系,一键识别拉黑恶意攻击扫描IP,可自行设置解封时间
  • 日志查看,包含登录删除等操作也会被记录,可设置保留日志的时间(自动清理)
  • 流量统计,可显示近 30 天流量汇总(字节/请求数)与 Top使用列表
  • 页面设置,带有公告设置及网站标题、icon的设置,公告支持md、txt、html写法

在线使用

访问:https://jsd.cdn.noisework.cn

功能与特性

  • 支持链接识别与转换
    • GitHub:raw.githubusercontent.com / github.com/.../blob/... / github.com/.../raw/...
    • npm:unpkg.com
    • jsDelivr CDN:cdn.jsdelivr.net/gh/... / cdn.jsdelivr.net/npm/...(可直接作为上游)
    • 简写
      • gh:owner/repo@ref/path/to/file.ext
      • npm:pkg@ver/path/to/file.ext(支持作用域包:npm:@scope/pkg@ver/path/to/file.ext
  • 输出方式
    • /gh/<owner>/<repo>@<ref>/<path>:同路径直连(服务端代理 jsDelivr 并返回内容;推荐图床/跨域)
    • /npm/<pkg>@<ver>/<path>:同路径直连(服务端代理 jsDelivr 并返回内容;推荐图床/跨域)
    • /cdn?url=...:代理输出(同样返回内容,适合”只能用 query 参数”的场景)
    • /r?url=...:Redirect(302 跳转到 jsDelivr)
    • /u?url=...:仅解析,返回 JSON(首页/前端页面使用)
  • 安全策略(Proxy)
    • 仅允许代理 jsDelivr 官方域名:cdn.jsdelivr.netfastly.jsdelivr.net
    • 默认开启 Access-Control-Allow-Origin: *,适合图片/静态资源跨域引用
  • 缓存策略(Proxy)
    • 若 URL ref 识别为”稳定版本”(例如 commit sha 或 semver),会返回长期缓存
    • 若为 main/master/latest 等不稳定 ref,默认短缓存

1779527661941

一、Docker 部署

1
docker pull noise233/jsd-noise:latest

推荐按下面这样跑(首次会自动创建并初始化 /app/data/app.db;以后复用旧数据直接沿用该目录即可):

1
2
3
4
5
6
7
8
docker run -d \
--name jsd-noise \
-p 5011:5011 \
-v "$(pwd)/data:/app/data" \
-e PORT=5011 \
-e DB_PATH=/app/data/app.db \
-e TZ=Asia/Shanghai \
noise233/jsd-noise:latest

默认首次注册的用户为管理员,如果你有旧数据如在/opt/jsd/文件夹中,则使用 -v /opt/jsd:/app/data \即可

你也可以一键部署在zeabur或fly.io等无服务器平台

1779527616400

二、Nginx

适用于服务器轻量化使用,可直接在宝塔面板一键修改网站配置文件,将下面代码复制后修改必要的文件路径即可,已经配置了缓存时间及文件大小限制,可自行修改

网站首页文件:https://noise.lanzoul.com/iJdlt3q5tokd

功能同上述,但没有后台

配置文件代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
server {
# ===== 监听端口(同时支持 HTTP/HTTPS 和 IPv4/IPv6) =====
listen 80;
listen 443 ssl http2;
listen [::]:80;
listen [::]:443 ssl http2;

# ===== 域名(请替换为你自己的站点域名) =====
server_name cdn.example.com www.cdn.example.com; # 替换为你的真实域名

# ===== 网站根目录(用于本机资源,如 /custom_413.html) =====
# 如果你的项目不在默认宝塔目录,请一并修改这里
root /www/wwwroot/cdn.example.com; # 替换为你的实际站点根目录

# ===== 宝塔扩展配置目录(如伪静态、重写规则等) =====
# 路径中的域名也需要同步替换
include /www/server/panel/vhost/nginx/extension/cdn.example.com/*.conf;

#CERT-APPLY-CHECK--START
# 用于 SSL 证书申请时的文件验证相关配置 —— 请勿删除
include /www/server/panel/vhost/nginx/well-known/cdn.example.com.conf;
#CERT-APPLY-CHECK--END

#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;

#HTTP_TO_HTTPS_START
# 自动将 HTTP 跳转到 HTTPS(.well-known 除外,用于证书申请验证)
set $isRedcert 1;
if ($server_port != 443) {
set $isRedcert 2;
}
if ( $uri ~ /\.well-known/ ) {
set $isRedcert 1;
}
if ($isRedcert != 1) {
rewrite ^(/.*)$ https://$host$1 permanent;
}
#HTTP_TO_HTTPS_END

# ===== SSL 证书与参数 =====
# 证书路径同样需要替换为你的域名对应路径
ssl_certificate /www/server/panel/vhost/cert/cdn.example.com/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/cdn.example.com/privkey.pem;

# 【安全建议】
# 当前配置包含 TLSv1/TLSv1.1,已属于不安全协议,建议只保留 TLSv1.2 TLSv1.3
# 参考各类安全基线,仅启用现代 TLS 版本
ssl_protocols TLSv1.2 TLSv1.3; # 建议去掉 TLSv1 TLSv1.1

# 【安全建议】
# cipher 套件建议按 Mozilla Intermediate 规范更新,例如只保留带 ECDHE+AES-GCM/ChaCha20 的套件
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:EECDH+AES256:RSA+AES128:RSA+AES256:!MD5;
ssl_prefer_server_ciphers on;

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

# HSTS:告诉浏览器未来一年只使用 HTTPS 访问本站
add_header Strict-Transport-Security "max-age=31536000";

# 当客户端使用 HTTP 请求 HTTPS 端口时,Nginx 返回 497,这里跳转为 HTTPS
error_page 497 https://$host$request_uri;

# ===== 首页规则 =====
location = / {
# 如果主页是 PHP 项目,一般改为 index.php index.html
index index.html; # 根据实际情况调整为 index.php index.html 等
}

# ===== 通用请求处理:先尝试本地文件,否则走反向代理 =====
location / {
try_files $uri $uri/ @proxy;
}

# ===== 反向代理 jsdelivr CDN 的核心逻辑 =====
location @proxy {
# 上游:jsdelivr CDN
proxy_pass https://cdn.jsdelivr.net;

# 确保 SNI 匹配 jsdelivr(尤其是共享 IP / CDN 场景)
proxy_ssl_server_name on;

# 传递客户端真实信息给上游
proxy_set_header Host cdn.jsdelivr.net;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;

# 支持 WebSocket / 保持长连接
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;

# 显示缓存命中状态(调试用,可按需注释)
add_header X-Cache $upstream_cache_status;

# ===== 服务端缓存配置 =====
# 忽略上游某些控制头,让 Nginx 自己决定缓存策略
# 说明:忽略 Cache-Control / Expires 可以让 Nginx 按自身规则缓存;
# 忽略 Set-Cookie 是因为 jsdelivr 基本不会在静态资源上用 Cookie,
# 但如果有敏感会话信息,需谨慎评估是否真的要忽略。
proxy_ignore_headers Set-Cookie Cache-Control expires;

# 使用共享内存区域 cache_one 作为缓存空间
# 注意:需要在 http 块中提前定义 proxy_cache_path,例如:
# proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=cache_one:100m inactive=180d max_size=10g;
proxy_cache cache_one;
proxy_cache_key $host$uri$is_args$args;

# 缓存正常响应和重定向
proxy_cache_valid 200 304 301 302 1440m;

# 防止大文件回源时占用过多磁盘/带宽
proxy_max_temp_file_size 5m;

# 拦截上游错误码,交给 error_page 处理
proxy_intercept_errors on;

# 自定义 413 错误页面(实体过大)
error_page 413 /custom_413.html;

# ===== 客户端缓存控制(浏览器端) =====
# 对常见静态资源设置较长过期时间,减轻服务器压力
if ($uri ~* "\.(gif|mp4|mp3|png|jpg|css|js|webp)$") {
expires 2M; # 浏览器缓存 2 个月
}
}

# ===== 自定义 413 页面(请求体过大) =====
# 注意:Nginx 对 413 的自定义错误页有特殊限制,
# 需要确保所在 location 的 client_max_body_size 大于实际限制,
# 否则 error_page 可能不会生效,仍会返回默认 413 页面。
location = /custom_413.html {
root /www/wwwroot/cdn.example.com; # 与 server.root 保持一致,或单独指定
internal; # 只允许内部重定向访问
default_type text/html;
return 200 '文件超过5MB,不予返回!';
}
}

使用时需要做的几件事:

  1. 把所有 cdn.example.com / www.cdn.example.com 替换为你自己的域名。
  2. /www/wwwroot/cdn.example.com 和证书路径替换为你实际的路径。
  3. http 块中添加 proxy_cache_path 定义(示例里是 cache_one),例如:
1
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=cache_one:100m inactive=180d max_size=10g;

如果你不想使用我的首页文件而自建的是 PHP 项目,把 index.html 改成 index.php

Cloudflare自定义安全规则配置

2026-05-23 10:00:00

介绍

前言:如果你有网站或服务配置在cloudflare,一定免不了被扫描和恶意攻击,而配置Cloudflare的自定义安全规则可避免这些问题,

进入https://dash.cloudflare.com 官网,点击安全规则,选择创建规则,选择自定义规则,然后点击编辑表达式

1779538516785

下面是 3 套可直接复制粘贴配置 的 Cloudflare 自定义安全规则表达式


1:纯静态站(推荐动作:Block)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
(
http.request.method ne "GET"
and http.request.method ne "HEAD"
)
or
(
lower(http.request.uri.path) in {
"/.env" "/.env.local" "/.env.dev" "/.env.prod" "/.env.production"
"/.git/config" "/.git/HEAD" "/.git/index"
"/.svn/entries" "/.hg/store"
"/.ds_store" "/.htaccess" "/.htpasswd"
"/composer.json" "/composer.lock"
"/package.json" "/package-lock.json" "/yarn.lock" "/pnpm-lock.yaml"
"/id_rsa" "/id_rsa.pub"
"/phpinfo.php" "/server-status"
"/wp-login.php" "/wp-config.php" "/xmlrpc.php"
"/config.php"
}
)
or
(
starts_with(lower(http.request.uri.path), "/wp-admin")
or starts_with(lower(http.request.uri.path), "/wp-includes")
or starts_with(lower(http.request.uri.path), "/phpmyadmin")
or starts_with(lower(http.request.uri.path), "/pma")
or starts_with(lower(http.request.uri.path), "/admin")
or starts_with(lower(http.request.uri.path), "/cgi-bin")
or starts_with(lower(http.request.uri.path), "/.git")
or starts_with(lower(http.request.uri.path), "/.svn")
or starts_with(lower(http.request.uri.path), "/.hg")
)
or
(
lower(http.request.uri.path) contains "../"
or lower(http.request.uri.path) contains "..%2f"
or lower(http.request.uri.path) contains "%2e%2e%2f"
or lower(http.request.uri.path) contains "%2f..%2f"
or lower(http.request.uri.path) contains "%5c..%5c"
)
or
(
lower(http.user_agent) contains "sqlmap"
or lower(http.user_agent) contains "acunetix"
or lower(http.user_agent) contains "nikto"
or lower(http.user_agent) contains "masscan"
or lower(http.user_agent) contains "nmap"
or lower(http.user_agent) contains "zgrab"
or lower(http.user_agent) contains "gobuster"
or lower(http.user_agent) contains "dirbuster"
or lower(http.user_agent) contains "feroxbuster"
or lower(http.user_agent) contains "wpscan"
)
or
(
http.user_agent eq ""
or len(http.user_agent) lt 8
)

说明

  • 非 GET/HEAD 拦截块
    • 目的:把“写入型攻击面”从边缘层直接砍掉。静态站正常只读;出现 POST/PUT/DELETE 等,通常是扫描器在试:上传、RCE、框架路由、表单打点、CORS/OPTIONS 探测等。
    • 拦截方向:阻断自动化探测 + 阻断尝试写入/提交的攻击流量。
  • 敏感文件精确命中块(in {...}
    • 目的:阻断信息泄露类探测。.env(密钥/配置)、/.git//.svn//.hg(源码与历史)、依赖锁文件(版本指纹)、phpinfo.php/server-status(环境指纹)、WP 关键入口(被大规模字典扫描)。
    • 拦截方向:阻断扫描字典命中 → 防止后续被精准利用。
  • 高风险目录前缀块(starts_with
    • 目的:挡“后台/面板/版本库目录级探测”。/admin/wp-admin/phpmyadmin/cgi-bin/.git* 这类路径是扫描器的默认清单。
    • 拦截方向:阻断爆破前置入口探测与面板探测。
  • 目录穿越块(contains 运算符)
    • 目的:挡路径穿越/LFI 探测(读系统文件、读配置、读源码)。由于没正则,覆盖的是最常见形态(含部分编码)。
    • 拦截方向:阻断“读敏感文件”的探测流量。
  • 扫描器 UA / 空 UA 块
    • 目的:快速降噪。大量自动化工具会带明显 UA(sqlmap、wpscan 等);空/极短 UA 也常见于脚本与探测器。
    • 拦截方向:阻断低成本扫描器与脚本请求,降低压力与日志噪声。

注意

  • 只要你的静态站有任何表单提交、Webhook、API,第一段会误杀:这种站不要用本规则,改用“混合站 / 内容站规则”。

规则 2:混合站(同域名:静态 + /api + /admin;推荐动作:Managed Challenge)

这套是“实战最常用”的:静态区严、API 区按协议约束、后台区挑战,整体误杀低。

可直接复制的表达式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
(
(not starts_with(lower(http.request.uri.path), "/api/"))
and (not starts_with(lower(http.request.uri.path), "/admin"))
and (http.request.method ne "GET" and http.request.method ne "HEAD")
)
or
(
starts_with(lower(http.request.uri.path), "/api/")
and not (http.request.method in { "GET" "POST" "PUT" "PATCH" "DELETE" "OPTIONS" })
)
or
(
starts_with(lower(http.request.uri.path), "/api/")
and (http.request.method in { "POST" "PUT" "PATCH" })
and not (lower(http.request.headers["content-type"][0]) contains "application/json")
)
or
(
starts_with(lower(http.request.uri.path), "/admin")
and not cf.client.bot
)
or
(
lower(http.request.uri.path) in {
"/.env" "/.env.local" "/.env.dev" "/.env.prod" "/.env.production"
"/.git/config" "/.git/HEAD" "/.git/index"
"/.svn/entries" "/.hg/store"
"/.ds_store" "/.htaccess" "/.htpasswd"
"/composer.json" "/composer.lock"
"/package.json" "/package-lock.json" "/yarn.lock" "/pnpm-lock.yaml"
"/id_rsa" "/id_rsa.pub"
"/phpinfo.php" "/server-status"
"/wp-login.php" "/wp-config.php" "/xmlrpc.php"
"/config.php"
}
)
or
(
starts_with(lower(http.request.uri.path), "/wp-admin")
or starts_with(lower(http.request.uri.path), "/phpmyadmin")
or starts_with(lower(http.request.uri.path), "/pma")
or starts_with(lower(http.request.uri.path), "/cgi-bin")
or starts_with(lower(http.request.uri.path), "/.git")
or starts_with(lower(http.request.uri.path), "/.svn")
or starts_with(lower(http.request.uri.path), "/.hg")
)
or
(
lower(http.request.uri.path) contains "../"
or lower(http.request.uri.path) contains "..%2f"
or lower(http.request.uri.path) contains "%2e%2e%2f"
or lower(http.request.uri.path) contains "%2f..%2f"
or lower(http.request.uri.path) contains "%5c..%5c"
)
or
(
lower(http.user_agent) contains "sqlmap"
or lower(http.user_agent) contains "acunetix"
or lower(http.user_agent) contains "nikto"
or lower(http.user_agent) contains "masscan"
or lower(http.user_agent) contains "nmap"
or lower(http.user_agent) contains "zgrab"
or lower(http.user_agent) contains "gobuster"
or lower(http.user_agent) contains "dirbuster"
or lower(http.user_agent) contains "feroxbuster"
or lower(http.user_agent) contains "wpscan"
)
or
(
http.user_agent eq ""
or len(http.user_agent) lt 8
)
or
(
cf.threat_score gt 20
)

说明

  • 静态区方法锁(第一块)
    • 只对“非 /api 且非 /admin”的页面区生效:静态页面只允许 GET/HEAD。
    • 价值:既保护静态区不被乱 POST,又不会误伤 API/后台这种本来就需要 POST 的区域。
    • 拦截方向:阻断静态区写入探测、框架路由探测、上传尝试。
  • API 方法白名单(第二块)
    • 只允许常规 REST 方法,阻断 TRACE/CONNECT/PROPFIND 等非常规方法探测。
    • 拦截方向:阻断网关/代理差异探测与奇技淫巧的探测请求。
  • API 写操作强制 JSON(第三块)
    • 你的 API 写入若规范化为 JSON,这块可以过滤掉大量垃圾表单提交、multipart 上传探测。
    • 拦截方向:阻断“非预期内容类型”的低成本攻击脚本。
  • 后台区挑战(第四块)
    • not cf.client.bot 的作用是让已识别的“好 Bot”不被挑战;其余访问后台触发挑战/拦截。
    • 拦截方向:显著提高爆破与扫描成本,兼顾真人可用性(比纯 Block 更稳)。
  • 敏感文件/高危目录/穿越/UA/威胁分数(后续块)
    • 这是全站“防扫描外壳”,核心目标是:敏感泄露入口、版本库入口、面板入口、穿越探测、明显扫描器、威胁分数高的请求。
    • 拦截方向:压制扫描字典与自动化攻击前置流量,减少后端负载与日志。

注意

  • 如果你的 API 支持 application/x-www-form-urlencodedmultipart/form-data,第三块会误杀;那就删掉第三块或加白名单路径。

3:WordPress 站(推荐动作:Managed Challenge)

这套不靠正则,专打 WP 常见爆破/探测入口,配置后立即见效。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
(
lower(http.request.uri.path) in {
"/wp-config.php"
"/wp-login.php"
"/xmlrpc.php"
"/.env" "/.env.local" "/.env.prod" "/.env.production"
"/.git/config" "/.git/HEAD" "/.svn/entries"
}
)
or
(
starts_with(lower(http.request.uri.path), "/wp-admin")
or starts_with(lower(http.request.uri.path), "/wp-includes")
)
or
(
starts_with(lower(http.request.uri.path), "/phpmyadmin")
or starts_with(lower(http.request.uri.path), "/pma")
)
or
(
lower(http.request.uri.path) contains "../"
or lower(http.request.uri.path) contains "%2e%2e%2f"
or lower(http.request.uri.path) contains "%2f..%2f"
)
or
(
lower(http.user_agent) contains "wpscan"
or lower(http.user_agent) contains "sqlmap"
or lower(http.user_agent) contains "acunetix"
or lower(http.user_agent) contains "nikto"
or lower(http.user_agent) contains "gobuster"
or lower(http.user_agent) contains "dirbuster"
)
or
(
http.user_agent eq ""
or len(http.user_agent) lt 8
)
or
(
cf.threat_score gt 20
)

说明

  • WP 核心敏感入口块(wp-login/xmlrpc/wp-config
    • /wp-login.php:爆破入口核心命中点。
    • /xmlrpc.php:历史上被大量用于爆破与放大类调用(是否 Block 取决于你是否需要 Jetpack/APP)。
    • /wp-config.php:正常永远不该被访问到,命中几乎等同“明确恶意”。
    • 拦截方向:打掉爆破与敏感配置探测。
  • wp-admin/wp-includes 前缀块
    • 后台目录与核心代码目录探测,常见于漏洞利用前置探测。
    • 拦截方向:提高后台被暴露与被爆破的门槛。
  • phpMyAdmin/pma 前缀块
    • WP 站经常被顺带扫描数据库面板;正常不应公网可达。
    • 拦截方向:阻断面板探测与弱口令爆破入口。
  • 穿越块 + 扫描器 UA + 威胁分数
    • 进一步压制“批量扫描 + 注入探测 + 目录枚举”组合流量。
    • 拦截方向:减少被持续扫描的强度与频率。

AutoClip AI视频切片器封装包问题答疑

2025-08-15 10:00:00

111

Auto clip桌面版,基于原项目编译封装,我没有过多改动,封装了Win、Mac版,原项目请查看剪辑神器-AutoClip智能视频切片器
编译包网盘下载:https://pan.quark.cn/s/b9b8928c311b
包含dmg、exe、zip绿色包,使用mac封装并编译了前后端为可执行文件,加入了自动创建uploads文件夹的逻辑。
以下为你可能遇到的问题及解答。

问题1:出现加载项目失败,无法保存key

说明后端未运行,检查是否有杀毒软件或自己不小心删除了后端文件,win端在resources文件夹内,可手动启动检查。

问题2:无法下载视频切片或用api剪辑处理视频

检查安装包根目录是否缺少ffmpeg或电脑本地有没有安装ffmpeg,下载安装-https://ffmpeg.org/download.html

问题3:MAC选哪个版本?

提供了arm-m1芯片版本和通用版本,如果是英特尔芯片选通用

问题4:后端运行后依然报错加载项目失败

检查是否有遗留的下载视频文件记录,删除记录。

问题5:使用自定义模型切片失败

能满足切片处理及字幕提示词处理的大模型少,如果你自定义的满足不了,你需要切换回默认可以使用的模型

问题6:封装包内python版本和本地的python版本有冲突

使用命令python –version查看本地版本,我使用Python 3.13.5进行的编译,所以如果有冲突,原则上你需要下载不低于该版本的python

1755236563484

最后,声明虽然封装包是我编译的,但原项目作者不是我,关于源码及后续项目进展等的一些问题,你需要到github仓库去提

Memory-不负时光摄影相册程序

2025-08-10 10:00:00

不负时光摄影相册

简介

一个瀑布流摄影图库,也是专为摄影师做的独立网络相册程序,它是基于Moment二次开发的,提供前后端分离、docker部署方式,支持云端一键部署,加入了丰富个性化的一些功能,你可以本地使用或上传至oss存储,同样支持添加视频及一键备份等

演示:https://memory.noisework.cn

开源:https://github.com/rcy1314/Memory

桌面端下载:https://github.com/rcy1314/Memory/releases

网盘下载:https://pan.quark.cn/s/6477646cfa30

注意:我只有mac,m1芯片下运行正常,如果如果你运行后首页显示Network eroor的情况属于后端未运行,在最新版本的软件包内实际有后端文件,如果未自动运行,可手动运行解决报错,或者下载源码后执行后端命令,后端:python3 run.py

1754074172331

1754089150106

特征

  • 支持 linux/amd64 和 linux/arm64 两个平台
  • 支持本地、S3/R2三种oss存储上传方式
  • 支持多种数据库的选择连接,支持一键迁移,一键备份本地数据库
  • 自适应瀑布流布局,参考pinterest
  • 支持首页多张封面大图的自定义设置
  • 支持相册合集,首页会有合集中图片数显示
  • 支持添加B站、YouTube、直链视频,可自动识别B站、YouTube链接并解析相关视频信息
  • 支持后台批量上传不同存储渠道
  • 支持上传图片前的压缩和一键转换为webp格式的功能

加载特性

缩略图后缀优化

  • 系统支持配置 thumbnail_suffix 参数,会自动在原图URL后添加缩略图后缀
  • 如果配置了缩略图后缀,封面会使用 image.image_url + thumbnail_suffix 的优化版本
  • 如果没有配置后缀,则直接使用原图URL

响应式尺寸优化

封面图片会根据设备类型和网络状况动态调整参数:

移动端优化:

  • 尺寸:180×250像素

  • 质量:慢网络30%,正常网络40%

  • URL参数: w=180&h=250&fit=crop&auto=compress,format&q=30-40
    平板端优化:

  • 尺寸:250×350像素

  • 质量:慢网络35%,正常网络45%

  • URL参数: w=250&h=350&fit=crop&auto=compress,format&q=35-45
    桌面端优化:

  • 尺寸:200×280像素

  • 质量:慢网络35%,正常网络45%

  • URL参数: w=200&h=280&fit=crop&auto=compress,format&q=35-45

智能加载策略

  • 懒加载 :使用 IntersectionObserver 实现视口内才加载
  • 并发控制 :限制同时加载的图片数量,避免网络拥塞
  • 预加载 :优先加载前4-6张封面图片
  • 错误处理 :加载失败时自动回退到原图
  • 格式优化 :自动转换为WebP等现代格式

性能优化特性

  • 硬件加速 :使用 transform: translateZ(0) 启用GPU加速
  • 渐进式加载 :显示加载动画和进度提示
  • 缓存机制 :避免重复加载相同图片
  • 网络检测 :根据3G/4G/WiFi调整加载策略

1754074193119

前后端运行

前端:web目录下npm run dev

后端:python run.py

docker运行

1
2
3
4
5
6
7
8
9
docker run -d \
--name memory \
--platform linux/amd64 \
-p 4314:9999 \
--add-host host.docker.internal:host-gateway \
-e DB_HOST=host.docker.internal \
-e EXTERNAL_DB_HOST=host.docker.internal \
-e TZ=Asia/Shanghai \
noise233/memory:latest

如果你想挂载本地数据库文件,比如:

1
2
3
4
5
6
7
8
9
10
docker run -d \
--name memory \
--platform linux/amd64 \
-p 4314:9999 \
-v /www/wwwroot/memory.noisework.cn/data:/app/data \
--add-host host.docker.internal:host-gateway \
-e DB_HOST=host.docker.internal \
-e EXTERNAL_DB_HOST=host.docker.internal \
-e TZ=Asia/Shanghai \
noise233/memory:latest

连接 Neon 免费数据库的 Docker 运行命令

1
2
3
4
5
6
7
docker run -d \
--name memory \
--platform linux/amd64 \
-p 4314:9999 \
-e DATABASE_URL="postgresql://username:[email protected]/dbname?sslmode=require" \
-e TZ=Asia/Shanghai \
noise233/memory:latest

docker-compose

由于桌面版和docker后端api有冲突,docker请使用/api/v1,如果你想自己构建docker:

web/.env.productuon请修改为

1
2
3
4
5
6
7
8
# 资源公共路径,需要以 /开头和结尾
VITE_PUBLIC_PATH = '/'

# 是否启用代理
VITE_USE_PROXY = true

# base api
VITE_BASE_API = '/api/v1'

web/.env.development请修改为

1
2
3
4
5
6
7
8
9
# Docker环境下的前端配置
# 资源公共路径,需要以 /开头和结尾
VITE_PUBLIC_PATH = '/'

# 是否启用代理 - Docker环境下不需要代理
VITE_USE_PROXY = false

# base api - Docker环境下使用相对路径
VITE_BASE_API = '/api/v1'

然后运行

1
docker-compose up -d

构建跨平台桌面端时

web/.env.productuon请修改为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Tauri桌面端环境配置
# 资源公共路径,需要以 /开头和结尾
VITE_PUBLIC_PATH = '/'

# 桌面端API配置 - 指向本地后端服务
VITE_BASE_API = 'http://127.0.0.1:9999/api/v1'

# 桌面端不使用代理
VITE_USE_PROXY = false

# 是否启用压缩
VITE_USE_COMPRESS = true

# 压缩类型
VITE_COMPRESS_TYPE = gzip

web/.env.development请修改为

1
2
3
4
5
6
7
8
9
# Docker环境下的前端配置
# 资源公共路径,需要以 /开头和结尾
VITE_PUBLIC_PATH = '/'

# 是否启用代理
VITE_USE_PROXY = true

# base api
VITE_BASE_API = 'http://127.0.0.1:9999/api/v1'

🚀 一键部署

本地快速部署

1
2
# 使用一键部署脚本
./deploy.sh

云平台部署

我们支持多种云平台的一键部署,详细说明请查看:

📖 完整部署指南

支持的平台:

  • Zeabur - 使用 zeabur.json
  • Fly.io - 使用 fly.toml
  • Railway - 使用 railway.json
  • Render - 使用 render.yaml
  • Docker / Docker Compose - 本地部署

双平台构建发布

1
docker buildx build --platform linux/amd64,linux/arm64 -t noise233/memory:latest --push --no-cache .

Podman(替代Docker)

1
2
3
4
podman manifest create noise233/memory:latest
podman build --platform linux/amd64 --manifest noise233/memory:latest .
podman build --platform linux/arm64 --manifest noise233/memory:latest .
podman manifest push noise233/memory:latest
1
2
3
4
podman manifest create noise233/memory:dev
podman build --platform linux/amd64 --manifest noise233/memory:dev .
podman build --platform linux/arm64 --manifest noise233/memory:dev .
podman manifest push noise233/memory:dev

Docker下使用

  • 使用<服务器IP地址>:4314域名访问相册
  • 后台管理:<服务器IP地址>:4314/admin/<域名>/admin
  • 默认管理员账号:admin,密码:123456,请登录后及时修改用户名和密码

后台配置使用指南

  • 系统设置

    通用设置为后台工作台显示设置

  • 网站设置

    支持icon、logo、网站名称、封面自定义设置

  • 内容设置

    首页每次加载图片数为每一页加载显示的图片数,支持略缩图的后缀,但不要轻易设置

  • 存储设置

    允许上传-选项很重要,打开才支持图片的上传设置(包括批量上传也依赖这个开关)

    本地存储-默认路径为程序内的images文件夹,不要轻易设置url前缀,因为程序自动识别上传链接,如果你有自定义网址,可以当cdn加速前缀使用

    备份相册-检测并打包下载本地上传的所有图片,如果本地上传过多图片速度会慢

    备份数据库-仅限本地存储模式,可一键下载程序的数据库文件

    云端存储-支持cloudflareR2\S3及兼容oss存储,以cloudflarer2为例:
    前往https://cloudflare.com注册,并在账户主页找到“R2对象存储”,点击“创建存储桶”并设置存储桶名称并点击api设置管理密钥,再点击将r2和api配合使用面板记录账户ID

    1754664940776

    222eq

    点进新创建的存储桶,找到设置并点击可查看具体存储信息

    回到后台页:

    端点(Endpoint)-对应S3 API

    区域-对应位置,只填写英文如APAC

    访问ID-对应帐户ID,在api设置将r2和api配合使用面板中

    访问密钥-API密钥

    存储桶(Bucket)-存储桶名称

    存储路径-默认按年月日路径:{year}/{month}/{timestamp}_{filename}

    URL前缀-对应公共开发 URL或者自定义域名

    URL后缀-非必要不用填写

  • Token设置

    是为外部链接相册使用的,是为未来做插件而准备的,目前未完善

  • 数据库设置

    你可以选择不同的数据库连接类型,支持本地SQlite、postgreSQL、mysql

    Neon免费数据库为例进入网站面板,点击Connect to your database,查看链接信息

    比如:postgresql://nedb_owner:[email protected]/neondb?sslmode=require&cha_binding=rire
    主机地址-为@后的直到/的地址(ep-dark-wid-ae7n-pooler.c-2.us-est-2.aws.n.tech)

    端口-5432

    数据库名-Database选项下你创建的数据库名

    用户名-Role选项下显示的同时也是//之后:之前的nedb_owne

    密码-为@符合之前的n44g_fFkBjTxr6

    注意:点击测试连接需要最后保存,迁移数据库是增量迁移,如果字段相同不会覆盖,数据过多时花费时间会久

  • 内容管理

    如果是本地上传的图片在列表页面点击删除时会一同删除源文件,链接图片则不会

    使用批量上传前请确保已开启“图片上传”选项并选择了本地还是云端存储

1754122928815

更新

  • 增加多平台数据库连接及一键迁移

1754070550620

  • 增加用户token设置,目前认证方式:JWT token+API token

1754073880268

  • 增加批量上传案例脚本
  • 优化手机端渲染速度及布局
  • 优化首页缓存逻辑,浏览器默认24小时内缓存
  • 添加载入动画及提示弹窗
  • 增加本地上传和备份功能
  • 增加压缩转换图片的功能选项

预览

后台页

1754126989821

1754127006714

视频上传自动识别

1754667335195

点击图片查看

1754544187757

视频播放

1754543470663

🔨 构建说明

✅ 【点击展开】

桌面应用构建

本项目支持构建为桌面应用程序,基于 Tauri 框架开发。

环境要求

通用要求:

  • Node.js 16+
  • npm 或 yarn
  • Rust 1.70+

Windows 构建要求:

  • Windows 10/11
  • Microsoft C++ Build Tools 或 Visual Studio 2019/2022
  • Windows SDK

macOS 构建要求:

  • macOS 10.15+
  • Xcode Command Line Tools

Linux 构建要求:

  • Ubuntu 18.04+ / Debian 10+ / Fedora 32+ 等
  • 系统开发工具包

构建步骤

  1. 安装依赖

    1
    2
    3
    4
    5
    6
    7
    8
    # 进入前端目录
    cd web

    # 安装 Node.js 依赖
    npm install

    # 安装 Tauri CLI
    npm install -g @tauri-apps/cli
  2. 开发模式运行

    1
    2
    # 启动开发服务器
    npm run tauri dev
  3. 生产构建

    1
    2
    # 构建桌面应用
    npm run tauri build

Windows 平台构建

环境配置:

  1. 安装 Rust

    1
    2
    3
    4
    # 下载并安装 Rust
    # 访问 https://rustup.rs/ 下载安装程序
    # 或使用 winget
    winget install Rustlang.Rustup
  2. 安装 Microsoft C++ Build Tools

    1
    2
    3
    4
    5
    # 使用 winget 安装
    winget install Microsoft.VisualStudio.2022.BuildTools

    # 或下载 Visual Studio Installer
    # 选择 "C++ build tools" 工作负载
  3. 安装 Windows SDK

    1
    2
    3
    # 通过 Visual Studio Installer 安装
    # 或使用 winget
    winget install Microsoft.WindowsSDK

构建命令:

1
2
3
4
5
6
7
8
9
10
11
# 进入项目目录
cd web

# 安装依赖
npm install

# 构建 Windows 应用
npm run tauri build

# 构建特定目标(可选)
npm run tauri build -- --target x86_64-pc-windows-msvc

输出文件位置:

  • 可执行文件:web/src-tauri/target/release/memory-app.exe
  • 安装包:web/src-tauri/target/release/bundle/msi/Memory-不负时光相册程序_1.0.0_x64_en-US.msi
  • 便携版:web/src-tauri/target/release/bundle/nsis/Memory-不负时光相册程序_1.0.0_x64-setup.exe

macOS 平台构建

1
2
3
4
5
6
7
8
9
10
11
12
# 进入项目目录
cd web

# 安装依赖
npm install

# 构建 macOS 应用
npm run tauri build

# 构建特定架构(可选)
npm run tauri build -- --target aarch64-apple-darwin # Apple Silicon
npm run tauri build -- --target x86_64-apple-darwin # Intel Mac

输出文件位置:

  • 应用包:web/src-tauri/target/release/bundle/macos/Memory-不负时光相册程序.app
  • DMG 安装包:web/src-tauri/target/release/bundle/dmg/Memory-不负时光相册程序_1.0.0_aarch64.dmg

Linux 平台构建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 安装系统依赖(Ubuntu/Debian)
sudo apt update
sudo apt install -y libwebkit2gtk-4.0-dev build-essential curl wget libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev

# 安装系统依赖(Fedora)
sudo dnf install webkit2gtk3-devel openssl-devel curl wget libappindicator-gtk3-devel librsvg2-devel

# 进入项目目录
cd web

# 安装依赖
npm install

# 构建 Linux 应用
npm run tauri build

输出文件位置:

  • 可执行文件:web/src-tauri/target/release/memory-app
  • AppImage:web/src-tauri/target/release/bundle/appimage/memory-app_1.0.0_amd64.AppImage
  • DEB 包:web/src-tauri/target/release/bundle/deb/memory-app_1.0.0_amd64.deb

跨平台构建

如需在一个平台上构建多个平台的应用,可以使用 GitHub Actions 或其他 CI/CD 服务。

🚀 GitHub Actions 自动构建

本项目已配置 GitHub Actions 工作流,支持自动构建多平台桌面应用:

工作流文件:

  • .github/workflows/build-windows.yml - 专门构建 Windows 平台
  • .github/workflows/build-multiplatform.yml - 构建所有平台(Windows、macOS、Linux)

触发方式:

1
2
3
4
5
6
7
8
# 1. 推送代码自动构建
git push origin main

# 2. 创建标签自动发布
git tag v1.0.0
git push origin v1.0.0

# 3. 手动触发(在 GitHub Actions 页面)

构建产物:

  • Windows: MSI 安装包、NSIS 便携版、可执行文件
  • macOS: DMG 安装包、.app 应用包(Universal Binary)
  • Linux: AppImage、DEB 包、可执行文件

配置要求:

在 GitHub 仓库设置中添加以下 Secrets(可选):

  • TAURI_PRIVATE_KEY: Tauri 应用签名私钥
  • TAURI_KEY_PASSWORD: 私钥密码

使用方法:

  1. Fork 本仓库到你的 GitHub 账户
  2. 推送代码或创建标签
  3. 在 Actions 页面查看构建进度
  4. 从 Artifacts 或 Releases 下载构建产物

详细说明请查看:GitHub Actions 构建指南

手动构建示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# .github/workflows/build.yml 示例
name: Build Desktop App

on:
push:
tags: ['v*']

jobs:
build:
strategy:
matrix:
platform: [macos-latest, ubuntu-20.04, windows-latest]

runs-on: ${{ matrix.platform }}

steps:
- uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 18

- name: Install Rust
uses: dtolnay/rust-toolchain@stable

- name: Install dependencies (Ubuntu)
if: matrix.platform == 'ubuntu-20.04'
run: |
sudo apt update
sudo apt install -y libwebkit2gtk-4.0-dev build-essential curl wget libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev

- name: Install frontend dependencies
run: |
cd web
npm install

- name: Build Tauri app
run: |
cd web
npm run tauri build

构建配置

构建配置文件位于 web/src-tauri/tauri.conf.json,可以自定义:

  • 应用名称和版本
  • 图标和资源
  • 窗口设置
  • 构建目标
  • 安装包类型

故障排除

常见问题:

  1. Rust 编译错误

    1
    2
    3
    4
    5
    6
    # 更新 Rust 工具链
    rustup update

    # 清理构建缓存
    cd web/src-tauri
    cargo clean
  2. Windows 构建失败

    • 确保安装了正确版本的 Visual Studio Build Tools
    • 检查 Windows SDK 是否正确安装
    • 尝试以管理员身份运行命令
  3. 依赖安装失败

    1
    2
    3
    4
    5
    6
    # 清理 npm 缓存
    npm cache clean --force

    # 删除 node_modules 重新安装
    rm -rf node_modules package-lock.json
    npm install

其它

Docker 环境下外部数据库连接配置指南

二次开发时请注意该项目使用v-model:value语法编写

桌面版运行报错

如果你运行后首页显示Network eroor的情况属于后端未运行,在最新版本的软件包内实际有后端文件,如果未自动运行,可手动运行解决报错,或者下载源码后执行后端命令,后端:python3 run.py

仓库根目录中有很多python脚本是我用来测试api的非必要可删除文件

如果云端使用请上传压缩或webp格式图片,避免加载慢

Belin Doc-一键完成高质量文档翻译

2025-08-10 10:00:00

Belin Doc 是一款由 AI 驱动的免费、无限制 文档翻译工具。无需注册,没有限制。

截止发文,该产品属于新产品,未看到上架定价,未登录时可每日使用1000次,但任务有排队

官网:https://belindoc.com

1754733163376

功能

  1. 文档翻译:支持多种格式的文档翻译,包括 PDF、DOCX、PPTX、XLSX、TXT、EPUB、JPG、JPEG、PNG 等。
  2. 格式保持:能够保持原文的格式排版,包括图片、表格、公式等复杂格式。
  3. 多语言支持:支持 60 多种语言的输入和输出。
  4. 多模型选择:用户可以选择 ChatGPT、Claude、Gemini、DeepSeek 等多种顶尖大模型进行翻译。
  5. 翻译加速:用户可以与好友分享,各得 5 次翻译加速与 500 页翻译额度。
  6. 隐私保护:采用零数据保留策略,原文和译文不会存储在服务器上。
  7. 无需注册:无需创建账户或登录,即可直接使用翻译功能。
  8. 翻译扫描件:支持翻译扫描版 PDF,利用 OCR 技术识别图片中的文字。
  9. 邮件通知:用户可以设置邮件通知,以便及时了解翻译进度。

特点

  1. 完全免费:没有任何使用限制,无需支付费用或提供信用卡信息。
  2. 高效翻译:由顶尖的文档格式解析技术和大模型驱动,翻译速度快,质量高。
  3. 隐私优先:重视用户隐私,不存储用户的原文和译文,不收集个人信息。
  4. 用户体验:界面直观易用,操作简单,用户可以轻松上手。
  5. 社区支持:拥有庞大的用户社区,用户可以分享使用经验和反馈。
  6. 持续更新:计划定期更新 AI 模型、格式解析算法、支持的文档格式和用户界面。

优势

  • 零成本:完全免费,无需支付任何费用。
  • 高格式还原度:能够保持原文的格式排版,减少二次处理的工作量。
  • 强大的语言识别能力:支持多种语言的翻译,满足不同用户的需求。
  • 隐私保护:零数据保留策略,保障用户数据安全。
  • 多模型选择:用户可以根据需求选择不同的翻译模型,获得更优质的翻译结果。

适用场景

  • 学术研究:帮助研究人员快速翻译学术文献。
  • 商业文档:翻译商业计划书、产品说明书等。
  • 财务报表:翻译财务报表和相关文件。
  • 跨境电商:翻译产品规格说明书、营销文案等。
  • 医药行业:翻译医药产品说明书、研究报告等。

翻译效果

1754733925647

AI Movie Clip - 基于python的智能视频剪辑系统

2025-08-10 10:00:00

1754825674517

一个基于人工智能的自动视频剪辑系统,能够自动分析视频内容并根据用户需求生成编辑后的视频。该项目为视频剪辑mcp提供了一个新的研究方向,它使用python脚本来分析和处理视频,同时你可以编辑自己设定的模版进行一键创作。

开源:https://github.com/LumingMelody/Ai-movie-clip

功能特性

  • 🎬 视频自动分析:使用CV和ML模型分析视频内容
  • 🎨 多样化模板:支持多种视频风格模板(社交媒体、商业、教育等)
  • 🤖 AI内容生成:集成文本生成、图像生成和语音合成
  • 🎭 特效和转场:丰富的视频效果和转场动画
  • 🚀 API服务:提供FastAPI接口,支持批处理
  • 🔌 MCP集成:支持Model Context Protocol扩展

快速开始

环境要求

  • Python 3.8+
  • FFmpeg(用于视频处理)
  • CUDA(可选,用于GPU加速)

安装步骤

  1. 克隆项目
1
2
git clone https://github.com/LumingMelody/Ai-movie-clip.git
cd Ai-movie-clip
  1. 安装依赖
1
pip install -r requirements.txt
  1. 配置环境变量

复制环境变量模板并填写您的配置:

1
cp .env.example .env

编辑 .env 文件,填入您的API密钥:

1
2
3
4
5
6
7
8
# AI Model API Keys
DASHSCOPE_API_KEY=your_dashscope_api_key_here
OPENAI_API_KEY=your_openai_api_key_here

# OSS Configuration (Alibaba Cloud)
OSS_ACCESS_KEY_ID=your_oss_access_key_id_here
OSS_ACCESS_KEY_SECRET=your_oss_access_key_secret_here
OSS_BUCKET_NAME=your_bucket_name_here

1754825890851

获取API密钥

使用方法

命令行工具

1
2
3
4
5
6
7
8
# 分析视频
python main.py analyze video.mp4 --output analysis.json

# 自动剪辑视频
python main.py edit video.mp4 --duration 30 --style "抖音风"

# 查看更多选项
python main.py --help

Web API服务

1
2
3
4
5
6
7
# 启动FastAPI服务器
python app.py
# 或
uvicorn app:app --reload

# 访问API文档
# http://localhost:8000/docs

API示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import requests

# 分析视频
response = requests.post(
"http://localhost:8000/analyze",
files={"file": open("video.mp4", "rb")},
data={"duration": 30}
)

# 生成编辑视频
response = requests.post(
"http://localhost:8000/edit",
json={
"video_path": "path/to/video.mp4",
"template": "douyin",
"duration": 30
}
)

项目结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Ai-movie-clip/
├── core/ # 核心功能模块
│ ├── orchestrator/ # 工作流编排
│ ├── analyzer/ # 视频分析
│ ├── ai/ # AI模型集成
│ ├── clipeffects/ # 视频特效
│ ├── cliptransition/ # 转场效果
│ ├── clipgenerate/ # AI内容生成
│ └── cliptemplate/ # 视频模板
├── templates/ # Jinja2模板文件
├── config/ # 配置文件
├── main.py # CLI入口
├── app.py # API服务器
└── requirements.txt # 依赖列表

高级功能

自定义模板

templates/ 目录下创建新的模板文件:

1
2
3
4
# templates/custom/my_template.j2
产品名称:{{ product_name }}
特点:{{ features }}
价格:{{ price }}

扩展AI模型

core/ai/ai_model_caller.py 中添加新的模型:

1
2
3
def call_custom_model(prompt):
# 实现您的模型调用逻辑
pass

其它

该项目属于新的,还有很多不完善的地方,但提供的思路是好的,如将提示词精炼后给到大模型时ai执行指令调用工具剪辑的流程

示例提示词模板(给大模型的prompt):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
你是一个智能视频剪辑助手。现在我给你以下信息:

视频内容类型:{content_type}
视频片段数量:{num_videos}
视频分析结果:
- 场景切换频繁程度:{scene_change_freq}
- 是否包含人声:{has_speech}
- 是否包含人脸:{face_present}
- 主要对象:{main_objects}

请根据以上信息,生成一个适合该类型视频的剪辑策略,并输出具体的函数调用指令。

你的输出格式如下:
{
"thought_process": [
"第一步:识别出视频高潮部分在第10-15秒。",
"第二步:裁剪冗余开头和结尾。",
...
],
"actions": [
{"function": "cut", "start": 0, "end": 5},
{"function": "add_transition", "type": "fade", "start": 5, "duration": 1},
...
]
}

调用工具执行剪辑(使用 FFmpeg + Python)

支持的函数示例:

函数名 参数 功能
cut(start, end) 开始时间、结束时间 裁剪片段
add_transition(type, start, duration) 类型、开始时间、持续时间 添加转场
speedup(start, end, factor) 区间、加速倍数 加速播放
apply_filter(filter_name, start, end) 滤镜名称、区间 应用滤镜
concatenate(clips) 片段列表 合并多个片段

示例调用(使用 subprocess 调用 FFmpeg):

1
2
3
4
5
import subprocess

def cut_video(input_path, output_path, start, end):
cmd = f"ffmpeg -i {input_path} -ss {start} -to {end} -c copy {output_path}"
subprocess.run(cmd, shell=True)

通过完善不同的工作流就有了初步的mcp化功能,你可以拿这个项目作进一步的完善和研究