video_prep.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import configparser
  2. import os
  3. import time
  4. from common import Feishu, Common, Oss
  5. from common.ffmpeg import FFmpeg
  6. from common.piaoquan_utils import PQ
  7. from common.sql_help import sqlCollect
  8. config = configparser.ConfigParser()
  9. config.read('./config.ini')
  10. class getVideo:
  11. """
  12. 根据标示+任务标示创建目录
  13. """
  14. @classmethod
  15. def create_folders(cls):
  16. video_path_url = config['PATHS']['VIDEO_PATH']
  17. if not os.path.exists(video_path_url):
  18. os.makedirs(video_path_url)
  19. return video_path_url
  20. """
  21. 删除文件
  22. """
  23. @classmethod
  24. def remove_files(cls, video_path_url):
  25. if os.path.exists(video_path_url) and os.path.isdir(video_path_url):
  26. for root, dirs, files in os.walk(video_path_url):
  27. for file in files:
  28. file_path = os.path.join(root, file)
  29. os.remove(file_path)
  30. for dir in dirs:
  31. dir_path = os.path.join(root, dir)
  32. os.rmdir(dir_path)
  33. """
  34. 获取未改造的视频ID
  35. """
  36. @classmethod
  37. def find_unique_id(cls, data, videos):
  38. video_ids = [item for item in data if item not in videos]
  39. data_video_ids = [item for item in video_ids if item is not None and item != '']
  40. return data_video_ids
  41. """
  42. 飞书数据处理
  43. """
  44. @classmethod
  45. def video_task(cls, data):
  46. video_list = sqlCollect.is_video_id()
  47. if video_list:
  48. videos = [item[0].replace("'", "").replace("(", "").replace(")", "") for item in video_list]
  49. else:
  50. videos = []
  51. data_video_ids = cls.find_unique_id(data, videos) # 获取未处理的视频ID
  52. video_path_url = cls.create_folders() # 创建目录
  53. if data_video_ids:
  54. for v_id in data_video_ids:
  55. time.sleep(4)
  56. try:
  57. video_url, new_title = PQ.get_pw_url(v_id)
  58. new_video_path = PQ.download_video(video_url, video_path_url, v_id) # 下载视频地址
  59. if new_video_path == '':
  60. Common.logger("log").info(f"{video_url}视频下载失败")
  61. cls.remove_files(video_path_url)
  62. continue
  63. url = FFmpeg.video_duration(new_video_path, video_path_url, v_id)
  64. if not os.path.isfile(url):
  65. Common.logger("log").info(f"{v_id}下的视频处理失败")
  66. cls.remove_files(video_path_url)
  67. continue
  68. oss_object_key = Oss.stitching_sync_upload_oss(url, v_id) # 视频发送OSS
  69. time.sleep(1)
  70. status = oss_object_key.get("status")
  71. if status == 200:
  72. oss_object_key = oss_object_key.get("oss_object_key")
  73. time.sleep(1)
  74. code = PQ.insert_piaoquantv(oss_object_key, new_title)
  75. if code:
  76. Common.logger("log").info(f"{v_id}发送成功")
  77. sqlCollect.insert_task(v_id) # 插入数据库
  78. time.sleep(1)
  79. values = [[v_id, str(code)]]
  80. Feishu.insert_columns("MTVXsuGKUhOI5btTjOEceyJ9nZb", "JmS9sJ", "ROWS", 1, 2)
  81. time.sleep(0.5)
  82. Feishu.update_values("MTVXsuGKUhOI5btTjOEceyJ9nZb", "JmS9sJ", "A2:Z2", values)
  83. cls.remove_files(video_path_url)
  84. else:
  85. cls.remove_files(video_path_url)
  86. Common.logger("log").info(f"视频ID{v_id} 视频发送OSS失败 ")
  87. time.sleep(10)
  88. except Exception as e:
  89. cls.remove_files(video_path_url)
  90. Common.logger("log").info(f"处理失败,错误信息{e}")
  91. continue