diff --git a/internal/organize/organize.go b/internal/organize/organize.go index dfd9454..821af71 100644 --- a/internal/organize/organize.go +++ b/internal/organize/organize.go @@ -150,13 +150,18 @@ func (o *Organizer) ProcessMedia(media []scanner.File) { for _, f := range media { res, err := probe.ProbeMediaFile(o.ffprobePath, f.Path) if err != nil { + // 仅 MIME 明确为视频/音频的文件才移入异常/忽略目录; + // octet-stream/空 MIME 且 ffprobe 无法确认的原地忽略,不移动 if strings.HasPrefix(f.Mime, "video/") { fail++ o.add(f, dirVideoErr) fmt.Printf("=== 异常视频: %s \n", f.Path) - } else { + } else if scanner.IsExplicitMediaMime(f.Mime) { ignore++ o.add(f, dirVideoIgnored) + } else { + ignore++ + fmt.Printf("=== 无法确认的非媒体文件, 原地忽略: %s \n", f.Path) } continue } @@ -170,8 +175,14 @@ func (o *Organizer) ProcessMedia(media []scanner.File) { o.record(f, "audio", res) o.add(f, dirAudio) default: - ignore++ - o.add(f, dirVideoIgnored) + // ffprobe 无音视频流:MIME 明确为媒体的归入忽略目录,其余原地不动 + if scanner.IsExplicitMediaMime(f.Mime) { + ignore++ + o.add(f, dirVideoIgnored) + } else { + ignore++ + fmt.Printf("=== 无法确认的非媒体文件, 原地忽略: %s \n", f.Path) + } } } fmt.Printf("=== 媒体处理完毕,视频: %d, 音频: %d, 读取异常: %d, 忽略: %d \n\n", video, audio, fail, ignore) diff --git a/internal/scanner/scanner.go b/internal/scanner/scanner.go index c898eaa..0c8610b 100644 --- a/internal/scanner/scanner.go +++ b/internal/scanner/scanner.go @@ -104,6 +104,11 @@ func detectMime(filePath string) string { return mt.String() } +// IsExplicitMediaMime 判断 MIME 是否明确属于视频/音频(区别于 octet-stream/空 等无法确定的情况) +func IsExplicitMediaMime(fileMime string) bool { + return strings.HasPrefix(fileMime, "video/") || strings.HasPrefix(fileMime, "audio/") +} + // isPotentialMedia 判断是否可能是媒体文件(交由 ffprobe 进一步确认) func isPotentialMedia(fileMime string) bool { if fileMime == "" || fileMime == "application/octet-stream" {