|
@@ -5,6 +5,7 @@ import random
|
|
import re
|
|
import re
|
|
import shutil
|
|
import shutil
|
|
import time
|
|
import time
|
|
|
|
+import traceback
|
|
from datetime import datetime
|
|
from datetime import datetime
|
|
|
|
|
|
from common.gpt4o_mini_help import GPT4oMini
|
|
from common.gpt4o_mini_help import GPT4oMini
|
|
@@ -89,19 +90,21 @@ class VideoProcessor:
|
|
"""
|
|
"""
|
|
处理单个任务
|
|
处理单个任务
|
|
"""
|
|
"""
|
|
|
|
+ task_mark = task["task_mark"]
|
|
|
|
+ channel_id = str(task["channel_id"])
|
|
|
|
+ url = str(task["channel_url"])
|
|
|
|
+ piaoquan_id = str(task["piaoquan_id"])
|
|
|
|
+ number = task["number"]
|
|
|
|
+ title = task["title"]
|
|
|
|
+ video_share = task["video_share"]
|
|
|
|
+ video_ending = task["video_ending"]
|
|
|
|
+ crop_total = task["crop_total"]
|
|
|
|
+ gg_duration_total = task["gg_duration_total"]
|
|
|
|
+ voice = task['voice']
|
|
|
|
+ tags = task['tags']
|
|
|
|
+ v_id = None
|
|
try:
|
|
try:
|
|
- task_mark = task["task_mark"]
|
|
|
|
- channel_id = str(task["channel_id"])
|
|
|
|
- url = str(task["channel_url"])
|
|
|
|
- piaoquan_id = str(task["piaoquan_id"])
|
|
|
|
- number = task["number"]
|
|
|
|
- title = task["title"]
|
|
|
|
- video_share = task["video_share"]
|
|
|
|
- video_ending = task["video_ending"]
|
|
|
|
- crop_total = task["crop_total"]
|
|
|
|
- gg_duration_total = task["gg_duration_total"]
|
|
|
|
- voice = task['voice']
|
|
|
|
- tags = task['tags']
|
|
|
|
|
|
+
|
|
if voice:
|
|
if voice:
|
|
if ',' in voice:
|
|
if ',' in voice:
|
|
voices = voice.split(',')
|
|
voices = voice.split(',')
|
|
@@ -112,9 +115,6 @@ class VideoProcessor:
|
|
voice = "zhifeng_emo"
|
|
voice = "zhifeng_emo"
|
|
zm = Material.get_pzsrt_data("summary", "500Oe0", video_share)
|
|
zm = Material.get_pzsrt_data("summary", "500Oe0", video_share)
|
|
Common.logger(mark).info(f"{name}的{task_mark}下{channel_id}的用户:{url}开始获取视频")
|
|
Common.logger(mark).info(f"{name}的{task_mark}下{channel_id}的用户:{url}开始获取视频")
|
|
- new_count = None
|
|
|
|
- # if name in ['快手品类账号', '抖音品类账号', '抖音品类账号-1', '视频号品类账号']:
|
|
|
|
- # new_count = OdpsDataCount.main(channel_id, name, url)
|
|
|
|
data_list = cls.get_data_list(
|
|
data_list = cls.get_data_list(
|
|
channel_id, task_mark, url,
|
|
channel_id, task_mark, url,
|
|
number,
|
|
number,
|
|
@@ -132,66 +132,109 @@ class VideoProcessor:
|
|
Feishu.finish_bot(text, "https://open.feishu.cn/open-apis/bot/v2/hook/e7697dc6-5254-4411-8b59-3cd0742bf703",
|
|
Feishu.finish_bot(text, "https://open.feishu.cn/open-apis/bot/v2/hook/e7697dc6-5254-4411-8b59-3cd0742bf703",
|
|
"【 机器改造通知 】")
|
|
"【 机器改造通知 】")
|
|
return
|
|
return
|
|
- if new_count:
|
|
|
|
- sqlCollect.insert_spider_supply_targetcnt(channel_id, name, url, number, new_count, str(len(data_list)))
|
|
|
|
- current_time = datetime.now()
|
|
|
|
- formatted_time = current_time.strftime("%Y-%m-%d %H:%M:%S")
|
|
|
|
- values = [
|
|
|
|
- [
|
|
|
|
- name,
|
|
|
|
- channel_id,
|
|
|
|
- url,
|
|
|
|
- str(number),
|
|
|
|
- str(new_count),
|
|
|
|
- str(len(data_list)),
|
|
|
|
- formatted_time
|
|
|
|
- ]
|
|
|
|
- ]
|
|
|
|
- Feishu.insert_columns("Z5xLsdyyxh3abntTTvUc9zw8nYd", "099da8", "ROWS", 1, 2)
|
|
|
|
- time.sleep(0.5)
|
|
|
|
- Feishu.update_values("Z5xLsdyyxh3abntTTvUc9zw8nYd", "099da8", "A2:Z2", values)
|
|
|
|
Common.logger(mark).info(f"{name}的{task_mark}下的ID{url} 获取视频完成,共{len(data_list)}条")
|
|
Common.logger(mark).info(f"{name}的{task_mark}下的ID{url} 获取视频完成,共{len(data_list)}条")
|
|
- try:
|
|
|
|
- for video in data_list:
|
|
|
|
- # limit_number = task["limit_number"]
|
|
|
|
- # if limit_number:
|
|
|
|
- # task_mark = task["task_mark"]
|
|
|
|
- # makr_count = sqlCollect.get_mark_count(task_mark)
|
|
|
|
- # if int(limit_number) <= int(makr_count[0][0]):
|
|
|
|
- # AliyunLogger.logging((task["channel_id"]), name, task["channel_url"], '',
|
|
|
|
- # f"{task_mark}标识任务每日指定条数已足够,指定条数{limit_number},实际生成条数{int(makr_count[0][0])}",
|
|
|
|
- # "1111")
|
|
|
|
- # return
|
|
|
|
- cls.remove_files(mark)
|
|
|
|
- video_path_url = cls.create_folders(mark)
|
|
|
|
- new_title = cls.generate_title(video, title)
|
|
|
|
- v_id = video["video_id"]
|
|
|
|
- cover = video["cover"]
|
|
|
|
- video_url = video["video_url"]
|
|
|
|
- old_title = video['old_title']
|
|
|
|
- rule = video['rule']
|
|
|
|
- if not old_title:
|
|
|
|
- old_title = '这个视频,分享给我的老友,祝愿您能幸福安康'
|
|
|
|
|
|
+ for video in data_list:
|
|
|
|
+ cls.remove_files(mark)
|
|
|
|
+ file_path = cls.create_folders(mark)
|
|
|
|
+ new_title = cls.generate_title(video, title)
|
|
|
|
+ v_id = video["video_id"]
|
|
|
|
+ cover = video["cover"]
|
|
|
|
+ video_url = video["video_url"]
|
|
|
|
+ old_title = video['old_title']
|
|
|
|
+ rule = video['rule']
|
|
|
|
+ if not old_title:
|
|
|
|
+ old_title = '这个视频,分享给我的老友,祝愿您能幸福安康'
|
|
|
|
+ text = (
|
|
|
|
+ f"**通知类型**: 标题为空,使用兜底标题生成片尾\n"
|
|
|
|
+ f"**负责人**: {name}\n"
|
|
|
|
+ f"**渠道**: {channel_id}\n"
|
|
|
|
+ f"**视频主页ID**: {url}\n"
|
|
|
|
+ f"**视频Video_id**: {v_id}\n"
|
|
|
|
+ )
|
|
|
|
+ Feishu.finish_bot(text,
|
|
|
|
+ "https://open.feishu.cn/open-apis/bot/v2/hook/e7697dc6-5254-4411-8b59-3cd0742bf703",
|
|
|
|
+ "【 机器改造通知 】")
|
|
|
|
+ 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} 开始下载视频")
|
|
|
|
+ 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 == "单点视频":
|
|
|
|
+ sqlCollect.update_shp_dd_vid_4(v_id)
|
|
|
|
+ from_user_name = video['from_user_name'] # 来源用户
|
|
|
|
+ from_group_name = video['from_group_name'] # 来源群组
|
|
|
|
+ source = video['source'] # 渠道
|
|
text = (
|
|
text = (
|
|
- f"**通知类型**: 标题为空,使用兜底标题生成片尾\n"
|
|
|
|
- f"**负责人**: {name}\n"
|
|
|
|
- f"**渠道**: {channel_id}\n"
|
|
|
|
- f"**视频主页ID**: {url}\n"
|
|
|
|
- f"**视频Video_id**: {v_id}\n"
|
|
|
|
|
|
+ f"**渠道**: {source}\n"
|
|
|
|
+ f"**来源用户**: {from_user_name}\n"
|
|
|
|
+ f"**来源群组**: {from_group_name}\n"
|
|
|
|
+ f"**原视频链接**: {video['video_url']}\n"
|
|
|
|
+ f"**原视频封面**: {video['cover']}\n"
|
|
|
|
+ f"**原视频标题**: {video['old_title']}\n"
|
|
)
|
|
)
|
|
Feishu.finish_bot(text,
|
|
Feishu.finish_bot(text,
|
|
- "https://open.feishu.cn/open-apis/bot/v2/hook/e7697dc6-5254-4411-8b59-3cd0742bf703",
|
|
|
|
- "【 机器改造通知 】")
|
|
|
|
- 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} 开始下载视频")
|
|
|
|
- new_video_path = cls.download_and_process_video(channel_id, video_url, video_path_url, v_id,
|
|
|
|
- crop_total, gg_duration_total, pw_random_id, new_title, mark, video)
|
|
|
|
- if not os.path.isfile(new_video_path) or os.path.getsize(new_video_path) == 0:
|
|
|
|
- AliyunLogger.logging(channel_id, name, url, v_id, "视频下载失败", "3002", f"video_url:{video_url}")
|
|
|
|
|
|
+ "https://open.feishu.cn/open-apis/bot/v2/hook/493b3d4c-5fae-4a9d-980b-1dd86636524e",
|
|
|
|
+ "【 视频下载失败,跳过该视频 】")
|
|
|
|
+ text = (
|
|
|
|
+ f"**通知类型**: 视频下载失败\n"
|
|
|
|
+ f"**负责人**: {name}\n"
|
|
|
|
+ f"**渠道**: {channel_id}\n"
|
|
|
|
+ f"**视频主页ID**: {url}\n"
|
|
|
|
+ f"**视频Video_id**: {v_id}\n"
|
|
|
|
+ )
|
|
|
|
+ if name == "快手推荐流" or name == "视频号推荐流":
|
|
|
|
+ sqlCollect.update_feed_vid_2(v_id)
|
|
|
|
+ Feishu.finish_bot(text,
|
|
|
|
+ "https://open.feishu.cn/open-apis/bot/v2/hook/493b3d4c-5fae-4a9d-980b-1dd86636524e",
|
|
|
|
+ "【 视频下载失败,跳过该视频 】")
|
|
|
|
+ AliyunLogger.logging(channel_id, name, url, v_id, "视频下载失败", "3002", f"video_url:{video_url}")
|
|
|
|
+
|
|
|
|
+ Feishu.finish_bot(text,
|
|
|
|
+ "https://open.feishu.cn/open-apis/bot/v2/hook/e7697dc6-5254-4411-8b59-3cd0742bf703",
|
|
|
|
+ "【 机器改造通知 】")
|
|
|
|
+ continue
|
|
|
|
+
|
|
|
|
+ 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)
|
|
|
|
+ video_path = FFmpeg.video_640(video_path, file_path)
|
|
|
|
+ if not os.path.exists(video_path) or os.path.getsize(video_path) == 0:
|
|
|
|
+ AliyunLogger.logging(channel_id, name, url, v_id, "视频更改分辨率失败", "3002")
|
|
|
|
+ continue
|
|
|
|
+ if crop_total and crop_total != 'None': # 判断是否需要裁剪
|
|
|
|
+ video_path = FFmpeg.video_crop(video_path, file_path, pw_random_id)
|
|
|
|
+ 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 and video_ending != 'None':
|
|
|
|
+ if video_ending == "AI片尾引导":
|
|
|
|
+ pw_srt_text = GPT4oMini.get_ai_mini_pw(old_title)
|
|
|
|
+ pw_url = TTS.get_pw_zm(pw_srt_text, voice)
|
|
|
|
+ pw_mp3_path = TTS.download_mp3(pw_url, file_path, pw_random_id)
|
|
|
|
+ pw_srt = TTS.getSrt(pw_url)
|
|
|
|
+ else:
|
|
|
|
+ if ',' in video_ending:
|
|
|
|
+ video_ending_list = video_ending.split(',')
|
|
|
|
+ else:
|
|
|
|
+ video_ending_list = [video_ending]
|
|
|
|
+ ending = random.choice(video_ending_list)
|
|
|
|
+ pw_list = Material.get_pwsrt_data("summary", "DgX7vC", ending) # 获取srt
|
|
|
|
+ pw_id = pw_list["pw_id"]
|
|
|
|
+ pw_srt = pw_list["pw_srt"]
|
|
|
|
+ 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:
|
|
|
|
+ AliyunLogger.logging(channel_id, name, url, v_id, "获取片尾失败", "3002")
|
|
|
|
+ continue
|
|
|
|
+ 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:
|
|
|
|
+ AliyunLogger.logging(channel_id, name, url, v_id, "片尾获取最后一帧失败", "3002")
|
|
|
|
+ continue
|
|
|
|
+ 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:
|
|
|
|
+ AliyunLogger.logging(channel_id, name, url, v_id, "生成片尾失败", "3002")
|
|
text = (
|
|
text = (
|
|
- f"**通知类型**: 视频下载失败\n"
|
|
|
|
|
|
+ f"**通知类型**: 生成片尾失败\n"
|
|
f"**负责人**: {name}\n"
|
|
f"**负责人**: {name}\n"
|
|
f"**渠道**: {channel_id}\n"
|
|
f"**渠道**: {channel_id}\n"
|
|
f"**视频主页ID**: {url}\n"
|
|
f"**视频主页ID**: {url}\n"
|
|
@@ -201,37 +244,10 @@ class VideoProcessor:
|
|
"https://open.feishu.cn/open-apis/bot/v2/hook/e7697dc6-5254-4411-8b59-3cd0742bf703",
|
|
"https://open.feishu.cn/open-apis/bot/v2/hook/e7697dc6-5254-4411-8b59-3cd0742bf703",
|
|
"【 机器改造通知 】")
|
|
"【 机器改造通知 】")
|
|
continue
|
|
continue
|
|
- if video_ending and video_ending != 'None':
|
|
|
|
- new_video_path = cls.handle_video_ending(new_video_path, video_ending, old_title, pw_random_id, video_path_url, mark, task_mark, url, name, video_share, zm, voice)
|
|
|
|
- if new_video_path == None:
|
|
|
|
- if name == "单点视频":
|
|
|
|
- sqlCollect.update_shp_dd_vid_4(v_id)
|
|
|
|
- from_user_name = video['from_user_name'] # 来源用户
|
|
|
|
- from_group_name = video['from_group_name'] # 来源群组
|
|
|
|
- source = video['source'] # 渠道
|
|
|
|
- text = (
|
|
|
|
- f"**渠道**: {source}\n"
|
|
|
|
- f"**来源用户**: {from_user_name}\n"
|
|
|
|
- f"**来源群组**: {from_group_name}\n"
|
|
|
|
- f"**原视频链接**: {video['video_url']}\n"
|
|
|
|
- f"**原视频封面**: {video['cover']}\n"
|
|
|
|
- f"**原视频标题**: {video['old_title']}\n"
|
|
|
|
- )
|
|
|
|
- AliyunLogger.logging(channel_id, name, url, v_id, "视频下载失败", "3002")
|
|
|
|
- Feishu.finish_bot(text,
|
|
|
|
- "https://open.feishu.cn/open-apis/bot/v2/hook/493b3d4c-5fae-4a9d-980b-1dd86636524e",
|
|
|
|
- "【 视频下载失败,跳过该视频 】")
|
|
|
|
- if name == "快手推荐流" or name == "视频号推荐流":
|
|
|
|
- sqlCollect.update_feed_vid_2(v_id)
|
|
|
|
- Feishu.finish_bot(text,
|
|
|
|
- "https://open.feishu.cn/open-apis/bot/v2/hook/493b3d4c-5fae-4a9d-980b-1dd86636524e",
|
|
|
|
- "【 视频下载失败,跳过该视频 】")
|
|
|
|
- continue
|
|
|
|
- else:
|
|
|
|
- if video_share and video_share != 'None':
|
|
|
|
- new_video_path = FFmpeg.single_video(new_video_path, video_path_url, zm)
|
|
|
|
- if not os.path.isfile(new_video_path) or os.path.getsize(new_video_path) == 0:
|
|
|
|
- AliyunLogger.logging(channel_id, name, url, v_id, "视频改造失败", "3001")
|
|
|
|
|
|
+ video_path = FFmpeg.h_b_video(video_path, pw_path, file_path)
|
|
|
|
+ video_path = FFmpeg.single_video(video_path, file_path, zm)
|
|
|
|
+ if not os.path.exists(video_path) or os.path.getsize(video_path) == 0:
|
|
|
|
+ AliyunLogger.logging(channel_id, name, url, v_id, "拼接失败", "3002")
|
|
text = (
|
|
text = (
|
|
f"**通知类型**: 视频改造失败\n"
|
|
f"**通知类型**: 视频改造失败\n"
|
|
f"**负责人**: {name}\n"
|
|
f"**负责人**: {name}\n"
|
|
@@ -243,195 +259,195 @@ class VideoProcessor:
|
|
"https://open.feishu.cn/open-apis/bot/v2/hook/e7697dc6-5254-4411-8b59-3cd0742bf703",
|
|
"https://open.feishu.cn/open-apis/bot/v2/hook/e7697dc6-5254-4411-8b59-3cd0742bf703",
|
|
"【 机器改造通知 】")
|
|
"【 机器改造通知 】")
|
|
continue
|
|
continue
|
|
- # 上传视频和封面,并更新数据库
|
|
|
|
- code = cls.upload_video_and_thumbnail(new_video_path, cover, v_id, new_title, task_mark, name, piaoquan_id,
|
|
|
|
- video_path_url, mark, channel_id, url, old_title, title, rule, video)
|
|
|
|
- # 更新已使用的视频号状态
|
|
|
|
- pq_url = f'https://admin.piaoquantv.com/cms/post-detail/{code}/detail' # 站内视频链接
|
|
|
|
- if name == "单点视频":
|
|
|
|
- sphdd_status = sqlCollect.update_shp_dd_vid(v_id)
|
|
|
|
- if sphdd_status == 1:
|
|
|
|
- Common.logger(mark).info(f"{name}的{task_mark}下的ID{url} 视频修改已使用,状态已修改")
|
|
|
|
- from_user_name = video['from_user_name'] # 来源用户
|
|
|
|
- from_group_name = video['from_group_name'] # 来源群组
|
|
|
|
- source = video['source'] # 渠道
|
|
|
|
- channel_id = source
|
|
|
|
- text = (
|
|
|
|
- f"**站内视频链接**: {pq_url}\n"
|
|
|
|
- f"**渠道**: {source}\n"
|
|
|
|
- f"**来源用户**: {from_user_name}\n"
|
|
|
|
- f"**来源群组**: {from_group_name}\n"
|
|
|
|
- f"**原视频链接**: {video['video_url']}\n"
|
|
|
|
- f"**原视频封面**: {video['cover']}\n"
|
|
|
|
- f"**原视频标题**: {video['old_title']}\n"
|
|
|
|
- )
|
|
|
|
- Feishu.finish_bot(text, "https://open.feishu.cn/open-apis/bot/v2/hook/d2f751a8-5b0a-49ca-a306-1fda142707a9", "【 有一条新的内容改造成功 】")
|
|
|
|
- if name == "快手推荐流" or name == "视频号推荐流":
|
|
|
|
- feed_status = sqlCollect.update_feed_vid(v_id)
|
|
|
|
- if feed_status == 1:
|
|
|
|
- Common.logger(mark).info(f"{name}的{task_mark}下的ID{url} 视频修改已使用,状态已修改")
|
|
|
|
- if channel_id == "快手历史" or channel_id == "抖音历史" or channel_id == "视频号历史":
|
|
|
|
- explain = "历史爆款"
|
|
|
|
- else:
|
|
|
|
- explain = "新供给"
|
|
|
|
- current_time = datetime.now()
|
|
|
|
- formatted_time = current_time.strftime("%Y-%m-%d %H:%M:%S")
|
|
|
|
- if name == "品类关键词搜索":
|
|
|
|
- first_category = task["first_category"]
|
|
|
|
- keyword_principal = task["keyword_name"]
|
|
|
|
- tag_first = f"一级品类_{first_category}"
|
|
|
|
- tag_keyword = f"关键词_{url}"
|
|
|
|
- if channel_id == "抖音搜索":
|
|
|
|
- tag_channel = "来源_抖音关键词"
|
|
|
|
- elif channel_id == "快手搜索":
|
|
|
|
- tag_channel = "来源_快手关键词"
|
|
|
|
- elif channel_id == "视频号搜索":
|
|
|
|
- tag_channel = "来源_视频号关键词"
|
|
|
|
- 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},写入标签成功")
|
|
|
|
- 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 = [
|
|
|
|
- [
|
|
|
|
- name,
|
|
|
|
- task_mark,
|
|
|
|
- channel_id,
|
|
|
|
- url,
|
|
|
|
- str(v_id),
|
|
|
|
- piaoquan_id,
|
|
|
|
- old_title,
|
|
|
|
- title if title in ["原标题", "AI标题"] else "",
|
|
|
|
- new_title,
|
|
|
|
- str(code),
|
|
|
|
- formatted_time,
|
|
|
|
- str(rule),
|
|
|
|
- explain,
|
|
|
|
- voice,
|
|
|
|
- first_category,
|
|
|
|
- secondary_category,
|
|
|
|
- keyword_principal,
|
|
|
|
- pq_url
|
|
|
|
- ]
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ # 上传视频和封面,并更新数据库
|
|
|
|
+ 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, title, rule, video)
|
|
|
|
+ # 更新已使用的视频号状态
|
|
|
|
+ pq_url = f'https://admin.piaoquantv.com/cms/post-detail/{code}/detail' # 站内视频链接
|
|
|
|
+ if name == "单点视频":
|
|
|
|
+ sphdd_status = sqlCollect.update_shp_dd_vid(v_id)
|
|
|
|
+ if sphdd_status == 1:
|
|
|
|
+ Common.logger(mark).info(f"{name}的{task_mark}下的ID{url} 视频修改已使用,状态已修改")
|
|
|
|
+ from_user_name = video['from_user_name'] # 来源用户
|
|
|
|
+ from_group_name = video['from_group_name'] # 来源群组
|
|
|
|
+ source = video['source'] # 渠道
|
|
|
|
+ channel_id = source
|
|
|
|
+ text = (
|
|
|
|
+ f"**站内视频链接**: {pq_url}\n"
|
|
|
|
+ f"**渠道**: {source}\n"
|
|
|
|
+ f"**来源用户**: {from_user_name}\n"
|
|
|
|
+ f"**来源群组**: {from_group_name}\n"
|
|
|
|
+ f"**原视频链接**: {video['video_url']}\n"
|
|
|
|
+ f"**原视频封面**: {video['cover']}\n"
|
|
|
|
+ f"**原视频标题**: {video['old_title']}\n"
|
|
|
|
+ )
|
|
|
|
+ Feishu.finish_bot(text, "https://open.feishu.cn/open-apis/bot/v2/hook/d2f751a8-5b0a-49ca-a306-1fda142707a9", "【 有一条新的内容改造成功 】")
|
|
|
|
+ if name == "快手推荐流" or name == "视频号推荐流":
|
|
|
|
+ feed_status = sqlCollect.update_feed_vid(v_id)
|
|
|
|
+ if feed_status == 1:
|
|
|
|
+ Common.logger(mark).info(f"{name}的{task_mark}下的ID{url} 视频修改已使用,状态已修改")
|
|
|
|
+ if channel_id == "快手历史" or channel_id == "抖音历史" or channel_id == "视频号历史":
|
|
|
|
+ explain = "历史爆款"
|
|
|
|
+ else:
|
|
|
|
+ explain = "新供给"
|
|
|
|
+ current_time = datetime.now()
|
|
|
|
+ formatted_time = current_time.strftime("%Y-%m-%d %H:%M:%S")
|
|
|
|
+ if name == "品类关键词搜索":
|
|
|
|
+ first_category = task["first_category"]
|
|
|
|
+ keyword_principal = task["keyword_name"]
|
|
|
|
+ tag_first = f"一级品类_{first_category}"
|
|
|
|
+ tag_keyword = f"关键词_{url}"
|
|
|
|
+ if channel_id == "抖音搜索":
|
|
|
|
+ tag_channel = "来源_抖音关键词"
|
|
|
|
+ elif channel_id == "快手搜索":
|
|
|
|
+ tag_channel = "来源_快手关键词"
|
|
|
|
+ elif channel_id == "视频号搜索":
|
|
|
|
+ tag_channel = "来源_视频号关键词"
|
|
|
|
+ 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},写入标签成功")
|
|
|
|
+ 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 = [
|
|
|
|
+ [
|
|
|
|
+ name,
|
|
|
|
+ task_mark,
|
|
|
|
+ channel_id,
|
|
|
|
+ url,
|
|
|
|
+ str(v_id),
|
|
|
|
+ piaoquan_id,
|
|
|
|
+ old_title,
|
|
|
|
+ title if title in ["原标题", "AI标题"] else "",
|
|
|
|
+ new_title,
|
|
|
|
+ str(code),
|
|
|
|
+ formatted_time,
|
|
|
|
+ str(rule),
|
|
|
|
+ explain,
|
|
|
|
+ voice,
|
|
|
|
+ first_category,
|
|
|
|
+ secondary_category,
|
|
|
|
+ keyword_principal,
|
|
|
|
+ pq_url
|
|
]
|
|
]
|
|
- elif name == "抖音品类账号-1" or name == "抖音品类账号" or name == "视频号品类账号" or name == "快手品类账号":
|
|
|
|
- first_category = task["first_category"]
|
|
|
|
- tag_first = f"一级品类_{first_category}"
|
|
|
|
- if channel_id == "抖音" or channel_id == "抖音历史":
|
|
|
|
- tag_channel = "来源_抖音品类账号"
|
|
|
|
- elif channel_id == "快手" or channel_id == "快手历史":
|
|
|
|
- tag_channel = "来源_快手品类账号"
|
|
|
|
- elif channel_id == "视频号" or channel_id == "视频号历史":
|
|
|
|
- tag_channel = "来源_视频号品类账号"
|
|
|
|
- tag = f"{tag_first},{tag_channel}"
|
|
|
|
- tag_status = Tag.video_tag( code, tag )
|
|
|
|
- if tag_status == 0:
|
|
|
|
- Common.logger(mark).info(f"{name}的{task_mark}下的ID{url}下的票圈视频{code},写入标签成功")
|
|
|
|
- log_data = f"user:{url},,video_id:{v_id},,video_url:{video_url},,ai_title:{new_title},,voice:{voice},,tag:{tag}"
|
|
|
|
- # log_data = f"user:{url},,video_id:{v_id},,video_url:{video_url},,ai_title:{new_title},,voice:{voice},,first_category:{first_category},,tag:{tag}"
|
|
|
|
- values = [
|
|
|
|
- [
|
|
|
|
- name,
|
|
|
|
- task_mark,
|
|
|
|
- channel_id,
|
|
|
|
- url,
|
|
|
|
- str( v_id ),
|
|
|
|
- piaoquan_id,
|
|
|
|
- old_title,
|
|
|
|
- title if title in ["原标题", "AI标题"] else "",
|
|
|
|
- new_title,
|
|
|
|
- str( code ),
|
|
|
|
- formatted_time,
|
|
|
|
- str( rule ),
|
|
|
|
- explain,
|
|
|
|
- voice,
|
|
|
|
- first_category,
|
|
|
|
- pq_url
|
|
|
|
- ]
|
|
|
|
|
|
+ ]
|
|
|
|
+ elif name == "抖音品类账号-1" or name == "抖音品类账号" or name == "视频号品类账号" or name == "快手品类账号":
|
|
|
|
+ first_category = task["first_category"]
|
|
|
|
+ tag_first = f"一级品类_{first_category}"
|
|
|
|
+ if channel_id == "抖音" or channel_id == "抖音历史":
|
|
|
|
+ tag_channel = "来源_抖音品类账号"
|
|
|
|
+ elif channel_id == "快手" or channel_id == "快手历史":
|
|
|
|
+ tag_channel = "来源_快手品类账号"
|
|
|
|
+ elif channel_id == "视频号" or channel_id == "视频号历史":
|
|
|
|
+ tag_channel = "来源_视频号品类账号"
|
|
|
|
+ tag = f"{tag_first},{tag_channel}"
|
|
|
|
+ tag_status = Tag.video_tag( code, tag )
|
|
|
|
+ if tag_status == 0:
|
|
|
|
+ Common.logger(mark).info(f"{name}的{task_mark}下的ID{url}下的票圈视频{code},写入标签成功")
|
|
|
|
+ log_data = f"user:{url},,video_id:{v_id},,video_url:{video_url},,ai_title:{new_title},,voice:{voice},,tag:{tag}"
|
|
|
|
+ # log_data = f"user:{url},,video_id:{v_id},,video_url:{video_url},,ai_title:{new_title},,voice:{voice},,first_category:{first_category},,tag:{tag}"
|
|
|
|
+ values = [
|
|
|
|
+ [
|
|
|
|
+ name,
|
|
|
|
+ task_mark,
|
|
|
|
+ channel_id,
|
|
|
|
+ url,
|
|
|
|
+ str( v_id ),
|
|
|
|
+ piaoquan_id,
|
|
|
|
+ old_title,
|
|
|
|
+ title if title in ["原标题", "AI标题"] else "",
|
|
|
|
+ new_title,
|
|
|
|
+ str( code ),
|
|
|
|
+ formatted_time,
|
|
|
|
+ str( rule ),
|
|
|
|
+ explain,
|
|
|
|
+ voice,
|
|
|
|
+ first_category,
|
|
|
|
+ pq_url
|
|
]
|
|
]
|
|
|
|
+ ]
|
|
|
|
|
|
- else:
|
|
|
|
- log_data = f"user:{url},,video_id:{v_id},,video_url:{video_url},,ai_title:{new_title},,voice:{voice}"
|
|
|
|
- values = [
|
|
|
|
- [
|
|
|
|
- name,
|
|
|
|
- task_mark,
|
|
|
|
- channel_id,
|
|
|
|
- url,
|
|
|
|
- str(v_id),
|
|
|
|
- piaoquan_id,
|
|
|
|
- old_title,
|
|
|
|
- title if title in ["原标题", "AI标题"] else "",
|
|
|
|
- new_title,
|
|
|
|
- str(code),
|
|
|
|
- formatted_time,
|
|
|
|
- str(rule),
|
|
|
|
- explain,
|
|
|
|
- voice
|
|
|
|
- ]
|
|
|
|
|
|
+ else:
|
|
|
|
+ log_data = f"user:{url},,video_id:{v_id},,video_url:{video_url},,ai_title:{new_title},,voice:{voice}"
|
|
|
|
+ values = [
|
|
|
|
+ [
|
|
|
|
+ name,
|
|
|
|
+ task_mark,
|
|
|
|
+ channel_id,
|
|
|
|
+ url,
|
|
|
|
+ str(v_id),
|
|
|
|
+ piaoquan_id,
|
|
|
|
+ old_title,
|
|
|
|
+ title if title in ["原标题", "AI标题"] else "",
|
|
|
|
+ new_title,
|
|
|
|
+ str(code),
|
|
|
|
+ formatted_time,
|
|
|
|
+ str(rule),
|
|
|
|
+ explain,
|
|
|
|
+ voice
|
|
]
|
|
]
|
|
- AliyunLogger.logging(channel_id, name, url, v_id, "视频改造成功", "1000", log_data, str(code))
|
|
|
|
- text = (
|
|
|
|
- f"**通知类型**: 视频改造成功\n"
|
|
|
|
- f"**站内视频链接**: {pq_url}\n"
|
|
|
|
- f"**负责人**: {name}\n"
|
|
|
|
- f"**渠道**: {channel_id}\n"
|
|
|
|
- f"**视频主页ID**: {url}\n"
|
|
|
|
- f"**视频Video_id**: {v_id}\n"
|
|
|
|
- f"**使用音频音色**: {voice}\n"
|
|
|
|
- )
|
|
|
|
- Feishu.finish_bot(text,
|
|
|
|
- "https://open.feishu.cn/open-apis/bot/v2/hook/e7697dc6-5254-4411-8b59-3cd0742bf703",
|
|
|
|
- "【 机器改造通知 】")
|
|
|
|
- if tags:
|
|
|
|
- Tag.video_tag(code, tags)
|
|
|
|
- if values:
|
|
|
|
- if name == "王雪珂":
|
|
|
|
- sheet = "vfhHwj"
|
|
|
|
- elif name == "鲁涛":
|
|
|
|
- sheet = "FhewlS"
|
|
|
|
- elif name == "范军":
|
|
|
|
- sheet = "B6dCfS"
|
|
|
|
- elif name == "余海涛":
|
|
|
|
- sheet = "mfBrNT"
|
|
|
|
- elif name == "罗情":
|
|
|
|
- sheet = "2J3PwN"
|
|
|
|
- elif name == "王玉婷":
|
|
|
|
- sheet = "bBHFwC"
|
|
|
|
- elif name == "刘诗雨":
|
|
|
|
- sheet = "fBdxIQ"
|
|
|
|
- elif name == "信欣":
|
|
|
|
- sheet = "lPe1eT"
|
|
|
|
- elif name == "快手创作者版品类推荐流":
|
|
|
|
- sheet = "k7l7nQ"
|
|
|
|
- elif name == "抖音品类账号":
|
|
|
|
- sheet = "ZixHmf"
|
|
|
|
- elif name == "抖音品类账号-1":
|
|
|
|
- sheet = "61kvW7"
|
|
|
|
- elif name == "视频号品类账号":
|
|
|
|
- sheet = "b0uLWw"
|
|
|
|
- elif name == "单点视频":
|
|
|
|
- sheet = "ptgCXW"
|
|
|
|
- elif name == "快手品类账号":
|
|
|
|
- sheet = "ibjoMx"
|
|
|
|
- elif name == "品类关键词搜索":
|
|
|
|
- sheet = "rBAJT8"
|
|
|
|
- elif name == "快手推荐流":
|
|
|
|
- sheet = "9Ii8lw"
|
|
|
|
- elif name == "视频号推荐流":
|
|
|
|
- sheet = "hMBv7T"
|
|
|
|
- elif name == "快手小程序":
|
|
|
|
- sheet = "GeDT6Q"
|
|
|
|
- Feishu.insert_columns("ILb4sa0LahddRktnRipcu2vQnLb", sheet, "ROWS", 1, 2)
|
|
|
|
- time.sleep(0.5)
|
|
|
|
- Feishu.update_values("ILb4sa0LahddRktnRipcu2vQnLb", sheet, "A2:Z2", values)
|
|
|
|
- except Exception as e:
|
|
|
|
- AliyunLogger.logging(channel_id, name, url, video["video_id"], f"改造失败{e}", "3001", log_data)
|
|
|
|
- Common.logger(mark).error(f"{name}的{task_mark}任务处理失败:{e}")
|
|
|
|
|
|
+ ]
|
|
|
|
+ AliyunLogger.logging(channel_id, name, url, v_id, "视频改造成功", "1000", log_data, str(code))
|
|
|
|
+ text = (
|
|
|
|
+ f"**通知类型**: 视频改造成功\n"
|
|
|
|
+ f"**站内视频链接**: {pq_url}\n"
|
|
|
|
+ f"**负责人**: {name}\n"
|
|
|
|
+ f"**渠道**: {channel_id}\n"
|
|
|
|
+ f"**视频主页ID**: {url}\n"
|
|
|
|
+ f"**视频Video_id**: {v_id}\n"
|
|
|
|
+ f"**使用音频音色**: {voice}\n"
|
|
|
|
+ )
|
|
|
|
+ Feishu.finish_bot(text,
|
|
|
|
+ "https://open.feishu.cn/open-apis/bot/v2/hook/e7697dc6-5254-4411-8b59-3cd0742bf703",
|
|
|
|
+ "【 机器改造通知 】")
|
|
|
|
+ if tags:
|
|
|
|
+ Tag.video_tag(code, tags)
|
|
|
|
+ if values:
|
|
|
|
+ if name == "王雪珂":
|
|
|
|
+ sheet = "vfhHwj"
|
|
|
|
+ elif name == "鲁涛":
|
|
|
|
+ sheet = "FhewlS"
|
|
|
|
+ elif name == "范军":
|
|
|
|
+ sheet = "B6dCfS"
|
|
|
|
+ elif name == "余海涛":
|
|
|
|
+ sheet = "mfBrNT"
|
|
|
|
+ elif name == "罗情":
|
|
|
|
+ sheet = "2J3PwN"
|
|
|
|
+ elif name == "王玉婷":
|
|
|
|
+ sheet = "bBHFwC"
|
|
|
|
+ elif name == "刘诗雨":
|
|
|
|
+ sheet = "fBdxIQ"
|
|
|
|
+ elif name == "信欣":
|
|
|
|
+ sheet = "lPe1eT"
|
|
|
|
+ elif name == "快手创作者版品类推荐流":
|
|
|
|
+ sheet = "k7l7nQ"
|
|
|
|
+ elif name == "抖音品类账号":
|
|
|
|
+ sheet = "ZixHmf"
|
|
|
|
+ elif name == "抖音品类账号-1":
|
|
|
|
+ sheet = "61kvW7"
|
|
|
|
+ elif name == "视频号品类账号":
|
|
|
|
+ sheet = "b0uLWw"
|
|
|
|
+ elif name == "单点视频":
|
|
|
|
+ sheet = "ptgCXW"
|
|
|
|
+ elif name == "快手品类账号":
|
|
|
|
+ sheet = "ibjoMx"
|
|
|
|
+ elif name == "品类关键词搜索":
|
|
|
|
+ sheet = "rBAJT8"
|
|
|
|
+ elif name == "快手推荐流":
|
|
|
|
+ sheet = "9Ii8lw"
|
|
|
|
+ elif name == "视频号推荐流":
|
|
|
|
+ sheet = "hMBv7T"
|
|
|
|
+ elif name == "快手小程序":
|
|
|
|
+ sheet = "GeDT6Q"
|
|
|
|
+ Feishu.insert_columns("ILb4sa0LahddRktnRipcu2vQnLb", sheet, "ROWS", 1, 2)
|
|
|
|
+ time.sleep(0.5)
|
|
|
|
+ Feishu.update_values("ILb4sa0LahddRktnRipcu2vQnLb", sheet, "A2:Z2", values)
|
|
|
|
+
|
|
except Exception as e:
|
|
except Exception as e:
|
|
- AliyunLogger.logging(channel_id, name, url, video["video_id"], f"改造失败{e}", "3001", log_data)
|
|
|
|
- Common.logger(mark).error(f"{name}的{task_mark}任务处理失败:{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()}")
|
|
|
|
|
|
|
|
|
|
@classmethod
|
|
@classmethod
|
|
@@ -500,8 +516,7 @@ class VideoProcessor:
|
|
return new_title
|
|
return new_title
|
|
|
|
|
|
@classmethod
|
|
@classmethod
|
|
- def download_and_process_video(cls, channel_id, video_url, video_path_url, v_id, crop_total, gg_duration_total,
|
|
|
|
- pw_random_id, new_title, mark, video):
|
|
|
|
|
|
+ def download_and_process_video(cls, channel_id, video_url, video_path_url, v_id, video):
|
|
"""
|
|
"""
|
|
下载并处理视频
|
|
下载并处理视频
|
|
"""
|
|
"""
|
|
@@ -509,116 +524,23 @@ class VideoProcessor:
|
|
new_video_path = PQ.dd_sph_download_video(video_url, video_path_url, v_id, video, channel_id)
|
|
new_video_path = PQ.dd_sph_download_video(video_url, video_path_url, v_id, video, channel_id)
|
|
elif channel_id == "视频号":
|
|
elif channel_id == "视频号":
|
|
new_video_path = PQ.sph_download_video(video_url, video_path_url, v_id, video)
|
|
new_video_path = PQ.sph_download_video(video_url, video_path_url, v_id, video)
|
|
- if new_video_path == None:
|
|
|
|
- return None
|
|
|
|
- Common.logger(mark).info(f"{channel_id}视频下载成功: {new_video_path}")
|
|
|
|
elif channel_id == "票圈" or channel_id == "快手创作者版" or channel_id == '视频号搜索' or channel_id == "快手推荐流":
|
|
elif channel_id == "票圈" or channel_id == "快手创作者版" or channel_id == '视频号搜索' or channel_id == "快手推荐流":
|
|
new_video_path = PQ.download_video(video_url, video_path_url, v_id)
|
|
new_video_path = PQ.download_video(video_url, video_path_url, v_id)
|
|
- if new_video_path == None:
|
|
|
|
- return None
|
|
|
|
- Common.logger(mark).info(f"{channel_id}视频下载成功: {new_video_path}")
|
|
|
|
elif channel_id == "抖音" or channel_id == "抖音历史" or channel_id == "抖音搜索":
|
|
elif channel_id == "抖音" or channel_id == "抖音历史" or channel_id == "抖音搜索":
|
|
new_video_path = PQ.download_dy_video(video_url, video_path_url, v_id)
|
|
new_video_path = PQ.download_dy_video(video_url, video_path_url, v_id)
|
|
- if new_video_path == None:
|
|
|
|
- return None
|
|
|
|
- Common.logger(mark).info(f"{channel_id}视频下载成功: {new_video_path}")
|
|
|
|
elif channel_id == "视频号历史":
|
|
elif channel_id == "视频号历史":
|
|
new_video_path = Oss.download_sph_ls(video_url, video_path_url, v_id)
|
|
new_video_path = Oss.download_sph_ls(video_url, video_path_url, v_id)
|
|
else:
|
|
else:
|
|
- Common.logger(mark).info(f"视频准备下载")
|
|
|
|
new_video_path = Oss.download_video_oss(video_url, video_path_url, v_id)
|
|
new_video_path = Oss.download_video_oss(video_url, video_path_url, v_id)
|
|
- if not os.path.isfile(new_video_path) or os.path.getsize(new_video_path) == 0:
|
|
|
|
- return None
|
|
|
|
- Common.logger(mark).info(f"视频下载成功: {new_video_path}")
|
|
|
|
- if crop_total and crop_total != 'None': # 判断是否需要裁剪
|
|
|
|
- new_video_path = FFmpeg.video_crop(new_video_path, video_path_url, pw_random_id)
|
|
|
|
- if gg_duration_total and gg_duration_total != 'None': # 判断是否需要指定视频时长
|
|
|
|
- new_video_path = FFmpeg.video_ggduration(new_video_path, video_path_url, pw_random_id,
|
|
|
|
- gg_duration_total)
|
|
|
|
- width, height = FFmpeg.get_w_h_size(new_video_path)
|
|
|
|
- if width < height: # 判断是否需要修改为竖屏
|
|
|
|
- new_video_path = FFmpeg.update_video_h_w(new_video_path, video_path_url, pw_random_id)
|
|
|
|
- new_title_re = re.sub(r'[^\w\s\u4e00-\u9fff,。!?]', '', new_title)
|
|
|
|
- if len(new_title_re) > 12:
|
|
|
|
- new_title_re = '\n'.join(
|
|
|
|
- [new_title_re[i:i + 12] for i in range(0, len(new_title_re), 12)])
|
|
|
|
- new_video_path = FFmpeg.add_video_zm(new_video_path, video_path_url, pw_random_id, new_title_re)
|
|
|
|
return new_video_path
|
|
return new_video_path
|
|
|
|
|
|
- @classmethod
|
|
|
|
- def handle_video_ending(cls, new_video_path, video_ending, old_title, pw_random_id, video_path_url, mark, task_mark, url, name, video_share, zm, voice):
|
|
|
|
- """
|
|
|
|
- 处理视频片尾
|
|
|
|
- """
|
|
|
|
- if video_ending == "AI片尾引导":
|
|
|
|
- pw_srt_text = GPT4oMini.get_ai_mini_pw(old_title)
|
|
|
|
- if pw_srt_text:
|
|
|
|
-
|
|
|
|
- pw_url = TTS.get_pw_zm(pw_srt_text, voice)
|
|
|
|
- if pw_url:
|
|
|
|
- pw_mp3_path = TTS.download_mp3(pw_url, video_path_url, pw_random_id)
|
|
|
|
- # oss_mp3_key = Oss.mp3_upload_oss(pw_mp3_path, pw_random_id)
|
|
|
|
- # oss_mp3_key = oss_mp3_key.get("oss_object_key")
|
|
|
|
- # new_pw_path = f"http://art-crawler.oss-cn-hangzhou.aliyuncs.com/{oss_mp3_key}"
|
|
|
|
- # print(f"mp3地址:{new_pw_path}")
|
|
|
|
- # pw_url_sec = FFmpeg.get_video_duration(pw_mp3_path)
|
|
|
|
- pw_srt = TTS.getSrt(pw_url)
|
|
|
|
- Common.logger(mark).info(f"{name}的{task_mark}下的视频{url},获取AI片尾srt成功")
|
|
|
|
- else:
|
|
|
|
- Common.logger(mark).info(f"{name}的{task_mark}下的视频{url},获取AI片尾失败")
|
|
|
|
- return None
|
|
|
|
- else:
|
|
|
|
- Common.logger(mark).info(f"{name}的{task_mark}下的视频{url},获取AI片尾失败")
|
|
|
|
-
|
|
|
|
- return None
|
|
|
|
- else:
|
|
|
|
- if ',' in video_ending:
|
|
|
|
- video_ending_list = video_ending.split(',')
|
|
|
|
- else:
|
|
|
|
- video_ending_list = [video_ending]
|
|
|
|
- ending = random.choice(video_ending_list)
|
|
|
|
- pw_list = Material.get_pwsrt_data("summary", "DgX7vC", ending) # 获取srt
|
|
|
|
- if pw_list:
|
|
|
|
- pw_id = pw_list["pw_id"]
|
|
|
|
- pw_srt = pw_list["pw_srt"]
|
|
|
|
- pw_url = PQ.get_pw_url(pw_id)
|
|
|
|
- pw_mp3_path = FFmpeg.get_video_mp3(pw_url, video_path_url, pw_random_id)
|
|
|
|
- else:
|
|
|
|
- Feishu.bot(mark, '机器自动改造消息通知', f'{task_mark}任务下片尾标示错误,请关注!!!!', name)
|
|
|
|
- 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(mark).info(f"{name}的{task_mark}下的视频{url},生成视频最后一帧成功")
|
|
|
|
- break
|
|
|
|
- time.sleep(1)
|
|
|
|
- for attempt in range(3):
|
|
|
|
- Common.logger(mark).info(f"{name}的{task_mark}下的视频{url},获取mp3成功")
|
|
|
|
- pw_path = FFmpeg.pw_video(jpg_path, video_path_url, pw_mp3_path, pw_srt, pw_random_id,
|
|
|
|
- pw_mp3_path) # 生成片尾视频
|
|
|
|
- if os.path.isfile(pw_path):
|
|
|
|
- Common.logger(mark).info(f"{task_mark}下的视频{url},生成片尾视频成功")
|
|
|
|
- break
|
|
|
|
- time.sleep(1)
|
|
|
|
- pw_video_list = [new_video_path, pw_path]
|
|
|
|
- Common.logger(mark).info(f"{task_mark}下的视频{url},视频与片尾开始拼接")
|
|
|
|
- video_path = FFmpeg.concatenate_videos(pw_video_list, video_path_url) # 视频与片尾拼接到一起
|
|
|
|
- if os.path.exists(video_path) or os.path.getsize(video_path) != 0:
|
|
|
|
- Common.logger(mark).info(f"{name}的{task_mark}下的视频{url},视频与片尾拼接成功")
|
|
|
|
- time.sleep(1)
|
|
|
|
- if video_share and video_share != 'None':
|
|
|
|
- new_video_path = FFmpeg.single_video(video_path, video_path_url, zm)
|
|
|
|
- else:
|
|
|
|
- new_video_path = video_path
|
|
|
|
- return new_video_path
|
|
|
|
- else:
|
|
|
|
- return new_video_path
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@classmethod
|
|
@classmethod
|
|
def upload_video_and_thumbnail(cls, new_video_path: str, cover: str, v_id, new_title: str, task_mark: str, name: str, piaoquan_id,
|
|
def upload_video_and_thumbnail(cls, new_video_path: str, cover: str, v_id, new_title: str, task_mark: str, name: str, piaoquan_id,
|
|
- video_path_url: str, mark: str, channel_id: str, url: str, old_title: str, title, rule: str, video):
|
|
|
|
|
|
+ video_path_url: str, mark: str, channel_id: str, url: str, old_title: str, rule: str, video):
|
|
"""
|
|
"""
|
|
上传视频和封面到OSS,并更新数据库
|
|
上传视频和封面到OSS,并更新数据库
|
|
"""
|
|
"""
|