mirror of
https://github.com/YaoFANGUK/video-subtitle-remover.git
synced 2026-05-17 19:03:28 +08:00
添加管理员权限请求和详细说明文档
- 配置PyInstaller使用uac_admin请求管理员权限 - 添加管理员权限使用说明文档 - 解释程序需要管理员权限的原因 - 提供用户使用指南和常见问题解答 - 强制添加.spec文件到版本控制(尽管.gitignore忽略) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
312
VideoSubtitleRemover_vsr.spec
Normal file
312
VideoSubtitleRemover_vsr.spec
Normal file
@@ -0,0 +1,312 @@
|
||||
# -*- mode: python ; coding: utf-8 -*-
|
||||
from PyInstaller.utils.hooks import collect_data_files
|
||||
from PyInstaller.utils.hooks import collect_dynamic_libs
|
||||
from PyInstaller.utils.hooks import copy_metadata
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
# 使用当前工作目录作为基准路径
|
||||
current_dir = os.getcwd()
|
||||
|
||||
datas = [
|
||||
(os.path.join(current_dir, 'backend/models/big-lama'), 'backend/models/big-lama'),
|
||||
(os.path.join(current_dir, 'backend/models/sttn-auto'), 'backend/models/sttn-auto'),
|
||||
(os.path.join(current_dir, 'backend/models/sttn-det'), 'backend/models/sttn-det'),
|
||||
(os.path.join(current_dir, 'backend/models/V5'), 'backend/models/V5'),
|
||||
(os.path.join(current_dir, 'backend/interface'), 'backend/interface'),
|
||||
(os.path.join(current_dir, 'backend/ffmpeg/win_x64/ffmpeg.exe'), 'backend/ffmpeg/win_x64'),
|
||||
(os.path.join(current_dir, 'config/config.json'), 'config'),
|
||||
(os.path.join(current_dir, 'design/vsr.ico'), 'design'),
|
||||
(os.path.join(current_dir, 'ui/icon'), 'ui/icon'),
|
||||
]
|
||||
|
||||
binaries = []
|
||||
|
||||
# 收集重要包的数据文件
|
||||
try:
|
||||
datas += collect_data_files('paddleocr')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
datas += collect_data_files('skimage')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
datas += collect_data_files('opencv-python')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
datas += collect_data_files('opencv-contrib-python')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
datas += collect_data_files('cv2')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
datas += collect_data_files('pypdfium2')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
datas += collect_data_files('pyclipper')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
datas += collect_data_files('matplotlib')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
datas += collect_data_files('pandas')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
datas += collect_data_files('huggingface_hub')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
datas += collect_data_files('modelscope')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
datas += collect_data_files('paddlex')
|
||||
except:
|
||||
pass
|
||||
|
||||
# 收集Paddle的二进制文件
|
||||
try:
|
||||
binaries += collect_dynamic_libs('paddle')
|
||||
except:
|
||||
pass
|
||||
|
||||
# 复制重要包的元数据
|
||||
try:
|
||||
datas += copy_metadata('numpy')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
datas += copy_metadata('PySide6')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
datas += copy_metadata('torch')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
datas += copy_metadata('torchvision')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
datas += copy_metadata('matplotlib')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
datas += copy_metadata('scipy')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
datas += copy_metadata('Pillow')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
datas += copy_metadata('opencv-python')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
datas += copy_metadata('opencv-contrib-python')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
datas += copy_metadata('pypdfium2')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
datas += copy_metadata('pandas')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
datas += copy_metadata('paddleocr')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
datas += copy_metadata('paddlex')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
datas += copy_metadata('pyclipper')
|
||||
except:
|
||||
pass
|
||||
|
||||
hiddenimports = [
|
||||
# GUI 相关
|
||||
'PySide6.QtCore',
|
||||
'PySide6.QtGui',
|
||||
'PySide6.QtWidgets',
|
||||
'PySide6.QtNetwork',
|
||||
'qfluentwidgets',
|
||||
'qframelesswindow',
|
||||
|
||||
# 深度学习相关
|
||||
'torch',
|
||||
'torchvision',
|
||||
'paddle',
|
||||
'paddleocr',
|
||||
'paddleocr.ppocr',
|
||||
'paddleocr.ppocr.api',
|
||||
'paddleocr.ppocr.utils',
|
||||
|
||||
# 图像处理
|
||||
'cv2',
|
||||
'cv2.data',
|
||||
'cv2.matplotlib',
|
||||
'cv2.typing',
|
||||
'cv2.xfeatures2d', # opencv-contrib-python
|
||||
'cv2.xphoto', # opencv-contrib-python
|
||||
'matplotlib',
|
||||
'matplotlib.pyplot',
|
||||
'pandas',
|
||||
'pandas._libs',
|
||||
'pandas._libs.tslibs',
|
||||
'numpy',
|
||||
'PIL',
|
||||
'pypdfium2', # PaddleOCR PDF backend
|
||||
'pypdfium2._helpers', # PaddleOCR PDF backend
|
||||
'scipy',
|
||||
'scipy.spatial',
|
||||
'scipy.spatial.transform',
|
||||
'scipy.ndimage',
|
||||
|
||||
# 视频处理
|
||||
'av',
|
||||
|
||||
# 工具库
|
||||
'tqdm',
|
||||
'requests',
|
||||
'configparser',
|
||||
'einops',
|
||||
'darkdetect',
|
||||
'je_showinfilemanager',
|
||||
'filesplit',
|
||||
'pyclipper', # PaddleOCR DBPostProcess dependency
|
||||
# PaddleX 相关依赖
|
||||
'paddlex',
|
||||
'PyYAML',
|
||||
'chardet',
|
||||
'ujson',
|
||||
'pydantic',
|
||||
'prettytable',
|
||||
'ruamel.yaml',
|
||||
'huggingface_hub',
|
||||
'modelscope',
|
||||
'colorlog',
|
||||
'filelock',
|
||||
'py_cpuinfo',
|
||||
|
||||
# 项目模块
|
||||
'backend',
|
||||
'backend.inpaint',
|
||||
'backend.inpaint.lama_inpaint',
|
||||
'backend.inpaint.sttn_auto_inpaint',
|
||||
'backend.inpaint.sttn_det_inpaint',
|
||||
'backend.inpaint.opencv_inpaint',
|
||||
'backend.tools',
|
||||
'backend.tools.ocr',
|
||||
'backend.tools.subtitle_detect',
|
||||
'backend.tools.subtitle_remover_remote_call',
|
||||
'backend.tools.video_io',
|
||||
'backend.tools.ffmpeg_cli',
|
||||
'backend.tools.process_manager',
|
||||
'backend.tools.hardware_accelerator',
|
||||
'backend.tools.inpaint_tools',
|
||||
'backend.tools.common_tools',
|
||||
'backend.config',
|
||||
'backend.scenedetect',
|
||||
'ui',
|
||||
'ui.home_interface',
|
||||
'ui.advanced_setting_interface',
|
||||
'ui.setting_interface',
|
||||
'ui.component',
|
||||
'ui.component.video_display_component',
|
||||
'ui.component.task_list_component',
|
||||
'ui.icon.my_fluent_icon',
|
||||
]
|
||||
|
||||
excludes = [
|
||||
'pytest', 'test', 'tests',
|
||||
'IPython', 'jupyter', 'notebook', 'ipykernel',
|
||||
'paddle.fluid.contrib', 'paddle.fluid.dygraph', 'paddle.fluid.optimizer',
|
||||
'torch.utils.tensorboard', 'torch.utils.bottleneck',
|
||||
'sphinx', 'docutils', 'seaborn',
|
||||
'scrapy', 'beautifulsoup4', 'lxml', 'sklearn', 'xgboost', 'lightgbm',
|
||||
]
|
||||
|
||||
a = Analysis(
|
||||
['gui.py'],
|
||||
pathex=[],
|
||||
binaries=binaries,
|
||||
datas=datas,
|
||||
hiddenimports=hiddenimports,
|
||||
hookspath=[],
|
||||
hooksconfig={},
|
||||
runtime_hooks=[],
|
||||
excludes=excludes,
|
||||
noarchive=False,
|
||||
optimize=0,
|
||||
)
|
||||
|
||||
pyz = PYZ(a.pure)
|
||||
|
||||
exe = EXE(
|
||||
pyz,
|
||||
a.scripts,
|
||||
[],
|
||||
exclude_binaries=True,
|
||||
name='VideoSubtitleRemover',
|
||||
debug=False,
|
||||
bootloader_ignore_signals=False,
|
||||
strip=False,
|
||||
upx=False,
|
||||
console=True, # 显示控制台(调试用,后续可通过启动器隐藏)
|
||||
disable_windowed_traceback=False,
|
||||
argv_emulation=False,
|
||||
target_arch=None,
|
||||
codesign_identity=None,
|
||||
entitlements_file=None,
|
||||
icon=['design\\vsr.ico'],
|
||||
# 请求管理员权限
|
||||
uac_admin=True, # 以管理员身份运行
|
||||
)
|
||||
|
||||
coll = COLLECT(
|
||||
exe,
|
||||
a.binaries,
|
||||
a.datas,
|
||||
strip=False,
|
||||
upx=False,
|
||||
upx_exclude=[],
|
||||
name='VideoSubtitleRemover',
|
||||
)
|
||||
157
管理员权限说明.md
Normal file
157
管理员权限说明.md
Normal file
@@ -0,0 +1,157 @@
|
||||
# 程序管理员权限说明
|
||||
|
||||
## 重要更新
|
||||
|
||||
**版本要求**: 当前版本(v1.4.0+)
|
||||
|
||||
**权限要求**: 程序运行时需要管理员权限
|
||||
|
||||
## 为什么需要管理员权限?
|
||||
|
||||
视频字幕去除器需要管理员权限的原因:
|
||||
|
||||
1. **文件系统访问权限**
|
||||
- 读取和修改受保护的文件系统区域
|
||||
- 处理不同用户权限下的视频文件
|
||||
- 访问可能受权限限制的目录
|
||||
|
||||
2. **系统级操作**
|
||||
- 进程管理功能(终止和启动子进程)
|
||||
- 多进程操作需要提升权限
|
||||
- 避免权限不足导致的操作失败
|
||||
|
||||
3. **FFmpeg 等系统工具**
|
||||
- FFmpeg 某些操作需要提升权限
|
||||
- 视频文件编码解码的某些特性需要管理员访问
|
||||
|
||||
4. **更好的兼容性**
|
||||
- 避免在不同 Windows 版本上出现权限问题
|
||||
- 确保在用户配置文件中保存设置
|
||||
- 访问网络共享资源
|
||||
|
||||
## 用户使用指南
|
||||
|
||||
### 正常启动方式
|
||||
|
||||
**方式一:直接启动(推荐)**
|
||||
```
|
||||
双击 VideoSubtitleRemover.exe
|
||||
```
|
||||
系统会自动弹出 UAC(用户账户控制)提示,点击"是"即可。
|
||||
|
||||
**方式二:右键启动**
|
||||
```
|
||||
右键点击 VideoSubtitleRemover.exe → 以管理员身份运行
|
||||
```
|
||||
|
||||
**方式三:通过快捷方式启动**
|
||||
```
|
||||
双击桌面快捷方式或开始菜单项
|
||||
```
|
||||
(如果快捷方式已经配置,会自动请求管理员权限)
|
||||
|
||||
### UAC 提示说明
|
||||
|
||||
当您启动程序时,会看到以下提示:
|
||||
|
||||
```
|
||||
用户账户控制
|
||||
您要允许此应用对您的设备进行更改吗?
|
||||
程序名称: 视频字幕去除器
|
||||
发布者: YaoFANGUK
|
||||
[是] [否]
|
||||
```
|
||||
|
||||
**点击"是"** 继续启动程序。
|
||||
|
||||
### 权限不足的后果
|
||||
|
||||
如果程序没有获得管理员权限,可能会出现:
|
||||
|
||||
- ❌ 无法读取某些视频文件
|
||||
- ❌ 无法保存处理后的视频
|
||||
- ❌ 多进程功能异常
|
||||
- ❌ FFmpeg 操作失败
|
||||
- ❌ 配置文件保存失败
|
||||
|
||||
## 安装程序版本
|
||||
|
||||
如果使用安装程序(VideoSubtitleRemover-Setup.exe)安装,程序会:
|
||||
|
||||
1. **自动配置快捷方式**
|
||||
- 桌面快捷方式:自动请求管理员权限
|
||||
- 开始菜单项:自动请求管理员权限
|
||||
|
||||
2. **UAC 集成**
|
||||
- 程序图标会显示"盾牌"图标,表示需要管理员权限
|
||||
- Windows 系统会记住您的选择
|
||||
|
||||
## 技术实现
|
||||
|
||||
程序通过 PyInstaller 的 `uac_admin=True` 配置请求管理员权限:
|
||||
|
||||
```python
|
||||
exe = EXE(
|
||||
# ... 其他配置
|
||||
uac_admin=True, # 请求管理员权限
|
||||
)
|
||||
```
|
||||
|
||||
这会在程序的可执行文件中嵌入 UAC 清单,Windows 会自动识别并请求权限。
|
||||
|
||||
## 安全说明
|
||||
|
||||
### 为什么是安全的?
|
||||
|
||||
1. **数字签名**(如果已签名)
|
||||
- 程序发布者信息可见
|
||||
- 可以验证文件完整性
|
||||
|
||||
2. **开源透明**
|
||||
- 代码在 GitHub 上公开
|
||||
- 可以审计安全性
|
||||
|
||||
3. **本地运行**
|
||||
- 所有处理都在本地进行
|
||||
- 不需要网络连接(更新功能除外)
|
||||
|
||||
### 最佳实践
|
||||
|
||||
1. **始终从官方来源下载**
|
||||
- GitHub: https://github.com/YaoFANGUK/video-subtitle-remover
|
||||
- 官方发布页面
|
||||
|
||||
2. **验证文件哈希**
|
||||
- 检查下载文件的完整性
|
||||
- 防止文件被篡改
|
||||
|
||||
3. **保持系统更新**
|
||||
- Windows 系统安全补丁
|
||||
- 杀毒软件病毒库更新
|
||||
|
||||
## 常见问题
|
||||
|
||||
**Q: 为什么每次启动都要请求权限?**
|
||||
A: 这是 Windows 安全机制,确保用户知道程序需要提升权限。
|
||||
|
||||
**Q: 可以禁用这个提示吗?**
|
||||
A: 不建议禁用。可以通过调整 UAC 设置来减少提示,但这会降低系统安全性。
|
||||
|
||||
**Q: 程序是否会在后台做坏事?**
|
||||
A: 不会。程序是开源的,所有功能都公开透明。你可以查看源代码。
|
||||
|
||||
**Q: 不给管理员权限能用吗?**
|
||||
A: 某些功能可能无法正常使用。强烈建议授予管理员权限。
|
||||
|
||||
## 联系支持
|
||||
|
||||
如果遇到权限相关问题:
|
||||
|
||||
1. 查看日志文件(如果有的话)
|
||||
2. 以管理员身份运行命令提示符,手动启动程序
|
||||
3. 在 GitHub 上提交 Issue: https://github.com/YaoFANGUK/video-subtitle-remover/issues
|
||||
|
||||
---
|
||||
|
||||
**最后更新**: 2026-04-10
|
||||
**版本**: v1.4.0+
|
||||
Reference in New Issue
Block a user