nell332 3 周之前
當前提交
327de2f2f9
共有 1 個文件被更改,包括 63 次插入 和 0 次删除
  1. 63 0
      jellyfin_nfo_gen.py

+ 63 - 0
jellyfin_nfo_gen.py

@@ -0,0 +1,63 @@
+#!/usr/bin/env python3
+import os
+import html
+
+# ====================== 配置区,只需要修改这里 ======================
+MEDIA_ROOT = "/home/fred/PT/Movies"
+OVERWRITE_EXIST_NFO = True  # True: 强制重写已存在的nfo,更新标题
+VIDEO_EXT = {".mkv", ".mp4", ".m4v", ".webm", ".mov", ".avi", ".flv", ".wmv"}
+FOLLOW_SYMLINK = False
+# ====================================================================
+
+def main():
+    total_videos = 0
+    created = 0
+    overwrote = 0
+
+    print(f"开始递归扫描根目录:{MEDIA_ROOT}")
+    print(f"强制重写已有nfo:{OVERWRITE_EXIST_NFO}")
+    print("-"*60)
+
+    for dirpath, _, filenames in os.walk(MEDIA_ROOT, followlinks=FOLLOW_SYMLINK):
+        print(f"\n【正在扫描目录】{dirpath}")
+        for fname in filenames:
+            file_base, ext = os.path.splitext(fname)
+            ext_lower = ext.lower()
+            if ext_lower not in VIDEO_EXT:
+                continue
+
+            total_videos += 1
+            nfo_path = os.path.join(dirpath, f"{file_base}.nfo")
+            safe_title = html.escape(file_base)
+
+            nfo_content = f"""<?xml version="1.0" encoding="utf-8"?>
+<episodedetails>
+  <title>{safe_title}</title>
+  <lockdata>true</lockdata>
+</episodedetails>
+"""
+            if os.path.exists(nfo_path):
+                # 覆盖已有nfo
+                with open(nfo_path, "w", encoding="utf-8") as f:
+                    f.write(nfo_content)
+                print(f"  [覆盖] {fname}")
+                overwrote +=1
+            else:
+                # 新建nfo
+                with open(nfo_path, "w", encoding="utf-8") as f:
+                    f.write(nfo_content)
+                print(f"  [新建] {fname}")
+                created +=1
+
+    print("\n" + "="*60)
+    print("===== 任务完成 =====")
+    print(f"扫描到视频总数: {total_videos}")
+    print(f"新建nfo数量: {created}")
+    print(f"覆盖已有nfo: {overwrote}")
+    print("="*60)
+
+if __name__ == "__main__":
+    if not os.path.isdir(MEDIA_ROOT):
+        print(f"错误:媒体根目录不存在 -> {MEDIA_ROOT}")
+    else:
+        main()