| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- """
- 图片帧重新组织脚本
- 将extracted_frames_test文件夹中的所有图片按连续序号重命名并合并到一个目录
- """
- import os
- import shutil
- from pathlib import Path
- import re
- def get_frame_number(filename):
- """从文件名中提取帧序号"""
- match = re.search(r'frame_(\d+)', filename)
- return int(match.group(1)) if match else 0
- def collect_all_frames(source_dir):
- """收集所有子文件夹中的图片文件"""
- all_frames = []
- source_path = Path(source_dir)
-
- # 获取所有子文件夹并按名称排序
- subdirs = sorted([d for d in source_path.iterdir() if d.is_dir()])
-
- for subdir in subdirs:
- print(f"处理文件夹: {subdir.name}")
-
- # 获取该文件夹中的所有jpg文件
- jpg_files = list(subdir.glob('*.jpg'))
-
- # 按帧序号排序
- jpg_files.sort(key=lambda x: get_frame_number(x.name))
-
- for jpg_file in jpg_files:
- all_frames.append({
- 'original_path': jpg_file,
- 'folder_name': subdir.name,
- 'original_frame_num': get_frame_number(jpg_file.name)
- })
-
- print(f" 找到 {len(jpg_files)} 个图片文件")
-
- return all_frames
- def reorganize_frames(source_dir, output_dir):
- """重新组织和重命名图片文件"""
- # 创建输出目录
- output_path = Path(output_dir)
- output_path.mkdir(exist_ok=True)
-
- # 收集所有图片文件
- all_frames = collect_all_frames(source_dir)
-
- print(f"\n总共找到 {len(all_frames)} 个图片文件")
- print("开始重命名和复制...")
-
- # 按新的连续序号重命名并复制
- for new_index, frame_info in enumerate(all_frames):
- # 生成新的文件名
- new_filename = f"frame_{new_index:06d}.jpg"
- new_path = output_path / new_filename
-
- # 复制文件
- shutil.copy2(frame_info['original_path'], new_path)
-
- if new_index % 100 == 0: # 每100个文件显示一次进度
- print(f" 已处理: {new_index + 1}/{len(all_frames)}")
-
- print(f"\n完成!所有文件已重命名并复制到: {output_dir}")
- print(f"文件命名范围: frame_000000.jpg 到 frame_{len(all_frames)-1:06d}.jpg")
-
- return len(all_frames)
- def main():
- """主函数"""
- # 设置路径
- source_dir = r"d:\data\extracted_frames_test"
- output_dir = r"d:\data\reorganized_frames"
-
- print("图片帧重新组织脚本")
- print(f"源目录: {source_dir}")
- print(f"输出目录: {output_dir}")
- print("-" * 50)
-
- # 检查源目录是否存在
- if not os.path.exists(source_dir):
- print(f"错误: 源目录不存在 - {source_dir}")
- return
-
- try:
- # 执行重组织
- total_files = reorganize_frames(source_dir, output_dir)
- print(f"\n成功处理了 {total_files} 个图片文件")
-
- except Exception as e:
- print(f"错误: {e}")
- return
- if __name__ == "__main__":
- main()
|