# 文件处理脚本 **Repository Path**: niclas0923/File-processing-script ## Basic Information - **Project Name**: 文件处理脚本 - **Description**: No description available - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-23 - **Last Updated**: 2025-11-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: Python ## README # 文件处理脚本(解压与视频转码) (English version: see README.en.md) 本项目提供两类常用文件处理工具: - 解压工具:支持 `zip`、`7z`、`rar`、`tar` 族(含 `tar.gz`、`tar.bz2`、`tar.xz`),支持递归解压、分卷识别、文件名编码修复、时间戳保留、密码库尝试、输出目录策略与扁平化处理。 - 视频转码工具:批量将目录中的常见视频转为 H.264 编码 `MP4`;支持递归、容错转换、媒体 EXIF/容器元数据同步、文件时间戳同步与安全删除校验。 ## 目录结构 - `script/解压/`:解压工具核心代码与命令行入口 - `main.py`:命令行入口(`argparse` 参数解析) - `config.py`:配置加载与依赖检查、密码库读取 - `extractor.py`:格式解压、密码尝试、进度监控 - `processor.py`:文件发现、分卷处理、输出目录策略 - `recursive.py`:递归与层级调度 - `detector.py` / `formats.py` / `multipart.py`:格式与分卷识别 - `encoding_utils.py`:文件名编码检测与修复、隐藏文件判断 - `size_progress.py` / `log_utils.py`:进度与统一日志输出 - `extract_config.ini`:默认配置文件,`passwords.txt`:默认密码库 - `script/视频转码/`:视频转码工具核心代码与入口 - `main.py`:执行入口 - `config.ini`:转码配置文件(路径、递归、CRF、扩展名等) - `config.py`:配置解析(从 `config.ini` 读取) - `converter.py` / `codec.py`:转码与编码检测 - `metadata.py` / `timestamps.py`:媒体元数据与文件时间戳同步 - `deps.py`:依赖检查(`ffmpeg` 与 `exiftool`) - `file_ops.py`:文件删除等操作 ## 环境依赖 - Python 包:`chardet`、`rarfile`、`pyzipper` - 系统工具: - 解压:`7z`(p7zip) - 转码:`ffmpeg`(需 `libx264`)、`exiftool` 安装示例: - macOS: - `brew install p7zip ffmpeg exiftool` - Ubuntu/Debian: - `sudo apt install p7zip-full ffmpeg exiftool` - Windows: - `choco install 7zip ffmpeg exiftool` - Python 依赖: - `pip install chardet rarfile pyzipper` ## 快速开始 ### 解压脚本 - 指定目标目录(覆盖配置): - `python script/解压/main.py --dir "/path/to/archives"` - 指定配置文件: - `python script/解压/main.py --config "/absolute/path/to/extract_config.ini"` - 常用参数: - `--delete` / `--no-delete`:解压后是否删除原压缩包 - `--no-subdir`:不使用子目录(直接解到压缩包父目录) - `--encoding gbk|utf-8`:文件名编码(覆盖默认编码) - `--formats zip,7z,tar`:限制解压格式(逗号分隔) - `--passwords '123,"",abc'`:临时密码列表(逗号分隔,支持空密码) - `--password-file /path/to/passwords.txt`:密码库文件(一行一个) - `--scan-subdirs` / `--no-scan-subdirs`:是否扫描子目录 - `--no-recursive`:禁用递归解压 - `--max-depth 4`:递归最大层数 运行后会打印当前配置与支持格式,输出进度并汇总成功/失败项。 ### 视频转码脚本 - 配置:编辑 `script/视频转码/config.ini` - 关键项:`target_path`(目标文件/目录)、`recursive`、`h264_crf`、`delete_original_after_conversion`、`extensions`、`probesize`、`analyzeduration`、`dry_run`、`failures_csv`、`timeout_sec` - 示例:见下方“配置说明” - 执行: - `python script/视频转码/main.py` - 行为: - 规范检测:使用 `ffprobe` 检测视频编码。 - 非 H.264 → 重编码:统一转为 H.264 `MP4`,`pix_fmt yuv420p`、`movflags +faststart`。 - H.264 非 MP4 → 无损重封装:`-c copy` 封装为 `MP4`,避免重编码。 - 元数据与时间:保留容器元数据(`-map_metadata 0`),并用 `exiftool` 写回 `CreateDate`/`MediaCreateDate`/`DateTimeOriginal` 等关键时间字段;同步文件修改/访问时间,Windows/macOS 尝试设置创建时间。 - 删除安全:删除前校验输出时长与源时长相近(阈值 0.5%);`dry_run` 可只生成输出不删除;失败列表写入 CSV。 ## 配置说明 ### 解压(`script/解压/extract_config.ini`) 示例: ``` target_dir = /absolute/path/to/archives delete_after_extract = true output_subdir = true default_encoding = auto fallback_encodings = gbk, gb2312, utf-8 skip_macos_hidden = true preserve_file_times = true scan_subdirectories = true recursive_extract = true enabled = zip, 7z, rar, tar, tar.gz, tar.bz2, tar.xz password_file = passwords.txt ``` - `target_dir`:目标目录;命令行 `--dir` 优先级更高 - `enabled`:启用的格式列表 - `password_file`:密码库路径,支持相对配置文件目录 - 其余参数可通过命令行覆盖 ### 视频转码(`script/视频转码/config.ini`) 示例: ``` [general] target_path = /absolute/path/to/videos recursive = true h264_crf = 20 delete_original_after_conversion = true extensions = avi, mp4, mov, mkv, mts, m2ts, mpeg, mpg, webm, wmv, flv, 3gp, m4v, ts probesize = 10M analyzeduration = 10M dry_run = false failures_csv = conversion_failures.csv timeout_sec = 3600 ``` - `target_path`:目标文件或目录路径 - `recursive`:是否递归遍历子目录 - `h264_crf`:H.264 压缩质量(数值越大压缩越强、体积更小、画质更低) - `delete_original_after_conversion`:转换成功后是否删除源文件 - `extensions`:待处理的扩展名列表(小写、逗号分隔) - `probesize` / `analyzeduration`:探测与分析缓冲(默认较低以提升启动速度) - `dry_run`:启用后仅生成输出但不删除原文件 - `failures_csv`:失败列表输出路径 - `timeout_sec`:转码/重封装超时(秒) ## 特性与注意事项(视频转码) - 容器/编码策略:H.264 非 MP4 执行无损重封装;非 H.264 进行重编码。 - 流映射与稳定性:明确映射 `0:v:0`、`0:a?`、`0:s?` 并设置 `max_muxing_queue_size=1024`。 - 音频处理:音频复制失败自动回退 `AAC 192k`,加入 `aresample=async=1` 缓解时钟漂移。 - 创建时间限制:Linux 文件系统通常无法显式设置创建时间;Windows/macOS 可设置(macOS 需安装 Xcode CLT 以提供 `SetFile`)。 - 删除校验:输出时长>0且与源相近方可删除原文件;`dry_run` 跳过删除。 ## 进阶与注意事项(解压) - 未安装 `7z` 时会跳过相关格式,需先安装并保证 `7z` 在 `PATH` 中。 - 缺失 `chardet`/`rarfile`/`pyzipper` 会影响编码检测、`RAR` 与加密 `ZIP` 支持。 - 分卷识别:支持 `.001`、`.partNN.rar`、`.z01`、`.r00` 等,从首卷开始批量解压。 - 扁平化策略:仅包含同名单一文件夹时可提升子目录内容到上一层,避免多重嵌套。 - 时间戳保留:尽量保留原创建/修改时间;受系统权限限制时可能部分失败。 - 转码需 `ffmpeg` 支持 `libx264` 与 `exiftool`;编码检测失败时强制转换可能修复异常容器;源为 `mp4` 时输出 `*_h264.mp4` 以避免覆盖;源为 H.264 的非 MP4 将执行无损重封装为 MP4。 ## 许可证 本项目采用 `LICENSE` 中所述的开源许可协议。