发布时间:2026/6/16 17:58:22
从“复制链接→打开APP“到“一键解析“:我做了个短视频去水印工具
一、为什么要做这个工具不知道你有没有遇到过这种情况刷抖音/快手看到一个有意思的视频想保存下来分享给朋友结果点分享后要么是复制链接要么保存的视频带个大大的水印还有平台 logo体验特别差。网上搜了一圈要么是收费的要么就是各种弹窗广告用起来闹心。作为一个程序员这能忍自己撸一个吧核心痛点总结平台自带保存功能有水印第三方工具要么收费要么广告多用户体验差操作繁琐二、核心功能说干就干这个工具支持以下平台平台支持情况备注抖音✅ 视频图文支持无水印视频和图文下载快手✅ 视频支持无水印视频下载小红书✅ 视频图文支持笔记和视频下载B站✅ 视频支持B站视频下载微博✅ 视频支持微博视频下载TikTok✅ 视频支持国际版抖音YouTube✅ 视频支持YouTube视频下载Facebook✅ 视频支持Facebook视频下载皮皮虾✅ 视频支持皮皮虾视频下载主要特性 一键解析粘贴链接即可获取无水印视频 智能复制自动复制下载链接到剪贴板 在线预览支持视频在线播放预览 多平台兼容支持Windows/Linux部署⚡ 快速响应解析速度快体验流畅三、踩坑实录那些让我头大的问题坑1分享文案里的 URL 被各种符号包裹用户复制的分享文案长这样5.38 复制打开抖音看看【卡西爸啊的作品】... https://v.douyin.com/xxxx/ :3pm mD.uS你没看错链接前后有反引号一开始我的正则直接提取结果 URL 后面带个反斜杠请求直接 404。解决方案加了个sanitize_url函数循环清理 URL 首尾的特殊字符defsanitize_url(self,url):ifnoturl:returnNoneurlurl.strip()# 清理首尾的反引号、引号、括号、标点符号等urlre.sub(r^[\\(\[\{【\\\\]|[\\)\]\}】,。!?;:\\\\]$,,url)# 循环清理防止多层包裹whileTrue:clean_urlre.sub(r[\】,。!?;:\\\\]$,,url)ifclean_urlurl:breakurlclean_urlreturnurl坑2HTTP 环境下复制功能失效部署到生产环境后发现点击复制链接按钮没反应。查了下控制台原来是navigator.clipboard只在 HTTPS 环境下才能用HTTP 环境直接拒绝访问。解决方案加个降级方案用传统的execCommandfunctionfallbackCopyText(text){consttextareadocument.createElement(textarea);textarea.valuetext;textarea.style.positionfixed;textarea.style.opacity0;textarea.style.left-9999px;document.body.appendChild(textarea);textarea.select();constsuccessfuldocument.execCommand(copy);document.body.removeChild(textarea);returnsuccessful;}// 优先用 clipboard API失败了再用 execCommandif(navigator.clipboardwindow.isSecureContext){navigator.clipboard.writeText(text).then(...).catch((){fallbackCopyText(text);});}else{fallbackCopyText(text);}坑3视频播放不了浏览器控制台报混合内容错误这是最头疼的一个问题。日志显示解析成功视频链接也拿到了但页面上视频就是加载不出来。控制台报错The file at ‘blob: http://xxx/…’ was loaded over an insecure connection.原因是抖音的视频链接有 CORS 限制而且在 HTTP 页面加载某些外部资源会被浏览器的混合内容策略拦截。解决方案加了个视频代理接口服务器端先下载视频再流式传输给前端app.route(/api/video-proxy,methods[GET])defvideo_proxy():urlrequest.args.get(url,)ifnoturl:returnjsonify({error:缺少url参数}),400decoded_urlurllib.parse.unquote(url)headers{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64)...,Referer:https://www.douyin.com/,}# 支持 Range 请求让视频可以拖动进度条range_headerrequest.headers.get(Range)ifrange_header:headers[Range]range_header# 流式传输边下边播reqrequests.get(decoded_url,headersheaders,streamTrue,timeout60)defgenerate():forchunkinreq.iter_content(chunk_size8192):ifchunk:yieldchunkreturnResponse(stream_with_context(generate()),status206ifreq.status_code206else200,headers{Content-Type:req.headers.get(Content-Type,video/mp4),Content-Range:req.headers.get(Content-Range),Content-Length:req.headers.get(Content-Length),Accept-Ranges:req.headers.get(Accept-Ranges),})四、项目结构短视频去水印/ ├── app.py # Flask Web 应用主程序 ├── server.py # 生产环境入口Waitress服务器 ├── downloader.py # 统一下载器入口 ├── logger.py # 日志模块记录解析日志 ├── config.json # 配置文件端口、线程数等 ├── parsers/ # 各平台解析器 │ ├── base.py # 解析器基类抽象接口 │ ├── factory.py # 解析器工厂根据URL选择解析器 │ ├── douyin.py # 抖音解析器 │ ├── kuaishou.py # 快手解析器 │ ├── xiaohongshu.py # 小红书解析器 │ ├── bilibili.py # B站解析器 │ ├── weibo.py # 微博解析器 │ ├── tiktok.py # TikTok解析器 │ ├── youtube.py # YouTube解析器 │ ├── facebook.py # Facebook解析器 │ └── pipixia.py # 皮皮虾解析器 ├── utils/ # 工具函数 │ ├── url_utils.py # URL处理工具 │ ├── file_utils.py # 文件处理工具 │ └── network_utils.py # 网络请求工具 ├── static/ # 静态资源 │ ├── css/ # 样式文件 │ ├── js/ # JavaScript文件 │ └── images/ # 图片资源 ├── templates/ # HTML模板 │ └── index.html # 主页面模板 ├── 启动服务器.bat # 一键启动脚本Windows ├── 安装为Windows服务.bat # 生产环境部署脚本 └── requirements.txt # Python依赖清单架构说明MVC模式采用Flask框架前后端分离设计插件化解析器每个平台独立解析器易于扩展配置驱动通过config.json灵活配置服务器参数日志记录完善的日志系统便于问题排查五、快速上手环境要求Python 3.7pip 包管理工具Windows/Linux/macOS 系统本地运行# 1. 克隆项目如果有Gitgitclone https://github.com/yourusername/video-watermark-remover.gitcdvideo-watermark-remover# 2. 安装依赖pipinstall-rrequirements.txt# 3. 启动服务python server.py# 或者直接运行Flask应用python app.py启动成功后浏览器打开 http://127.0.0.1:9000 就能使用了。生产环境部署Windows 服务器部署推荐使用 NSSM 安装为系统服务下载 NSSMWindows服务管理器将 nssm.exe 放到 System32 目录或项目目录右键安装为Windows服务.bat以管理员身份运行服务会自动配置为开机自启Linux 服务器部署# 使用systemd管理服务sudocpvideo-watermark.service /etc/systemd/system/sudosystemctl daemon-reloadsudosystemctlenablevideo-watermarksudosystemctl start video-watermark端口配置默认端口是 9000可以通过三种方式修改方式一配置文件推荐{server:{host:0.0.0.0,port:8080,threads:8,debug:false,ssl:false}}方式二环境变量# WindowssetPORT8080setHOST0.0.0.0 python server.py# Linux/macOSexportPORT8080exportHOST0.0.0.0 python server.py方式三命令行参数python server.py--port8080--host127.0.0.1--threads4常见问题端口被占用修改config.json中的端口号依赖安装失败尝试使用国内镜像源pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple服务启动失败检查Python版本和依赖是否完整安装六、效果展示界面长这样简洁实用传送门点击一键直达七、一些感悟与总结做这个工具的过程中最深的体会是看似简单的功能生产环境部署时到处都是坑。技术收获正则表达式优化用户输入千奇百怪需要更健壮的URL提取逻辑浏览器兼容性不同浏览器、不同环境HTTP/HTTPS下的API差异安全策略应对CORS、混合内容策略、跨域限制的解决方案性能优化视频流式传输、Range请求支持、缓存策略经验教训本地测试一切正常 ≠ 生产环境也能正常运行用户输入永远比你想的更有创意浏览器的安全策略越来越严格需要提前规划日志系统是排查线上问题的关键未来规划功能扩展支持更多短视频平台性能优化增加缓存机制减少重复解析用户体验开发浏览器插件一键解析移动端适配开发移动端Web应用不过当你把这些坑一个个填完看到用户能顺利使用的时候那种成就感还是挺棒的。项目地址在线体验http://qushuiyin.51softwarebox.com/免责声明本工具仅供个人学习交流使用请勿用于商业用途。请尊重创作者的知识产权下载的内容请勿二次上传传播。使用本工具产生的任何后果由使用者自行承担。交流与贡献有问题或建议欢迎在评论区留言需要帮助可以在评论区留言或私信联系如果你觉得这篇文章对你有帮助欢迎点赞、收藏、关注有问题评论区交流~

相关新闻

Path of Building PoE2:流放之路2玩家的终极角色构建实验室
2026/6/16 17:58:22

Path of Building PoE2:流放之路2玩家的终极角色构建实验室

Path of Building PoE2:流放之路2玩家的终极角色构建实验室 【免费下载链接】PathOfBuilding-PoE2 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding-PoE2 当《流放之路2》的复杂天赋系统让无数玩家望而却步时,一个开源工具正在…

阅读更多
MapLibre GL JS第53课:用Web字体样式化标签
2026/6/16 17:58:22

MapLibre GL JS第53课:用Web字体样式化标签

&#x1f4cc; 学习目标 掌握用Web字体样式化标签的实现方法理解相关API的使用能够独立完成类似功能开发 &#x1f3af; 核心概念 将Web字体应用到样式的文本标签。 &#x1f4bb; 完 整 代 码 代码示例 <!DOCTYPE html> <html lang"en"> <head…

阅读更多
手把手教你构建企业级RAG智慧问答系统:融合MySQL关键词检索与Milvus语义检索的完整实践
2026/6/16 17:58:22

手把手教你构建企业级RAG智慧问答系统:融合MySQL关键词检索与Milvus语义检索的完整实践

手把手教你构建企业级RAG智慧问答系统&#xff1a;融合MySQL关键词检索与Milvus语义检索的完整实践本文基于传智教育EduRAG项目&#xff0c;深入剖析一个完整的RAG&#xff08;检索增强生成&#xff09;智慧问答系统的设计与实现。系统采用两级检索架构&#xff1a;第一级BM25关…

阅读更多
从“复制链接→打开APP“到“一键解析“:我做了个短视频去水印工具
2026/6/16 17:58:22

从“复制链接→打开APP“到“一键解析“:我做了个短视频去水印工具

一、为什么要做这个工具&#xff1f; 不知道你有没有遇到过这种情况&#xff1a;刷抖音/快手看到一个有意思的视频&#xff0c;想保存下来分享给朋友&#xff0c;结果点分享后要么是"复制链接"&#xff0c;要么保存的视频带个大大的水印&#xff0c;还有平台 logo&a…

阅读更多
Path of Building PoE2:流放之路2玩家的终极角色构建实验室
2026/6/16 17:58:22

Path of Building PoE2:流放之路2玩家的终极角色构建实验室

Path of Building PoE2&#xff1a;流放之路2玩家的终极角色构建实验室 【免费下载链接】PathOfBuilding-PoE2 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding-PoE2 当《流放之路2》的复杂天赋系统让无数玩家望而却步时&#xff0c;一个开源工具正在…

阅读更多
MapLibre GL JS第53课:用Web字体样式化标签
2026/6/16 17:58:22

MapLibre GL JS第53课:用Web字体样式化标签

&#x1f4cc; 学习目标 掌握用Web字体样式化标签的实现方法理解相关API的使用能够独立完成类似功能开发 &#x1f3af; 核心概念 将Web字体应用到样式的文本标签。 &#x1f4bb; 完 整 代 码 代码示例 <!DOCTYPE html> <html lang"en"> <head…

阅读更多
手把手教你构建企业级RAG智慧问答系统:融合MySQL关键词检索与Milvus语义检索的完整实践
2026/6/16 17:58:22

手把手教你构建企业级RAG智慧问答系统:融合MySQL关键词检索与Milvus语义检索的完整实践

手把手教你构建企业级RAG智慧问答系统&#xff1a;融合MySQL关键词检索与Milvus语义检索的完整实践本文基于传智教育EduRAG项目&#xff0c;深入剖析一个完整的RAG&#xff08;检索增强生成&#xff09;智慧问答系统的设计与实现。系统采用两级检索架构&#xff1a;第一级BM25关…

阅读更多
十、网络客户端工具curl, wget, ssh, scp, sftp, rsync
2026/6/16 17:58:22

十、网络客户端工具curl, wget, ssh, scp, sftp, rsync

目录 一、curl – 多功能网络传输工具 1.1 基本概念 1.2 常用选项与用法 1.2.1 查看网页内容 1.2.2 查看 HTTP 响应头&#xff08;不下载正文&#xff09; 1.2.3 跟随重定向 1.2.4 使用代理 1.2.5 保存网页/文件到本地 1.2.6 断点续传 1.2.7 限速下载 1.2.8 FTP 操作…

阅读更多
Python struct模块与二进制数据解析
2026/6/16 16:58:22

Python struct模块与二进制数据解析

Python struct模块与二进制数据解析struct模块在Python值和C结构体之间转换字节。pack将Python值打包为字节&#xff0c;unpack将字节解包为Python值。import struct# 打包&#xff1a;整数42打包为大端序4字节有符号整数 packed struct.pack(>i, 42) print(packed) # b\x0…

阅读更多
别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)
2026/6/16 18:17:55

别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)

超越BERT&#xff1a;用Transformers库高效实现文本相似度计算的三种实战方案在自然语言处理领域&#xff0c;文本相似度计算是信息检索、问答系统和推荐系统等应用的核心技术。传统方法如TF-IDF或Word2Vec已逐渐被基于Transformer的预训练模型所取代。Hugging Face的Transform…

阅读更多
Prompt Engineering:重构人机协作的工程化方法论
2026/6/14 0:57:30

Prompt Engineering:重构人机协作的工程化方法论

1. 项目概述&#xff1a;这不是“写提示词”&#xff0c;而是重构人机协作的底层逻辑“Prompt Engineering”这个词&#xff0c;这两年被讲得太多&#xff0c;也太轻飘。很多人把它理解成“给AI发指令的技巧”&#xff0c;甚至简化为“多加几个形容词”“换种说法再试一次”。我…

阅读更多
Anthropic提示层归零:模型即协议的工程实践
2026/6/16 0:39:53

Anthropic提示层归零:模型即协议的工程实践

1. 项目概述&#xff1a;这不是一次普通更新&#xff0c;而是一次架构级“蒸发”“Anthropic Just Shipped the Layer That’s Already Going to Zero”——这个标题一出来&#xff0c;我正在调试一个Claude调用链的终端前停了三秒。不是因为震惊&#xff0c;而是因为熟悉&…

阅读更多
2026 AI简历编辑平台深度测评与使用教程:ATS扫描、JD匹配、多版本投递怎么选?(首推 OfferGoose)
2026/6/16 0:57:58

2026 AI简历编辑平台深度测评与使用教程:ATS扫描、JD匹配、多版本投递怎么选?(首推 OfferGoose)

&#xff08;先给结论&#xff0c;节省时间&#xff09; 只想最快把简历“拉到及格线更贴JD”&#xff1a;优先从 鹅来面 开始——先做简历评分与岗位匹配度&#xff0c;再按建议改一版可投递稿。投递量很大、需要职位管理&#xff1a;偏向 Teal&#xff08;职位追踪 多份简历…

阅读更多
Java毕业设计-面向学生竞赛的团队组建与信息管控系统设计 SpringBoot 架构下高校竞赛团队管理系统的设计与实践(源码+LW+部署文档+全bao+远程调试+代码讲解等)
2026/6/16 0:57:58

Java毕业设计-面向学生竞赛的团队组建与信息管控系统设计 SpringBoot 架构下高校竞赛团队管理系统的设计与实践(源码+LW+部署文档+全bao+远程调试+代码讲解等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

阅读更多
Windows内存清理终极指南:Mem Reduct让你的电脑告别卡顿的简单方法
2026/6/16 0:57:58

Windows内存清理终极指南:Mem Reduct让你的电脑告别卡顿的简单方法

Windows内存清理终极指南&#xff1a;Mem Reduct让你的电脑告别卡顿的简单方法 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memre…

阅读更多
GIT修改用户名
2026/6/16 5:55:51

GIT修改用户名

在GIT中修改用户名可按以下步骤操作&#xff1a; 查看当前git的用户名&#xff0c;使用命令git config --list或git config user.name。修改git用户名&#xff0c;使用命令git config --global user.name "xxx&#xff08;新的用户名&#xff09;"&#xff0c;将其中…

阅读更多
Win11Debloat:让你的Windows系统重获新生的终极优化工具
2026/6/16 16:55:24

Win11Debloat:让你的Windows系统重获新生的终极优化工具

Win11Debloat&#xff1a;让你的Windows系统重获新生的终极优化工具 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …

阅读更多
技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践
2026/6/15 21:13:35

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践

技术深度解析&#xff1a;m4s-converter实现原理与B站缓存视频转换最佳实践 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一个…

阅读更多