|
|
@@ -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()
|