| 149 | |
| 150 | |
| 151 | class VideoProcessor: |
| 152 | def __init__(self): |
| 153 | self.task = service.trans_dh_service.TransDhTask() |
| 154 | self.basedir = GlobalConfig.instance().result_dir |
| 155 | self.is_initialized = False |
| 156 | self._initialize_service() |
| 157 | print("VideoProcessor init done") |
| 158 | |
| 159 | def _initialize_service(self): |
| 160 | logger.info("开始初始化 trans_dh_service...") |
| 161 | try: |
| 162 | time.sleep(5) |
| 163 | logger.info("trans_dh_service 初始化完成。") |
| 164 | self.is_initialized = True |
| 165 | except Exception as e: |
| 166 | logger.error(f"初始化 trans_dh_service 失败: {e}") |
| 167 | |
| 168 | def process_video( |
| 169 | self, audio_file, video_file, watermark=False, digital_auth=False |
| 170 | ): |
| 171 | while not self.is_initialized: |
| 172 | logger.info("服务尚未完成初始化,等待 1 秒...") |
| 173 | time.sleep(1) |
| 174 | work_id = str(uuid.uuid1()) |
| 175 | code = work_id |
| 176 | temp_dir = os.path.join(GlobalConfig.instance().temp_dir, work_id) |
| 177 | result_dir = GlobalConfig.instance().result_dir |
| 178 | video_writer_thread = None |
| 179 | final_result = None |
| 180 | |
| 181 | try: |
| 182 | cap = cv2.VideoCapture(video_file) |
| 183 | width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) |
| 184 | height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) |
| 185 | fps = cap.get(cv2.CAP_PROP_FPS) |
| 186 | cap.release() |
| 187 | |
| 188 | audio_path = audio_file |
| 189 | video_path = video_file |
| 190 | |
| 191 | self.task.task_dic[code] = "" |
| 192 | self.task.work(audio_path, video_path, code, 0, 0, 0, 0) |
| 193 | |
| 194 | result_path = self.task.task_dic[code][2] |
| 195 | final_result_dir = os.path.join("result", code) |
| 196 | os.makedirs(final_result_dir, exist_ok=True) |
| 197 | os.system(f"mv {result_path} {final_result_dir}") |
| 198 | os.system( |
| 199 | f"rm -rf {os.path.join(os.path.dirname(result_path), code + '*.*')}" |
| 200 | ) |
| 201 | result_path = os.path.realpath( |
| 202 | os.path.join(final_result_dir, os.path.basename(result_path)) |
| 203 | ) |
| 204 | return result_path |
| 205 | |
| 206 | except Exception as e: |
| 207 | logger.error(f"处理视频时发生错误: {e}") |
| 208 | raise gr.Error(str(e)) |