frame_reorganizer.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. 图片帧重新组织脚本
  5. 将extracted_frames_test文件夹中的所有图片按连续序号重命名并合并到一个目录
  6. """
  7. import os
  8. import shutil
  9. from pathlib import Path
  10. import re
  11. def get_frame_number(filename):
  12. """从文件名中提取帧序号"""
  13. match = re.search(r'frame_(\d+)', filename)
  14. return int(match.group(1)) if match else 0
  15. def collect_all_frames(source_dir):
  16. """收集所有子文件夹中的图片文件"""
  17. all_frames = []
  18. source_path = Path(source_dir)
  19. # 获取所有子文件夹并按名称排序
  20. subdirs = sorted([d for d in source_path.iterdir() if d.is_dir()])
  21. for subdir in subdirs:
  22. print(f"处理文件夹: {subdir.name}")
  23. # 获取该文件夹中的所有jpg文件
  24. jpg_files = list(subdir.glob('*.jpg'))
  25. # 按帧序号排序
  26. jpg_files.sort(key=lambda x: get_frame_number(x.name))
  27. for jpg_file in jpg_files:
  28. all_frames.append({
  29. 'original_path': jpg_file,
  30. 'folder_name': subdir.name,
  31. 'original_frame_num': get_frame_number(jpg_file.name)
  32. })
  33. print(f" 找到 {len(jpg_files)} 个图片文件")
  34. return all_frames
  35. def reorganize_frames(source_dir, output_dir):
  36. """重新组织和重命名图片文件"""
  37. # 创建输出目录
  38. output_path = Path(output_dir)
  39. output_path.mkdir(exist_ok=True)
  40. # 收集所有图片文件
  41. all_frames = collect_all_frames(source_dir)
  42. print(f"\n总共找到 {len(all_frames)} 个图片文件")
  43. print("开始重命名和复制...")
  44. # 按新的连续序号重命名并复制
  45. for new_index, frame_info in enumerate(all_frames):
  46. # 生成新的文件名
  47. new_filename = f"frame_{new_index:06d}.jpg"
  48. new_path = output_path / new_filename
  49. # 复制文件
  50. shutil.copy2(frame_info['original_path'], new_path)
  51. if new_index % 100 == 0: # 每100个文件显示一次进度
  52. print(f" 已处理: {new_index + 1}/{len(all_frames)}")
  53. print(f"\n完成!所有文件已重命名并复制到: {output_dir}")
  54. print(f"文件命名范围: frame_000000.jpg 到 frame_{len(all_frames)-1:06d}.jpg")
  55. return len(all_frames)
  56. def main():
  57. """主函数"""
  58. # 设置路径
  59. source_dir = r"d:\data\extracted_frames_test"
  60. output_dir = r"d:\data\reorganized_frames"
  61. print("图片帧重新组织脚本")
  62. print(f"源目录: {source_dir}")
  63. print(f"输出目录: {output_dir}")
  64. print("-" * 50)
  65. # 检查源目录是否存在
  66. if not os.path.exists(source_dir):
  67. print(f"错误: 源目录不存在 - {source_dir}")
  68. return
  69. try:
  70. # 执行重组织
  71. total_files = reorganize_frames(source_dir, output_dir)
  72. print(f"\n成功处理了 {total_files} 个图片文件")
  73. except Exception as e:
  74. print(f"错误: {e}")
  75. return
  76. if __name__ == "__main__":
  77. main()