|
@@ -8,6 +8,8 @@ import time
|
|
|
import traceback
|
|
|
from datetime import datetime
|
|
|
|
|
|
+from loguru import logger
|
|
|
+
|
|
|
from common.gpt4o_mini_help import GPT4oMini
|
|
|
from common.redis import get_data, get_first_value_with_prefix, increment_key
|
|
|
from common.tag_video import Tag
|
|
@@ -114,7 +116,7 @@ class VideoProcessor:
|
|
|
else:
|
|
|
voice = "zhifeng_emo"
|
|
|
zm = Material.get_pzsrt_data("summary", "500Oe0", video_share)
|
|
|
- Common.logger(mark).info(f"{name}的{task_mark}下{channel_id}的用户:{url}开始获取视频")
|
|
|
+ logger.info(f"[+] {name}的{task_mark}下{channel_id}的用户:{url}开始获取视频")
|
|
|
data_list = cls.get_data_list(
|
|
|
channel_id, task_mark, url,
|
|
|
number,
|
|
@@ -122,7 +124,6 @@ class VideoProcessor:
|
|
|
)
|
|
|
if not data_list:
|
|
|
AliyunLogger.logging(channel_id, name, url, "", "无改造视频", "4000")
|
|
|
- Common.logger(mark).info(f"{name}的{task_mark}下{channel_id}的视频ID{url} 无改造视频")
|
|
|
text = (
|
|
|
f"**通知类型**: 没有改造的视频\n"
|
|
|
f"**负责人**: {name}\n"
|
|
@@ -132,11 +133,12 @@ class VideoProcessor:
|
|
|
Feishu.finish_bot(text, "https://open.feishu.cn/open-apis/bot/v2/hook/e7697dc6-5254-4411-8b59-3cd0742bf703",
|
|
|
"【 机器改造通知 】")
|
|
|
return
|
|
|
- Common.logger(mark).info(f"{name}的{task_mark}下的ID{url} 获取视频完成,共{len(data_list)}条")
|
|
|
+ logger.info(f"[+] {name}的{task_mark}下的ID{url} 获取视频完成,共{len(data_list)}条")
|
|
|
for video in data_list:
|
|
|
current_time = datetime.now()
|
|
|
formatted_time = current_time.strftime("%Y-%m-%d %H:%M:%S")
|
|
|
- print(f"{formatted_time}开始改造")
|
|
|
+ logger.info(f"[+][+][+][+][+][+] {name}的{task_mark}下的ID{url} , 时间:{formatted_time}开始改造")
|
|
|
+
|
|
|
cls.remove_files(mark)
|
|
|
file_path = cls.create_folders(mark)
|
|
|
new_title = cls.generate_title(video, title)
|
|
@@ -160,7 +162,7 @@ class VideoProcessor:
|
|
|
Common.logger(mark).info(f"{name}的{task_mark}下的视频{url},标题为空,使用兜底标题生成片尾")
|
|
|
time.sleep(1)
|
|
|
pw_random_id = cls.random_id()
|
|
|
- Common.logger(mark).info(f"{name}的{task_mark}下的ID{url} 开始下载视频")
|
|
|
+ logger.info(f"[+] {name}的{task_mark}下的ID{url} 开始下载视频")
|
|
|
video_path = cls.download_and_process_video( channel_id, video_url, file_path, v_id, video)
|
|
|
if not os.path.isfile(video_path) or os.path.getsize(video_path) == 0:
|
|
|
if name == "单点视频":
|
|
@@ -201,8 +203,10 @@ class VideoProcessor:
|
|
|
width, height = FFmpeg.get_w_h_size(video_path)
|
|
|
if width < height: # 判断是否需要修改为竖屏
|
|
|
video_path = FFmpeg.update_video_h_w(video_path, file_path, pw_random_id)
|
|
|
+ logger.info(f"[+] {name}的{task_mark}下的ID{url} 开始视频更改分辨率")
|
|
|
video_path = FFmpeg.video_640(video_path, file_path)
|
|
|
if not os.path.exists(video_path) or os.path.getsize(video_path) == 0:
|
|
|
+ logger.error(f"[+] {name}的{task_mark}下的ID{url} 视频更改分辨率失败")
|
|
|
AliyunLogger.logging(channel_id, name, url, v_id, "视频更改分辨率失败", "3002")
|
|
|
continue
|
|
|
if crop_total and crop_total != 'None': # 判断是否需要裁剪
|
|
@@ -210,10 +214,16 @@ class VideoProcessor:
|
|
|
if gg_duration_total and gg_duration_total != 'None': # 判断是否需要指定视频时长
|
|
|
video_path = FFmpeg.video_ggduration(video_path, file_path, pw_random_id,gg_duration_total)
|
|
|
if video_ending == "AI片尾引导":
|
|
|
+ logger.info(f"[+] {name}的{task_mark}下的ID{url} 获取ai片尾")
|
|
|
pw_srt_text = GPT4oMini.get_ai_mini_pw(old_title)
|
|
|
+ logger.info(f"[+] {name}的{task_mark}下的ID{url} 获取ai片尾音频")
|
|
|
pw_url = TTS.get_pw_zm(pw_srt_text, voice)
|
|
|
pw_mp3_path = TTS.download_mp3(pw_url, file_path, pw_random_id)
|
|
|
+ logger.info(f"[+] {name}的{task_mark}下的ID{url} 获取ai片尾srt")
|
|
|
pw_srt = TTS.getSrt(pw_url)
|
|
|
+ if not pw_srt:
|
|
|
+ logger.error(f"[+] {name}的{task_mark}下的ID{url} 获取ai片尾srt失败")
|
|
|
+ continue
|
|
|
else:
|
|
|
if ',' in video_ending:
|
|
|
video_ending_list = video_ending.split(',')
|
|
@@ -226,14 +236,22 @@ class VideoProcessor:
|
|
|
pw_url = PQ.get_pw_url(pw_id)
|
|
|
pw_mp3_path = FFmpeg.get_video_mp3(pw_url, file_path, pw_random_id)
|
|
|
if not pw_url:
|
|
|
+ logger.error(f"[+] {name}的{task_mark}下的ID{url} 获取片尾失败")
|
|
|
+
|
|
|
AliyunLogger.logging(channel_id, name, url, v_id, "获取片尾失败", "3002")
|
|
|
continue
|
|
|
+ logger.info(f"[+] {name}的{task_mark}下的ID{url} 开始生成视频最后一帧jpg")
|
|
|
jpg_path = FFmpeg.video_png(video_path, file_path, pw_random_id) # 生成视频最后一帧jpg
|
|
|
if not os.path.exists(jpg_path) or os.path.getsize(jpg_path) == 0:
|
|
|
+ logger.error(f"[+] {name}的{task_mark}下的ID{url} 片尾获取最后一帧失败")
|
|
|
+
|
|
|
AliyunLogger.logging(channel_id, name, url, v_id, "片尾获取最后一帧失败", "3002")
|
|
|
continue
|
|
|
+ logger.info(f"[+] {name}的{task_mark}下的ID{url} 开始生成片尾视频")
|
|
|
pw_path = FFmpeg.pw_video(jpg_path, file_path, pw_srt, pw_random_id, pw_mp3_path) # 生成片尾视频
|
|
|
if not os.path.exists(pw_path) or os.path.getsize(pw_path) == 0:
|
|
|
+ logger.error(f"[+] {name}的{task_mark}下的ID{url} 生成片尾失败")
|
|
|
+
|
|
|
AliyunLogger.logging(channel_id, name, url, v_id, "生成片尾失败", "3002")
|
|
|
text = (
|
|
|
f"**通知类型**: 生成片尾失败\n"
|
|
@@ -246,9 +264,13 @@ class VideoProcessor:
|
|
|
"https://open.feishu.cn/open-apis/bot/v2/hook/e7697dc6-5254-4411-8b59-3cd0742bf703",
|
|
|
"【 机器改造通知 】")
|
|
|
continue
|
|
|
+ logger.info(f"[+] {name}的{task_mark}下的ID{url} 开始视频拼接到一起")
|
|
|
video_path = FFmpeg.h_b_video(video_path, pw_path, file_path)
|
|
|
+ logger.info(f"[+] {name}的{task_mark}下的ID{url} 开始视频拼接")
|
|
|
video_path = FFmpeg.single_video(video_path, file_path, zm)
|
|
|
if not os.path.exists(video_path) or os.path.getsize(video_path) == 0:
|
|
|
+ logger.error(f"[+] {name}的{task_mark}下的ID{url} 拼接失败")
|
|
|
+
|
|
|
AliyunLogger.logging(channel_id, name, url, v_id, "拼接失败", "3002")
|
|
|
text = (
|
|
|
f"**通知类型**: 视频改造失败\n"
|
|
@@ -266,7 +288,8 @@ class VideoProcessor:
|
|
|
# 上传视频和封面,并更新数据库
|
|
|
code = cls.upload_video_and_thumbnail(video_path, cover, v_id, new_title, task_mark, name, piaoquan_id,
|
|
|
file_path, mark, channel_id, url, old_title, rule, video)
|
|
|
- print("改造成功")
|
|
|
+ logger.info(f"[+][+][+][+][+][+] {name}的{task_mark}下的ID{url} , 时间:{formatted_time}改造成功")
|
|
|
+
|
|
|
# 更新已使用的视频号状态
|
|
|
pq_url = f'https://admin.piaoquantv.com/cms/post-detail/{code}/detail' # 站内视频链接
|
|
|
if name == "单点视频":
|
|
@@ -311,7 +334,8 @@ class VideoProcessor:
|
|
|
tag = f"{tag_first},{tag_keyword},{tag_channel}"
|
|
|
tag_status = Tag.video_tag(code, tag)
|
|
|
if tag_status == 0:
|
|
|
- Common.logger(mark).info(f"{name}的{task_mark}下的ID{url}下的票圈视频{code},写入标签成功")
|
|
|
+ logger.info(f"[+] {name}的{task_mark}下的ID{url}下的票圈视频{code},写入标签成功")
|
|
|
+
|
|
|
secondary_category = task["secondary_category"]
|
|
|
log_data = f"user:{url},,video_id:{v_id},,video_url:{video_url},,ai_title:{new_title},,voice:{voice},,first_category:{first_category},,secondary_category:{secondary_category},,keyword_principal:{keyword_principal},,tag:{tag}"
|
|
|
values = [
|
|
@@ -450,7 +474,7 @@ class VideoProcessor:
|
|
|
continue
|
|
|
except Exception as e:
|
|
|
AliyunLogger.logging(channel_id, name, url, v_id, f"改造失败{traceback.format_exc()}", "3001")
|
|
|
- Common.logger(mark).error(f"{name}的{task_mark}任务处理失败:{traceback.format_exc()}")
|
|
|
+ logger.error(f"[+] {name}的{task_mark}任务处理失败:{traceback.format_exc()}")
|
|
|
return
|
|
|
|
|
|
|
|
@@ -549,10 +573,13 @@ class VideoProcessor:
|
|
|
上传视频和封面到OSS,并更新数据库
|
|
|
"""
|
|
|
try:
|
|
|
+
|
|
|
oss_id = cls.random_id()
|
|
|
- Common.logger(mark).info(f"{name}的{task_mark},开始发送oss")
|
|
|
+ logger.info(f"[+] {name}的{task_mark}下的ID{url} 开始发送oss")
|
|
|
+
|
|
|
oss_object_key = Oss.stitching_sync_upload_oss(new_video_path, oss_id) # 视频发送OSS
|
|
|
- Common.logger(mark).info(f"{name}的{task_mark},发送oss成功{oss_object_key}")
|
|
|
+ logger.info(f"[+] {name}的{task_mark}下的ID{url} 发送oss成功{oss_object_key}")
|
|
|
+
|
|
|
status = oss_object_key.get("status")
|
|
|
if status == 200:
|
|
|
oss_object_key = oss_object_key.get("oss_object_key")
|
|
@@ -571,7 +598,7 @@ class VideoProcessor:
|
|
|
else:
|
|
|
jpg = None
|
|
|
code = PQ.insert_piaoquantv(oss_object_key, new_title, jpg, piaoquan_id)
|
|
|
- Common.logger(mark).info(f"{name}的{task_mark}下的视频ID{v_id}发送成功")
|
|
|
+ logger.info(f"[+] {name}的{task_mark}下的视频ID{v_id}写入票圈后台成功")
|
|
|
sqlCollect.insert_task(task_mark, v_id, mark, channel_id) # 插入数据库
|
|
|
current_time = datetime.now()
|
|
|
formatted_time = current_time.strftime("%Y-%m-%d %H:%M:%S")
|
|
@@ -582,7 +609,7 @@ class VideoProcessor:
|
|
|
|
|
|
return code
|
|
|
except Exception as e:
|
|
|
- Common.logger(mark).error(f"{name}的{task_mark}上传视频和封面到OSS,并更新数据库失败:{e}\n")
|
|
|
+ logger.error(f"[+] {name}的{task_mark}上传视频和封面到OSS,并更新数据库失败:{traceback.format_exc()}")
|
|
|
AliyunLogger.logging(channel_id, name, url, video["video_id"], "改造失败-上传视频和封面到OSS", "3001")
|
|
|
return
|
|
|
|
|
@@ -640,6 +667,7 @@ class VideoProcessor:
|
|
|
VideoProcessor.process_task(task, mark, name, feishu_id, cookie_sheet)
|
|
|
return mark
|
|
|
except Exception as e:
|
|
|
+ logger.error(f"[+] {name}用户抓取异常:{traceback.format_exc()}")
|
|
|
AliyunLogger.logging((task["channel_id"]), name, task["channel_url"],'', f"用户抓取异常:{e}", "3001")
|
|
|
return mark
|
|
|
|