- 删除 macOS 和非 Windows 平台的内嵌 ffprobe 实现 - 移除 build.sh 中针对不同操作系统的构建逻辑 - 更新 README.md 中关于多平台 ffprobe 内嵌的说明 - 修改 SkipNames 列表,移除对 ffprobe_mac 的跳过配置 - 将内嵌的 ffprobe 统一为 Windows 版本 (ffprobe.exe)
71 lines
1.9 KiB
Go
71 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"time"
|
|
|
|
"kenaito-media-picker/internal/organize"
|
|
"kenaito-media-picker/internal/probe"
|
|
"kenaito-media-picker/internal/scanner"
|
|
"kenaito-media-picker/internal/store"
|
|
)
|
|
|
|
func main() {
|
|
fmt.Println("=== 警告:该程序会改变目录结构,将在5秒后开始执行")
|
|
time.Sleep(time.Second * 5)
|
|
|
|
rootDir, err := os.Getwd()
|
|
if err != nil {
|
|
fmt.Println("=== 获取当前路径异常", err)
|
|
return
|
|
}
|
|
pickerDir := filepath.Join(rootDir, filepath.Base(rootDir)+"-picker")
|
|
fmt.Printf("=== 整理输出目录(白名单): %s \n", pickerDir)
|
|
|
|
// 1. 扫描并过滤(跳过输出目录、数据库与 ffprobe 相关文件)
|
|
res, err := scanner.Scan(scanner.Options{
|
|
RootDir: rootDir,
|
|
SkipDir: pickerDir,
|
|
SkipNames: []string{store.DBFileName, probe.FFprobeExeName},
|
|
})
|
|
if err != nil {
|
|
fmt.Println("=== 扫描失败:", err)
|
|
return
|
|
}
|
|
res.Filter()
|
|
|
|
// 2. 初始化媒体信息数据库(失败不影响整理,仅无法记录)
|
|
st, err := store.Open(filepath.Join(rootDir, store.DBFileName))
|
|
if err != nil {
|
|
fmt.Println("=== 初始化数据库失败(继续整理, 不记录媒体信息):", err)
|
|
st = nil
|
|
}
|
|
if st != nil {
|
|
defer st.Close()
|
|
}
|
|
|
|
// 3. 释放内嵌 ffprobe(按当前系统);失败只跳过媒体整理,图片照常处理
|
|
ffprobePath := ""
|
|
if (len(res.Images) > 0 || len(res.Media) > 0) && probe.HasEmbeddedFFprobe() {
|
|
if err := probe.ReleaseFFprobe(); err != nil {
|
|
fmt.Println("=== 释放解码器失败, 视频/音频整理将跳过(图片照常处理):", err)
|
|
} else {
|
|
ffprobePath = probe.FFprobePath()
|
|
defer probe.RemoveFFprobe()
|
|
}
|
|
}
|
|
|
|
// 4. 整理
|
|
org := organize.New(pickerDir, ffprobePath, st)
|
|
if len(res.Images) > 0 {
|
|
org.ProcessImages(res.Images)
|
|
}
|
|
if len(res.Media) > 0 && ffprobePath != "" {
|
|
org.ProcessMedia(res.Media)
|
|
}
|
|
org.Flush()
|
|
fmt.Println("=== 整理完成")
|
|
}
|