fix: 修复媒体整理中的文件覆盖、BMP解析与重复整理问题
- 移动文件改用 uuid+原文件名,避免同名覆盖丢失数据
- BMP 负高度取绝对值,自顶向下格式解析正确
- 新增 {目录名}-picker 白名单输出目录,整理后跳过重复扫描
- 分类目录名去掉 uuid 前缀,重复运行并入已有目录
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
# 项目审查记录 2026-08-13
|
||||
|
||||
> 审查方式:静态代码审查(`go build` / `go vet` 均通过,此文件不含编译级错误)
|
||||
> 审查范围:全部 `.go` 源码
|
||||
|
||||
---
|
||||
|
||||
## 一、严重 Bug
|
||||
|
||||
### 1. WEBP / BMP / PSB 永远进「读取异常」文件夹(专用分支是死代码)
|
||||
|
||||
- **位置**:`util/image.go:9-19`、`core/handle_image.go:22,35,46`
|
||||
- **问题**:`supportImageTypes` 中包含了 `.bmp`、`.webp`、`.psb`,导致 `handle_image.go:22` 的通用分支总是先命中,调用 `image.DecodeConfig`(`main.go:6-8` 只注册了 png/jpeg/gif 解码器),对 webp/bmp 必然失败,文件全部落入「读取异常」目录。
|
||||
- **影响**:`handle_image.go:35`(webp)、`:46`(bmp)的专用处理分支永远不会执行,与 README 承诺支持的格式不符。
|
||||
- **修复方向**:从 `supportImageTypes` 中移除 `.bmp` / `.webp` / `.psb`,让专用分支生效;或在通用分支前先特判这三类格式。
|
||||
|
||||
### 2. PSD 从未被识别为图片,`ImagePsdList` 恒为空
|
||||
|
||||
- **位置**:`core/file_scanner.go:70-79`、`core/handle_image.go:57`
|
||||
- **问题**:PSD 文件的 MIME 为 `application/vnd.adobe.photoshop`(不包含 `image/` 前缀),且 `.psd` 不在 `supportImageTypes` 中,因此在 `DoFilter` 阶段就被丢弃,永远不会进入 `GlobalImagePathList`。
|
||||
- **影响**:`handle_image.go:57` 的 PSD 分支不可达,README 声称的「PSD 单独归入图片_PSD」功能实际失效。
|
||||
- **修复方向**:在过滤阶段对 `.psd` / `application/vnd.adobe.photoshop` 单独识别并入图片列表。
|
||||
|
||||
### 3. 同名文件移动时数据丢失风险(已处理)
|
||||
|
||||
- **位置**:`util/video.go:152-169`(`moveFileToDir`)
|
||||
- **问题**:目标文件名只取 `BaseName`。不同子目录下的同名文件(如 `a/photo.jpg`、`b/photo.jpg`)会被移动到/复制到同一目标:Unix 下 `os.Rename` 静默覆盖,跨盘 fallback 的 `copyFile`(`os.Create`)也会截断覆盖目标。
|
||||
- **影响**:真实数据丢失风险,且无任何告警。
|
||||
- **修复方向**:目标名冲突时追加序号或 hash,确保不覆盖已有文件。
|
||||
|
||||
### 4. BMP 自顶向下格式(负高度)导致解析错乱(已处理)
|
||||
|
||||
- **位置**:`core/bmp.go:59`、`core/handle_image.go:96-98`
|
||||
- **问题**:`ReadBmpImage` 直接返回 `int32` 宽高,负高度被 `fmt.Sprintf("%d-%d")` 拼成 `"640--480"`,`strings.Split("-")` 后 `width2Height[1]` 为空串,`String2int` 返回 0,图片被错误归类。
|
||||
- **影响**:此类 BMP 图片分辨率判定错误(高度变 0,全部按横屏普通处理)。
|
||||
- **修复方向**:读取时对高度取绝对值,或改用不易混淆的分隔符/结构化存储。
|
||||
|
||||
### 5. 重复运行会重新整理已整理过的目录(已处理)
|
||||
|
||||
- **位置**:`core/file_scanner.go:20`、`main.go`
|
||||
- **问题**:`filepath.Walk` 扫描整个根目录。第二次运行时,上次生成的 `{uid}-图片_*`、`{uid}-视频_*` 等目录会被再次扫描,其中已分类的文件会被再次移动,形成无限嵌套/重复归类。
|
||||
- **影响**:重复执行程序导致目录结构越来越乱,违背 README「重复运行不会相互覆盖」的描述。
|
||||
- **修复方向**:扫描时跳过已生成的 `{uid}-` 前缀目录,或提供过滤白名单。
|
||||
|
||||
---
|
||||
|
||||
## 二、次要问题
|
||||
|
||||
### 6. ffprobe 输出解析脆弱
|
||||
|
||||
- **位置**:`util/video.go:53-101`
|
||||
- **问题**:对多视频流(常见于 MKV)的多行输出处理靠猜测(`\r\n\r\n\r\n\r\n` split、`N/AxN/A` 字符串替换等),且不校验 0 值分辨率,解析出错时归类到「普通」而非「读取异常」。
|
||||
|
||||
### 7. 视频「读取异常 / 已忽略」目录命名不一致
|
||||
|
||||
- **位置**:`core/handle_video.go:56,62`
|
||||
- **问题**:这两个目录没有 uid 前缀(如 `读取异常`、`已忽略`),与其它 `{uid}-视频_*` 目录风格不统一,且与图片侧带 uid 的命名方式不一致。
|
||||
|
||||
### 8. 死代码 / 未使用数据
|
||||
|
||||
- **位置**:`util/file.go:47-112`、`vars/video.go`、`util/file.go:17-21`、`vars/global.go:5`
|
||||
- **问题**:`VideoPath2DurationMap` / `VideoPath2WidthHeightTagMap` 赋值后从未使用(重命名逻辑已被注释掉);`util/file.go` 中保留大段注释代码;`GetFileDirectory`、`GlobalFilePath2FileNameMap` 未被使用。
|
||||
|
||||
### 9. `doPickImageFile` 空判断误报
|
||||
|
||||
- **位置**:`core/handle_image.go:91`
|
||||
- **问题**:判断的是全局 `vars.ImagePath2WidthHeightMap` 而非入参 `imagePath2WidthHeightMap`;当所有图片都是错误/忽略时,会误打印「当前目录下没有扫描到图片文件」。
|
||||
|
||||
### 10. 目录创建失败未处理
|
||||
|
||||
- **位置**:`core/handle_image.go`(各 `move*Image` 函数)、`core/handle_video.go`(各 `move*Video` 函数)
|
||||
- **问题**:多数 `util.CreateDir` 的返回值被忽略,若目录创建失败仍继续执行 `DoMoveFileToDir`,文件移动会静默失败。
|
||||
|
||||
### 11. 临时 ffprobe.exe 清理不保证
|
||||
|
||||
- **位置**:`core/handle_video.go:13-24,68-71`
|
||||
- **问题**:通过流程末尾手动 `os.Remove` 清理,若中途异常(panic / 提前 return)会残留 `ffprobe.exe`;下次运行该文件会被扫描当作普通文件。建议 `defer` 清理。
|
||||
|
||||
---
|
||||
|
||||
## 三、优化建议
|
||||
|
||||
1. **修复严重 bug 1/2 的关键**:调整 `supportImageTypes` 列表 / 过滤逻辑,确保 webp、bmp、psb、psd 走各自正确的分支。
|
||||
2. **重复运行防护**:扫描时跳过已生成的 `{uid}-` 目录。
|
||||
3. **合并 ffprobe 调用**:分辨率 + 时长可用一次 `-show_streams -show_format` 取回,每视频省一次子进程创建。
|
||||
4. **消除重复代码**:图片/视频各有约 60 个几乎相同的分组 + 移动函数,可用「分组名 → 列表」映射表驱动,大幅减小编码量。
|
||||
5. **使用 `filepath.Join`**:代替 `rootDir + separator + ...` 字符串拼接,避免路径分隔符与平台问题。
|
||||
6. **`moveFileToDir` 增加同名去重**:冲突时追加序号/hash,杜绝覆盖。
|
||||
7. **清理死代码**:删除注释掉的 rename 逻辑、未使用的 map 与函数。
|
||||
+10
-1
@@ -56,7 +56,8 @@ func ReadBmpImage(filePath string) (error, int32, int32) {
|
||||
fmt.Printf("=== Failed to Read file: %v\n", err)
|
||||
return err, 0, 0
|
||||
}
|
||||
return err, infoHeader.Width, infoHeader.Height
|
||||
// 自顶向下 BMP 的高度为负值,取绝对值避免影响后续解析
|
||||
return err, absInt32(infoHeader.Width), absInt32(infoHeader.Height)
|
||||
//fmt.Printf("=== File size: %d bytes\n", fileHeader.FileSize)
|
||||
//fmt.Printf("=== Image dimensions: %dx%d\n", )
|
||||
//fmt.Printf("=== Bits per pixel: %d\n", infoHeader.BitsPerPixel)
|
||||
@@ -76,3 +77,11 @@ func ReadBmpImage(filePath string) (error, int32, int32) {
|
||||
//}
|
||||
//fmt.Printf("=== Read %d bytes of pixel data.\n", len(data))
|
||||
}
|
||||
|
||||
// absInt32 返回 int32 的绝对值
|
||||
func absInt32(v int32) int32 {
|
||||
if v < 0 {
|
||||
return -v
|
||||
}
|
||||
return v
|
||||
}
|
||||
|
||||
@@ -87,6 +87,9 @@ func visit(currentPath string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
return err // 如果有错误,直接返回
|
||||
}
|
||||
if info.IsDir() && vars.GlobalPickerDir != "" && currentPath == vars.GlobalPickerDir {
|
||||
return filepath.SkipDir // 跳过白名单目录(已整理文件的输出目录)
|
||||
}
|
||||
if !info.IsDir() {
|
||||
vars.GlobalFilePathList = append(vars.GlobalFilePathList, currentPath)
|
||||
// filename, include ext
|
||||
|
||||
+61
-63
@@ -2,7 +2,6 @@ package core
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
uuid "github.com/satori/go.uuid"
|
||||
_ "image/gif" // 导入gif支持
|
||||
_ "image/jpeg" // 导入jpeg支持
|
||||
_ "image/png" // 导入png支持
|
||||
@@ -12,7 +11,7 @@ import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
func DoHandleImage(rootDir string) {
|
||||
func DoHandleImage(pickerDir string) {
|
||||
total := len(vars.GlobalImagePathList) // 总数
|
||||
successCount := 0 // 成功数
|
||||
errorCount := 0 // 失败数
|
||||
@@ -63,33 +62,32 @@ func DoHandleImage(rootDir string) {
|
||||
ignoreCount = ignoreCount + 1
|
||||
vars.ImageIgnorePathList = append(vars.ImageIgnorePathList, imageFilePath)
|
||||
}
|
||||
uid := strings.ReplaceAll(uuid.NewV4().String(), "-", "")
|
||||
if len(vars.ImagePsdList) > 0 {
|
||||
psdImagePath := rootDir + string(os.PathSeparator) + uid + "-图片_PSD"
|
||||
psdImagePath := pickerDir + string(os.PathSeparator) + "图片_PSD"
|
||||
if util.CreateDir(psdImagePath) {
|
||||
util.DoMoveFileToDir(vars.ImagePsdList, psdImagePath)
|
||||
}
|
||||
}
|
||||
if len(vars.ImageReadErrorPathList) > 0 {
|
||||
readInfoErrorPath := rootDir + string(os.PathSeparator) + uid + "-图片_读取异常"
|
||||
readInfoErrorPath := pickerDir + string(os.PathSeparator) + "图片_读取异常"
|
||||
if util.CreateDir(readInfoErrorPath) {
|
||||
util.DoMoveFileToDir(vars.ImageReadErrorPathList, readInfoErrorPath)
|
||||
}
|
||||
}
|
||||
if len(vars.ImageIgnorePathList) > 0 {
|
||||
ignorePath := rootDir + string(os.PathSeparator) + uid + "-图片_已忽略"
|
||||
ignorePath := pickerDir + string(os.PathSeparator) + "图片_已忽略"
|
||||
if util.CreateDir(ignorePath) {
|
||||
util.DoMoveFileToDir(vars.ImageIgnorePathList, ignorePath)
|
||||
}
|
||||
}
|
||||
doPickImageFile(uid, rootDir, vars.ImagePath2WidthHeightMap)
|
||||
fmt.Printf("=== 图片处理完毕(UID): %s \n\n", uid)
|
||||
doPickImageFile(pickerDir, vars.ImagePath2WidthHeightMap)
|
||||
fmt.Printf("=== 图片处理完毕 \n\n")
|
||||
}
|
||||
|
||||
// 条件图片并分组存放
|
||||
func doPickImageFile(uid string, rootDir string, imagePath2WidthHeightMap map[string]string) {
|
||||
func doPickImageFile(pickerDir string, imagePath2WidthHeightMap map[string]string) {
|
||||
if len(vars.ImagePath2WidthHeightMap) == 0 {
|
||||
fmt.Printf("=== 当前目录下没有扫描到图片文件, %s \n", rootDir)
|
||||
fmt.Printf("=== 当前目录下没有扫描到图片文件, %s \n", pickerDir)
|
||||
return
|
||||
}
|
||||
for currentImagePath, infoStr := range imagePath2WidthHeightMap {
|
||||
@@ -111,10 +109,10 @@ func doPickImageFile(uid string, rootDir string, imagePath2WidthHeightMap map[st
|
||||
}
|
||||
handleSquareImage(currentImagePath, width)
|
||||
}
|
||||
moveHorizontalImage(rootDir, uid)
|
||||
moveVerticalImage(rootDir, uid)
|
||||
moveSquareImage(rootDir, uid)
|
||||
moveGifImage(rootDir, uid)
|
||||
moveHorizontalImage(pickerDir)
|
||||
moveVerticalImage(pickerDir)
|
||||
moveSquareImage(pickerDir)
|
||||
moveGifImage(pickerDir)
|
||||
}
|
||||
|
||||
// 统一处理gif
|
||||
@@ -262,249 +260,249 @@ func handleSquareImage(currentImagePath string, width int) {
|
||||
}
|
||||
|
||||
// 移动水平图片
|
||||
func moveHorizontalImage(rootDir string, uid string) {
|
||||
func moveHorizontalImage(pickerDir string) {
|
||||
pathSeparator := string(os.PathSeparator)
|
||||
// 标准
|
||||
if len(vars.ImageHorizontalStandard720PList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_720P"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_横屏_720P"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageHorizontalStandard720PList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageHorizontalStandard1D5KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_1D5KP"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_横屏_1D5KP"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageHorizontalStandard1D5KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageHorizontalStandard1080PList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_1080P"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_横屏_1080P"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageHorizontalStandard1080PList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageHorizontalStandard2DKList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_2DKP"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_横屏_2DKP"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageHorizontalStandard2DKList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageHorizontalStandard2D5KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_2D5KP"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_横屏_2D5KP"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageHorizontalStandard2D5KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageHorizontalStandardUltraWide2List) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_ultraWide2KP"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_横屏_ultraWide2KP"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageHorizontalStandardUltraWide2List, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageHorizontalStandardUltraWide3List) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_ultraWide3KP"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_横屏_ultraWide3KP"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageHorizontalStandardUltraWide3List, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageHorizontalStandardUltraWide4List) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_ultraWide4KP"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_横屏_ultraWide4KP"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageHorizontalStandardUltraWide4List, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageHorizontalStandard4KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_4KP"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_横屏_4KP"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageHorizontalStandard4KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageHorizontalStandard4KHList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_4KHP"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_横屏_4KHP"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageHorizontalStandard4KHList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageHorizontalStandard8KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_8KP"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_横屏_8KP"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageHorizontalStandard8KList, imageDirPath)
|
||||
}
|
||||
// 非标准
|
||||
if len(vars.ImageHorizontalNormalList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_普通"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_横屏_普通"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageHorizontalNormalList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageHorizontal1KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_1K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_横屏_1K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageHorizontal1KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageHorizontal2KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_2K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_横屏_2K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageHorizontal2KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageHorizontal3KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_3K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_横屏_3K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageHorizontal3KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageHorizontal4KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_4K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_横屏_4K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageHorizontal4KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageHorizontal5KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_5K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_横屏_5K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageHorizontal5KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageHorizontal6KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_6K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_横屏_6K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageHorizontal6KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageHorizontal7KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_7K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_横屏_7K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageHorizontal7KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageHorizontal8KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_8K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_横屏_8K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageHorizontal8KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageHorizontal9KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_9K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_横屏_9K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageHorizontal9KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageHorizontalHKList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_原图"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_横屏_原图"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageHorizontalHKList, imageDirPath)
|
||||
}
|
||||
}
|
||||
|
||||
// 移动垂直图片
|
||||
func moveVerticalImage(rootDir string, uid string) {
|
||||
func moveVerticalImage(pickerDir string) {
|
||||
pathSeparator := string(os.PathSeparator)
|
||||
// 非标准
|
||||
if len(vars.ImageVerticalNormalList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_竖屏_普通"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_竖屏_普通"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageVerticalNormalList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageVertical1KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_竖屏_1K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_竖屏_1K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageVertical1KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageVertical2KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_竖屏_2K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_竖屏_2K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageVertical2KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageVertical3KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_竖屏_3K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_竖屏_3K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageVertical3KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageVertical4KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_竖屏_4K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_竖屏_4K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageVertical4KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageVertical5KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_竖屏_5K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_竖屏_5K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageVertical5KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageVertical6KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_竖屏_6K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_竖屏_6K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageVertical6KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageVertical7KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_竖屏_7K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_竖屏_7K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageVertical7KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageVertical8KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_竖屏_8K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_竖屏_8K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageVertical8KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageVertical9KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_竖屏_9K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_竖屏_9K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageVertical9KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageVerticalHKList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_竖屏_原图"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_竖屏_原图"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageVerticalHKList, imageDirPath)
|
||||
}
|
||||
}
|
||||
|
||||
// 移动等比图片
|
||||
func moveSquareImage(rootDir string, uid string) {
|
||||
func moveSquareImage(pickerDir string) {
|
||||
pathSeparator := string(os.PathSeparator)
|
||||
// 非标准
|
||||
if len(vars.ImageSquareNormalList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_等比_普通"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_等比_普通"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageSquareNormalList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageSquare1KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_等比_1K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_等比_1K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageSquare1KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageSquare2KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_等比_2K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_等比_2K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageSquare2KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageSquare3KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_等比_3K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_等比_3K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageSquare3KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageSquare4KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_等比_4K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_等比_4K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageSquare4KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageSquare5KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_等比_5K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_等比_5K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageSquare5KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageSquare6KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_等比_6K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_等比_6K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageSquare6KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageSquare7KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_等比_7K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_等比_7K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageSquare7KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageSquare8KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_等比_8K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_等比_8K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageSquare8KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageSquare9KList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_等比_9K"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_等比_9K"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageSquare9KList, imageDirPath)
|
||||
}
|
||||
if len(vars.ImageSquareHKList) > 0 {
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_等比_原图"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_等比_原图"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageSquareHKList, imageDirPath)
|
||||
}
|
||||
}
|
||||
|
||||
// 移动gif图片
|
||||
func moveGifImage(rootDir string, uid string) {
|
||||
func moveGifImage(pickerDir string) {
|
||||
if len(vars.ImageGifList) > 0 {
|
||||
pathSeparator := string(os.PathSeparator)
|
||||
imageDirPath := rootDir + pathSeparator + uid + "-图片_GIF"
|
||||
imageDirPath := pickerDir + pathSeparator + "图片_GIF"
|
||||
util.CreateDir(imageDirPath)
|
||||
util.DoMoveFileToDir(vars.ImageGifList, imageDirPath)
|
||||
}
|
||||
|
||||
+63
-65
@@ -2,7 +2,6 @@ package core
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
uuid "github.com/satori/go.uuid"
|
||||
"kenaito-media-picker/util"
|
||||
"kenaito-media-picker/vars"
|
||||
"os"
|
||||
@@ -10,7 +9,7 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
func DoHandleVideo(rootDir string) {
|
||||
func DoHandleVideo(pickerDir string) {
|
||||
// 释放ffprobe
|
||||
readerFileName := "./ffprobe.exe"
|
||||
if util.CheckFileIsExist(readerFileName) {
|
||||
@@ -53,18 +52,18 @@ func DoHandleVideo(rootDir string) {
|
||||
vars.VideoIgnorePathList = append(vars.VideoIgnorePathList, videoFilePath)
|
||||
}
|
||||
if len(vars.VideoReadErrorPathList) > 0 {
|
||||
readInfoErrorPath := rootDir + string(os.PathSeparator) + "读取异常"
|
||||
readInfoErrorPath := pickerDir + string(os.PathSeparator) + "读取异常"
|
||||
if util.CreateDir(readInfoErrorPath) {
|
||||
util.DoMoveFileToDir(vars.VideoReadErrorPathList, readInfoErrorPath)
|
||||
}
|
||||
}
|
||||
if len(vars.VideoIgnorePathList) > 0 {
|
||||
ignorePath := rootDir + string(os.PathSeparator) + "已忽略"
|
||||
ignorePath := pickerDir + string(os.PathSeparator) + "已忽略"
|
||||
if util.CreateDir(ignorePath) {
|
||||
util.DoMoveFileToDir(vars.VideoIgnorePathList, ignorePath)
|
||||
}
|
||||
}
|
||||
doPickVideoFile(rootDir, vars.VideoPath2WidthHeightMap)
|
||||
doPickVideoFile(pickerDir, vars.VideoPath2WidthHeightMap)
|
||||
// 删除ffprobe
|
||||
if util.CheckFileIsExist(readerFileName) {
|
||||
_ = os.Remove(readerFileName)
|
||||
@@ -73,9 +72,9 @@ func DoHandleVideo(rootDir string) {
|
||||
}
|
||||
|
||||
// 条件视频并分组存放
|
||||
func doPickVideoFile(rootDir string, videoPath2WidthHeightMap map[string]string) {
|
||||
func doPickVideoFile(pickerDir string, videoPath2WidthHeightMap map[string]string) {
|
||||
if len(videoPath2WidthHeightMap) == 0 {
|
||||
fmt.Printf("=== 当前目录下没有扫描到视频文件, %s \n", rootDir)
|
||||
fmt.Printf("=== 当前目录下没有扫描到视频文件, %s \n", pickerDir)
|
||||
readerFileName := "./ffprobe.exe"
|
||||
if util.CheckFileIsExist(readerFileName) {
|
||||
_ = os.Remove(readerFileName)
|
||||
@@ -97,269 +96,268 @@ func doPickVideoFile(rootDir string, videoPath2WidthHeightMap map[string]string)
|
||||
}
|
||||
handleSquareVideo(currentVideoPath, width, height, suffix)
|
||||
}
|
||||
uid := strings.ReplaceAll(uuid.NewV4().String(), "-", "")
|
||||
moveNormalVideo(uid, rootDir)
|
||||
moveHorizontalVideo(uid, rootDir)
|
||||
moveVerticalVideo(uid, rootDir)
|
||||
moveSquareVideo(uid, rootDir)
|
||||
moveGifVideo(uid, rootDir)
|
||||
moveNormalVideo(pickerDir)
|
||||
moveHorizontalVideo(pickerDir)
|
||||
moveVerticalVideo(pickerDir)
|
||||
moveSquareVideo(pickerDir)
|
||||
moveGifVideo(pickerDir)
|
||||
}
|
||||
|
||||
// 移动垂直视频
|
||||
func moveVerticalVideo(uid string, rootDir string) {
|
||||
func moveVerticalVideo(pickerDir string) {
|
||||
pathSeparator := string(os.PathSeparator)
|
||||
if len(vars.VideoVertical1KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_竖屏_1k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_竖屏_1k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoVertical1KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoVertical2KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_竖屏_2k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_竖屏_2k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoVertical2KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoVertical3KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_竖屏_3k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_竖屏_3k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoVertical3KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoVertical4KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_竖屏_4k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_竖屏_4k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoVertical4KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoVertical5KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_竖屏_5k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_竖屏_5k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoVertical5KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoVertical6KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_竖屏_6k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_竖屏_6k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoVertical6KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoVertical7KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_竖屏_7k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_竖屏_7k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoVertical7KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoVertical8KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_竖屏_8k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_竖屏_8k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoVertical8KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoVertical9KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_竖屏_9k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_竖屏_9k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoVertical9KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoVerticalHKList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_竖屏_原画质"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_竖屏_原画质"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoVerticalHKList, videoDirPath)
|
||||
}
|
||||
}
|
||||
|
||||
// 移动水平视频
|
||||
func moveHorizontalVideo(uid string, rootDir string) {
|
||||
func moveHorizontalVideo(pickerDir string) {
|
||||
pathSeparator := string(os.PathSeparator)
|
||||
if len(vars.VideoHorizontal1KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_1k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_横屏_1k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoHorizontal1KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoHorizontal2KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_2k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_横屏_2k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoHorizontal2KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoHorizontal3KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_3k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_横屏_3k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoHorizontal3KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoHorizontal4KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_4k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_横屏_4k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoHorizontal4KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoHorizontal5KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_5k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_横屏_5k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoHorizontal5KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoHorizontal6KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_6k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_横屏_6k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoHorizontal6KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoHorizontal7KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_7k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_横屏_7k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoHorizontal7KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoHorizontal8KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_8k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_横屏_8k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoHorizontal8KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoHorizontal9KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_9k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_横屏_9k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoHorizontal9KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoHorizontalHKList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_原画质"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_横屏_原画质"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoHorizontalHKList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoHorizontalStandard720PList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_720P"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_横屏_720P"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoHorizontalStandard720PList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoHorizontalStandard1D5PList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_1D5KP"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_横屏_1D5KP"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoHorizontalStandard1D5PList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoHorizontalStandard1080PList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_1080P"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_横屏_1080P"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoHorizontalStandard1080PList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoHorizontalStandard2DKList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_2DKP"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_横屏_2DKP"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoHorizontalStandard2DKList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoHorizontalStandard2D5KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_2D5KP"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_横屏_2D5KP"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoHorizontalStandard2D5KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoHorizontalStandardUltraWide2List) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_UltraWide2KP"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_横屏_UltraWide2KP"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoHorizontalStandardUltraWide2List, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoHorizontalStandardUltraWide3List) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_UltraWide3KP"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_横屏_UltraWide3KP"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoHorizontalStandardUltraWide3List, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoHorizontalStandardUltraWide4List) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_UltraWide4KP"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_横屏_UltraWide4KP"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoHorizontalStandardUltraWide4List, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoHorizontalStandard4KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_4KP"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_横屏_4KP"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoHorizontalStandard4KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoHorizontalStandard4KHList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_4KHP"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_横屏_4KHP"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoHorizontalStandard4KHList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoHorizontalStandard8KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_8KP"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_横屏_8KP"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoHorizontalStandard8KList, videoDirPath)
|
||||
}
|
||||
}
|
||||
|
||||
// 移动等比视频
|
||||
func moveSquareVideo(uid string, rootDir string) {
|
||||
func moveSquareVideo(pickerDir string) {
|
||||
pathSeparator := string(os.PathSeparator)
|
||||
if len(vars.VideoSquare1KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_等比_1k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_等比_1k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoSquare1KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoSquare2KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_等比_2k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_等比_2k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoSquare2KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoSquare3KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_等比_3k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_等比_3k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoSquare3KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoSquare4KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_等比_4k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_等比_4k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoSquare4KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoSquare5KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_等比_5k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_等比_5k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoSquare5KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoSquare6KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_等比_6k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_等比_6k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoSquare6KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoSquare7KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_等比_7k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_等比_7k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoSquare7KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoSquare8KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_等比_8k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_等比_8k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoSquare8KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoSquare9KList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_等比_9k"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_等比_9k"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoSquare9KList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoSquareHKList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_等比_原画质"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_等比_原画质"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoSquareHKList, videoDirPath)
|
||||
}
|
||||
}
|
||||
|
||||
// 移动gif视频
|
||||
func moveGifVideo(uid string, rootDir string) {
|
||||
func moveGifVideo(pickerDir string) {
|
||||
pathSeparator := string(os.PathSeparator)
|
||||
if len(vars.VideoHorizontalGifList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_GIF"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_横屏_GIF"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoHorizontalGifList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoVerticalGifList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_竖屏_GIF"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_竖屏_GIF"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoVerticalGifList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoSquareGifList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_等比_GIF"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_等比_GIF"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoSquareGifList, videoDirPath)
|
||||
}
|
||||
}
|
||||
|
||||
// 移动普通视频
|
||||
func moveNormalVideo(uid string, rootDir string) {
|
||||
func moveNormalVideo(pickerDir string) {
|
||||
pathSeparator := string(os.PathSeparator)
|
||||
if len(vars.VideoHorizontalNormalList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_普通"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_横屏_普通"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoHorizontalNormalList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoVerticalNormalList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_竖屏_普通"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_竖屏_普通"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoVerticalNormalList, videoDirPath)
|
||||
}
|
||||
if len(vars.VideoSquareNormalList) > 0 {
|
||||
videoDirPath := rootDir + pathSeparator + uid + "-视频_等比_普通"
|
||||
videoDirPath := pickerDir + pathSeparator + "视频_等比_普通"
|
||||
util.CreateDir(videoDirPath)
|
||||
util.DoMoveFileToDir(vars.VideoSquareNormalList, videoDirPath)
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import (
|
||||
"kenaito-media-picker/core"
|
||||
"kenaito-media-picker/vars"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"time"
|
||||
)
|
||||
|
||||
@@ -20,13 +21,16 @@ func main() {
|
||||
fmt.Println("=== 获取当前路径异常", err)
|
||||
return
|
||||
}
|
||||
pickerDir := filepath.Join(rootDir, filepath.Base(rootDir)+"-picker")
|
||||
vars.GlobalPickerDir = pickerDir
|
||||
fmt.Printf("=== 整理输出目录(白名单): %s \n", pickerDir)
|
||||
scanner := core.FileScanner{}
|
||||
scanner.DoScan(rootDir)
|
||||
scanner.DoFilter()
|
||||
if len(vars.GlobalImagePathList) > 0 {
|
||||
core.DoHandleImage(rootDir)
|
||||
core.DoHandleImage(pickerDir)
|
||||
}
|
||||
if len(vars.GlobalVideoPathList) > 0 {
|
||||
core.DoHandleVideo(rootDir)
|
||||
core.DoHandleVideo(pickerDir)
|
||||
}
|
||||
}
|
||||
|
||||
+6
-4
@@ -3,13 +3,16 @@ package util
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"github.com/redmask-hb/GoSimplePrint/goPrint"
|
||||
"io"
|
||||
"math"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/redmask-hb/GoSimplePrint/goPrint"
|
||||
uuid "github.com/satori/go.uuid"
|
||||
)
|
||||
|
||||
var supportVideoTypes = []string{
|
||||
@@ -148,10 +151,9 @@ func DoMoveFileToDir(filePathList []string, videoDirPath string) {
|
||||
bar.PrintEnd("=== Finish")
|
||||
}
|
||||
|
||||
// 移动文件到目录,跨文件系统时自动 fallback 为 copy+delete
|
||||
// 移动文件到目录,跨文件系统时自动 fallback 为 copy+delete,目标文件名使用 uuid+原文件名防止同名覆盖
|
||||
func moveFileToDir(sourceFilePath string, targetDirectory string) bool {
|
||||
splits := strings.Split(sourceFilePath, string(os.PathSeparator))
|
||||
fileName := splits[len(splits)-1]
|
||||
fileName := strings.ReplaceAll(uuid.NewV4().String(), "-", "") + "_" + filepath.Base(sourceFilePath)
|
||||
targetFilePath := targetDirectory + fileName
|
||||
err := os.Rename(sourceFilePath, targetFilePath)
|
||||
if err == nil {
|
||||
|
||||
@@ -6,3 +6,4 @@ var GlobalFilePath2FileNameMap = make(map[string]string) // 文件路径和文
|
||||
var GlobalFilePath2FileExtMap = make(map[string]string) // 文件路径和文件扩展名的映射关系
|
||||
var GlobalVideoPathList []string // 所有视频文件的路径
|
||||
var GlobalImagePathList []string // 所有图片文件的路径
|
||||
var GlobalPickerDir string // 已整理文件的输出目录(白名单,扫描时跳过)
|
||||
|
||||
Reference in New Issue
Block a user