处理文件夹中的所有帧并生成字幕
(self, input_folder, output_folder)
| 61 | return text.strip() if text else None |
| 62 | |
| 63 | def process_frames(self, input_folder, output_folder): |
| 64 | """处理文件夹中的所有帧并生成字幕""" |
| 65 | if not os.path.exists(output_folder): |
| 66 | os.makedirs(output_folder) |
| 67 | |
| 68 | for filename in sorted(os.listdir(input_folder)): |
| 69 | if not filename.endswith(('.jpg', '.png')): |
| 70 | continue |
| 71 | |
| 72 | match = re.match(self.pattern, filename) |
| 73 | if not match: |
| 74 | continue |
| 75 | |
| 76 | episode_num, title, timestamp, similarity = match.groups() |
| 77 | video_title = f"{episode_num}{title}" |
| 78 | print(f"处理文件: {filename}") |
| 79 | |
| 80 | img_path = os.path.join(input_folder, filename) |
| 81 | text = self.process_image(img_path) |
| 82 | |
| 83 | if not text: |
| 84 | continue |
| 85 | |
| 86 | print(f"识别到文本: {text}") |
| 87 | |
| 88 | # 检查重复 |
| 89 | subtitles = self.subtitles_dict[video_title] |
| 90 | if subtitles and subtitles[-1]["text"] == text: |
| 91 | continue |
| 92 | |
| 93 | # 添加字幕 |
| 94 | self.subtitles_dict[video_title].append({ |
| 95 | "timestamp": timestamp, |
| 96 | "similarity": float(similarity), |
| 97 | "text": text |
| 98 | }) |
| 99 | |
| 100 | # 保存字幕文件 |
| 101 | for video_title, subtitles in self.subtitles_dict.items(): |
| 102 | sorted_subtitles = sorted(subtitles, key=lambda x: self.parse_timestamp(x["timestamp"])) |
| 103 | output_json = os.path.join(output_folder, f"{video_title}.json") |
| 104 | |
| 105 | try: |
| 106 | with open(output_json, 'w', encoding='utf-8') as f: |
| 107 | json.dump(sorted_subtitles, f, ensure_ascii=False, indent=4) |
| 108 | print(f"成功保存 {video_title} 的字幕") |
| 109 | except Exception as e: |
| 110 | print(f"保存文件时出错: {str(e)}") |
| 111 | |
| 112 | print("\n处理完成") |
no test coverage detected