fix: 修复媒体整理中的文件覆盖、BMP解析与重复整理问题

- 移动文件改用 uuid+原文件名,避免同名覆盖丢失数据
- BMP 负高度取绝对值,自顶向下格式解析正确
- 新增 {目录名}-picker 白名单输出目录,整理后跳过重复扫描
- 分类目录名去掉 uuid 前缀,重复运行并入已有目录
This commit is contained in:
2025-03-15 21:17:24 +08:00
parent 0ebd84d3fe
commit f5e3f6b4ef
8 changed files with 239 additions and 135 deletions
+63 -65
View File
@@ -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)
}