video_processing.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import os
  2. import time
  3. import requests
  4. import json
  5. from loguru import logger
  6. from common.aliyun_log import AliyunLogger
  7. from common.redis import get_video_data
  8. from common.feishu_data import Material
  9. HOST = 'google_server' if os.getenv('env', 'dev') == 'prod' else 'localhost'
  10. API_KEY = os.getenv('API_KEY')
  11. class VideoProcessing:
  12. def get_ai_data(self, video_path):
  13. mark, prompt = Material.feishu_list()
  14. sample_data = {
  15. "一、基础信息": {
  16. "视觉/音乐/文字": "",
  17. "内容选题": "",
  18. "视频主题": ""
  19. },
  20. "二、主体和场景": {
  21. "视频主体": "",
  22. "视频场景": []
  23. },
  24. "三、情感与风格": {},
  25. "四、视频传播性与观众": {
  26. "片尾引导": {},
  27. "传播性判断": "",
  28. "观众画像": {}
  29. },
  30. "五、音画细节": {
  31. "音频细节": {},
  32. "视频水印": {},
  33. "视频字幕": {},
  34. "视频口播": ""
  35. },
  36. "六、人物与场景": {
  37. "知名人物": {},
  38. "人物年龄段": "",
  39. "场景描述": []
  40. },
  41. "七、时效性与分类": {
  42. "时效性": {},
  43. "视频一级分类": "",
  44. "二级分类": ["品类- 、分数-", "品类- 、分数-", "品类- 、分数-"]
  45. }
  46. }
  47. url = f"http://{HOST}:8080/process_video/"
  48. payload = json.dumps( {
  49. "api_key": API_KEY,
  50. "video_path": video_path,
  51. "prompt": prompt,
  52. "mark": str(mark),
  53. "sample_data": str(sample_data)
  54. } )
  55. headers = {
  56. 'Content-Type': 'application/json'
  57. }
  58. try:
  59. response = requests.request( "POST", url, headers=headers, data=payload )
  60. response = response.json()
  61. result = response['result']
  62. mark = response['mark']
  63. cleaned_string = result.replace( "```json", '' ).replace( "```", '' ).strip()
  64. return cleaned_string, str(mark)
  65. except Exception as e:
  66. logger.error(f"视频请求异常:{e}")
  67. return None
  68. def get_video(self, redis_task):
  69. video_data = get_video_data(redis_task)
  70. if not video_data:
  71. logger.info("没有获取到视频内容")
  72. time.sleep(5)
  73. return
  74. # 解码为字符串
  75. data_str = video_data.decode( 'utf-8' )
  76. # 解析为 JSON 对象
  77. data_json = json.loads( data_str )
  78. video_id = data_json['video_id']
  79. title = data_json['title']
  80. video_path = data_json['video_path']
  81. type = data_json['type']
  82. partition = data_json['partition']
  83. logger.info(video_path)
  84. data, mark = self.get_ai_data(video_path)
  85. AliyunLogger.logging(str(video_id), title, video_path, mark, type, partition, data)
  86. logger.success("写入日志成功")
  87. if __name__ == '__main__':
  88. video_processor = VideoProcessing()
  89. video_processor.get_video()