Kaynağa Gözat

增加生成片尾视频次数 防止失败

zhangyong 1 yıl önce
ebeveyn
işleme
2d1cd5b739
1 değiştirilmiş dosya ile 32 ekleme ve 13 silme
  1. 32 13
      video_rewriting/video_prep.py

+ 32 - 13
video_rewriting/video_prep.py

@@ -95,6 +95,9 @@ class getVideo:
                     task_id = video_id.split(',')
                 count = 0  # 初始化计数器
                 for id in task_id:
+                    pw_list, zm_list = Material.get_pwsrt_data(feishu_id, pw_sheet)  # 获取srt
+                    zm = random.choice(zm_list)  # 随机选择 视频中字幕
+                    pws = random.choice(pw_list)  # 随机选择 片尾srt+音频
                     Common.logger("log").info(f"{task_mark}下的ID{id} 开始获取视频")
                     time.sleep(1)
                     if old_id and old_id != 'None':
@@ -104,7 +107,7 @@ class getVideo:
 
                     if len(data_list) == 0:
                         Common.logger("log").info(f"{task_mark}下的视频ID{id} 已经改造过了")
-                        Feishu.bot(mark, '机器自动改造消息通知', f'{task_mark}任务下的视频ID{id},没有已经改造的视频了', name)
+                        Feishu.bot(mark, '机器自动改造消息通知', f'{task_mark}任务下的用户ID{id},没有已经改造的视频了', name)
                         cls.remove_files(video_path_url)
                         continue
                     Common.logger("log").info(f"{task_mark}下的ID{id} 获取视频完成,共{len(data_list)}条")
@@ -119,22 +122,38 @@ class getVideo:
                             Common.logger("log").info(f"{task_mark}下的视频ID{id},{new_video_path}视频下载失败")
                             cls.remove_files(video_path_url)
                             continue
-                        pw_list, zm_list = Material.get_pwsrt_data(feishu_id, pw_sheet)  # 获取srt
-                        pws = random.choice(pw_list)  # 随机选择 片尾srt+音频
-                        zm = random.choice(zm_list)  # 随机选择 视频中字幕
+
                         if video_ending and video_ending != 'None':
                             pw_id = pws["pw_id"]
                             pw_srt = pws["pw_srt"]
-                            pw_url = PQ.get_audio_url(task_mark, pw_id, title, mark)
-                            jpg_path = FFmpeg.video_png(new_video_path, video_path_url)  # 生成视频最后一帧jpg
-                            time.sleep(1)
-                            pw_path = FFmpeg.pw_video(jpg_path, video_path_url, pw_url[0]["video_url"], pw_srt)  # 生成片尾视频
+                            pw_url = PQ.get_pw_url(pw_id)
+                            pw_random_id = cls.random_id()
+                            jpg_path = None
+                            pw_path = None
+                            for attempt in range(3):
+                                jpg_path = FFmpeg.video_png(new_video_path, video_path_url, pw_random_id)  # 生成视频最后一帧jpg
+                                if os.path.isfile(jpg_path):
+                                    Common.logger("log").info(f"{task_mark}下的视频ID{id},生成视频最后一帧成功")
+                                    break
+                                time.sleep(1)
+                            if not os.path.isfile(jpg_path):
+                                Feishu.bot(mark, '机器自动改造消息通知', f'{task_mark}任务用户ID{id}下的视频{v_id},获取视频最后一帧失败,请关注', name)
+                                cls.remove_files(video_path_url)
+                                continue
+                            for attempt in range(3):
+                                pw_path = FFmpeg.pw_video(jpg_path, video_path_url, pw_url, pw_srt, pw_random_id)  # 生成片尾视频
+                                if os.path.isfile(pw_path):
+                                    Common.logger("log").info(f"{task_mark}下的视频ID{id},生成片尾视频成功")
+                                    break
+                                time.sleep(1)
+                            if not os.path.isfile(pw_path):
+                                Feishu.bot(mark, '机器自动改造消息通知', f'{task_mark}任务用户ID{id}下的视频{v_id},生成片尾视频失败,请关注',
+                                           name)
+                                cls.remove_files(video_path_url)
+                                continue
+                            pw_video_list = [new_video_path, pw_path]
+                            video_path = FFmpeg.concatenate_videos(pw_video_list, video_path_url)  # 视频与片尾拼接到一起
                             time.sleep(1)
-
-                            video_list = [new_video_path, pw_path]
-                            video_path = FFmpeg.concatenate_videos(video_list, video_path_url)  # 视频与片尾拼接到一起
-                            time.sleep(1)
-
                             if video_share and video_share != 'None':
                                 new_video_path = FFmpeg.single_video(video_path, video_share, video_path_url, zm)
                             else: