# Video Processor **Repository Path**: winlinwd/video-processor ## Basic Information - **Project Name**: Video Processor - **Description**: 视频的处理: 水印遮挡阶段:对每个输入视频的右下角水印区域进行遮挡/覆盖处理 视频合并阶段:将处理后的多个视频按顺序拼接成一个完整的视频 - **Primary Language**: Python - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-08 - **Last Updated**: 2026-07-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Video Processor 视频/图片水印处理与合并工具,支持批量去除视频/图片水印并合并多个视频文件。 ## 功能特性 - **视频水印处理**:使用 OpenCV Inpainting 算法智能修复水印区域,或使用 FFmpeg delogo 滤镜快速处理 - **图片水印处理**:支持图片文件的水印检测与去除 - **水印自动检测**:基于 HSV 阈值、Canny 边缘检测和角点权重机制自动定位水印区域 - **视频合并**:自动统一分辨率和帧率,按顺序拼接多个视频 - **音频保留**:处理过程中完整保留原始音频轨道 - **GUI 界面**:提供图形化界面,操作便捷 - **批量处理**:支持遍历目录批量处理所有视频/图片文件 - **进度反馈**:实时显示处理进度 - **错误处理**:完善的异常捕获和临时文件清理机制 - **取消支持**:支持随时中断正在进行的处理任务 ## 技术选型 | 模块 | 技术 | |------|------| | 视频帧处理 | OpenCV (cv2.inpaint) | | 视频编辑/合并 | MoviePy | | 水印检测 | OpenCV (HSV/Edge/Morphological) | | 依赖管理 | uv | | 进度条 | tqdm | | GUI | Tkinter | | 打包 | PyInstaller | ## 快速开始 ### 安装依赖 ```bash # 安装 uv(如未安装) # macOS/Linux curl -LsSf https://astral.sh/uv/install.sh | sh # Windows (PowerShell) irm https://astral.sh/uv/install.ps1 | iex # 安装项目依赖 uv sync ``` ### 运行 GUI(推荐) ```bash uv run python src/gui.py ``` ### 命令行运行 ```bash # 基本用法(默认参数,视频模式) uv run python -m src.main # 指定输入输出目录 uv run python -m src.main --input-dir ./inputs --output-dir ./outputs uv run python -m src.main --input-dir "D:\storage\视频" --output-dir ./outputs # 自定义水印区域 uv run python -m src.main --watermark-x 100 --watermark-y 200 --watermark-w 200 --watermark-h 80 # 使用 delogo 方式处理 uv run python -m src.main --method delogo # 仅检查不处理(Dry Run) uv run python -m src.main --dry-run # 不执行合并 uv run python -m src.main --no-merge # 图片模式处理 uv run python -m src.main --mode image --input-dir ./images --output-dir ./outputs ``` ## 命令行参数 | 参数 | 类型 | 默认值 | 说明 | |------|------|--------|------| | `--mode` | str | video | 处理模式:video 或 image | | `--input-dir` | str | inputs | 输入视频/图片目录 | | `--output-dir` | str | outputs | 输出目录 | | `--watermark-x` | int | 0 | 水印左上角X坐标(0表示自动检测) | | `--watermark-y` | int | 0 | 水印左上角Y坐标(0表示自动检测) | | `--watermark-w` | int | 200 | 水印宽度 | | `--watermark-h` | int | 80 | 水印高度 | | `--inpaint-radius` | int | 3 | Inpaint修复算法半径(建议3-5) | | `--method` | str | inpaint | 修复方式:inpaint 或 delogo | | `--merge` | flag | True | 执行视频合并(仅视频模式) | | `--no-merge` | flag | False | 不执行视频合并(仅视频模式) | | `--dry-run` | flag | False | 仅检查输入文件 | | `--output-filename` | str | merged_output.mp4 | 合并后的输出文件名(仅视频模式) | | `--log-file` | str | video_processor.log | 日志文件路径 | ## 项目结构 ``` video-processor/ ├── pyproject.toml # 项目配置和依赖声明 ├── uv.lock # 依赖锁定文件(自动生成) ├── .venv/ # 虚拟环境(自动创建) ├── src/ │ ├── __init__.py # 模块初始化 │ ├── main.py # 命令行主入口 │ ├── gui.py # GUI 界面入口 │ ├── utils.py # 工具函数(水印检测等) │ ├── watermark_remover.py # 视频水印去除模块 │ ├── image_watermark_remover.py # 图片水印去除模块 │ └── video_merger.py # 视频合并模块 ├── requirements.txt # 依赖列表 ├── build.py # 打包脚本 ├── build.bat # Windows 打包批处理 ├── video_processor.spec # PyInstaller 配置 ├── inputs/ # 输入视频目录 ├── outputs/ # 输出目录 └── temp/ # 临时文件目录(自动创建) ``` ## 使用示例 ### 示例1:默认处理 将 `inputs/` 目录下所有视频的右下角水印去除并合并: ```bash uv run python -m src.main ``` ### 示例2:自定义水印区域 指定水印位置为 (500, 300),宽度300,高度100: ```bash uv run python -m src.main --watermark-x 500 --watermark-y 300 --watermark-w 300 --watermark-h 100 ``` ### 示例3:使用 delogo 方式 使用 FFmpeg delogo 滤镜快速处理(适合文字水印): ```bash uv run python -m src.main --method delogo ``` ### 示例4:仅去除水印不合并 处理后每个视频单独输出到 `outputs/` 目录: ```bash uv run python -m src.main --no-merge ``` ### 示例5:处理图片 处理 `images/` 目录下所有图片的水印: ```bash uv run python -m src.main --mode image --input-dir ./images --output-dir ./outputs ``` ## GUI 使用说明 运行 GUI 界面: ```bash uv run python src/gui.py ``` 界面功能: 1. **输入目录**:点击选择包含视频/图片的目录 2. **输出目录**:点击选择输出目录 3. **处理模式**:选择视频或图片模式 4. **修复方式**:选择 Inpaint(画质优)或 Delogo(速度快) 5. **水印位置**:可手动输入或使用自动检测 6. **开始处理**:启动处理任务 7. **取消**:中断正在进行的处理任务 8. **日志区域**:显示处理进度和日志信息 ## 打包成 EXE **前提条件**:确保已执行 `uv sync` 安装所有依赖。 ### 方法一:使用 build.py(推荐) 此方法会自动处理 imageio 版本补丁,避免打包时出现 `PackageNotFoundError`: ```bash uv run python build.py ``` ### 方法二:使用 build.bat(Windows) 双击运行 `build.bat` 文件,或在命令行执行: ```bash build.bat ``` ### 方法三:手动打包 > **警告**:手动打包需要先应用 imageio 版本补丁,否则会导致 `PackageNotFoundError`。 ```bash # 先运行 build.py 的补丁步骤(或手动修改 imageio/__init__.py) uv run python -c " import imageio import re init_path = imageio.__file__ with open(init_path, 'r', encoding='utf-8') as f: content = f.read() content = re.sub(r\"__version__\\s*=\\s*[\\\"'][^\\\"']*[\\\"']\", '__version__ = \"2.37.3\"', content) with open(init_path, 'w', encoding='utf-8') as f: f.write(content) print(f'已打补丁: {init_path}') " # 清理旧文件 rmdir /s /q build rmdir /s /q dist # 执行打包 uv run pyinstaller --clean video_processor.spec ``` 打包完成后,可执行文件位于 `dist/VideoProcessor.exe`。 ## 注意事项 1. **FFmpeg 依赖**:确保系统已安装 FFmpeg(delogo 方式和音频合并需要) 2. **处理方式选择**: - Inpaint 方式:画质好,但处理速度较慢 - Delogo 方式:速度快,适合文字水印(如"豆包AI生成") 3. **水印自动检测**:默认开启,基于角点权重机制优先检测左下角和右下角 4. **临时文件**:处理过程中会在系统临时目录创建临时文件,处理完成后自动清理 5. **路径支持**:支持正斜杠和反斜杠路径 6. **GUI 线程安全**:所有处理任务在后台线程运行,不会阻塞界面 ## 许可证 MIT License