syncthing 忽略群晖生成的 Live Photo 转码视频

群晖的 Synology Photos 备份 Live Photo 后会在同目录下生成一个同名的 MOV 文件。

若直接备份到其他相册易造成重复,因此我修改了 syncthing 代码:当文件为 MOV 格式时,判断同目录是否存在同名 HEIC 文件,若存在则不同步该 MOV 文件。

diff --git a/lib/model/folder.go b/lib/model/folder.go
index 70fe941f2..c333b5fd3 100644
--- a/lib/model/folder.go
+++ b/lib/model/folder.go
@@ -695,7 +695,27 @@ func (f *folder) scanSubdirsChangedAndNew(ctx context.Context, subDirs []string,
 			}
 			return changes, err
 		}
-
+		
+		// 判断并忽略属于 Live Photo 的 .mov 视频文件
+		fileName := res.File.Name
+		// 检查文件扩展名
+		if strings.HasSuffix(strings.ToLower(fileName), ".mov") {
+			// 去掉扩展名
+			baseName := fileName[:len(fileName)-4]
+			
+			// 构建同名的 .heic 文件路径
+			heicPath := baseName + ".heic"
+			heicPathUpper := baseName + ".HEIC"
+
+			_, err1 := f.mtimefs.Stat(heicPath)
+			_, err2 := f.mtimefs.Stat(heicPathUpper)
+			if err1 == nil || err2 == nil {
+				// 找到了同名的 HEIC 文件,忽略
+				f.sl.DebugContext(ctx, "Ignoring Live Photo video", slog.String("file", fileName))
+				continue
+			}
+		}
+		
 		if ok, err := batch.Update(res.File); err != nil {
 			return 0, err
 		} else if ok {

编译使用

GOFLAGS=-buildvcs=false CGO_ENABLED=0 go run build.go \
    -no-upgrade \
    -version=v2.3.3 \
    build syncthing

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理