download_video.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import os
  2. import time
  3. import uuid
  4. import requests
  5. class DownLoad:
  6. @classmethod
  7. def download_video(cls, video_url, file_path):
  8. video = file_path + 'video.mp4'
  9. try:
  10. for i in range(3):
  11. payload = {}
  12. headers = {}
  13. response = requests.request("GET", video_url, headers=headers, data=payload, timeout=240)
  14. if response.status_code == 200:
  15. # 以二进制写入模式打开文件
  16. with open(f"{video}", "wb") as file:
  17. # 将响应内容写入文件
  18. file.write(response.content)
  19. return video
  20. return video
  21. except Exception:
  22. return video
  23. @classmethod
  24. def download_m3u8_video(cls ,url, file_path):
  25. r = requests.get(url)
  26. if r.status_code != 200:
  27. return False
  28. m3u8_list = r.text.split('\n')
  29. m3u8_list = [i for i in m3u8_list if i and i[0] != '#']
  30. ts_list = []
  31. for ts_url in m3u8_list:
  32. ts_url = url.rsplit('/', 1)[0] + '/' + ts_url
  33. ts_list.append(ts_url)
  34. with open(file_path, 'wb') as f:
  35. for ts_url in ts_list:
  36. r = requests.get(ts_url)
  37. if r.status_code == 200:
  38. f.write(r.content)
  39. return True
  40. @classmethod
  41. def convert_ts_to_mp4(cls, ts_file_path, mp4_file_path):
  42. os.system(f'ffmpeg -i {ts_file_path} -c copy {mp4_file_path}')
  43. @classmethod
  44. def download_pq_video(cls,video_path_url , video_url_list):
  45. video_list = []
  46. for video_url in video_url_list:
  47. video = f'{video_path_url}{str(uuid.uuid4())}.mp4'
  48. try:
  49. payload = {}
  50. headers = {}
  51. response = requests.request("GET", video_url, headers=headers, data=payload, timeout=60)
  52. if response.status_code == 200:
  53. # 以二进制写入模式打开文件
  54. with open(f"{video}", "wb") as file:
  55. # 将响应内容写入文件
  56. file.write(response.content)
  57. video_list.append(video)
  58. time.sleep(1)
  59. except Exception:
  60. continue
  61. return video_list