bitratev2.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import csv
  2. import requests
  3. import subprocess
  4. def get_filesize(url):
  5. try:
  6. response = requests.head(url, allow_redirects=True)
  7. if response.status_code == 200:
  8. content_length = response.headers.get('Content-Length')
  9. return int(content_length) if content_length else None
  10. print(f"Error: HTTP {response.status_code} for {url}")
  11. return None
  12. except Exception as e:
  13. print(f"Error getting filesize for {url}: {e}")
  14. return None
  15. def get_bitrate(url):
  16. try:
  17. cmd = [
  18. 'ffprobe',
  19. '-v', 'error',
  20. '-select_streams', 'v:0',
  21. '-show_entries', 'stream=bit_rate',
  22. '-of', 'default=noprint_wrappers=1:nokey=1',
  23. url
  24. ]
  25. output = subprocess.check_output(cmd, stderr=subprocess.STDOUT, timeout=30)
  26. bit_rate = output.decode().strip()
  27. return int(bit_rate) if bit_rate else None
  28. except subprocess.CalledProcessError as e:
  29. print(f"ffprobe error for {url}: {e.output.decode().strip()}")
  30. return None
  31. except Exception as e:
  32. print(f"Error getting bitrate for {url}: {e}")
  33. return None
  34. def process_csv(csv_file):
  35. bitrate_counter = 0
  36. filesize_counter = 0
  37. with open(csv_file, 'r') as file:
  38. reader = csv.DictReader(file)
  39. for row in reader:
  40. url1, url2 = row['path_264'], row['path_265']
  41. url1 = "http://visionularcdn.yishihui.com/" + url1
  42. url2 = "http://vcdn.yishihui.com/" + url2
  43. # 获取文件大小
  44. size1, size2 = get_filesize(url1), get_filesize(url2)
  45. if None in (size1, size2):
  46. continue
  47. # 获取码率
  48. bitrate1, bitrate2 = get_bitrate(url1), get_bitrate(url2)
  49. if None in (bitrate1, bitrate2):
  50. continue
  51. # 比较并计数
  52. if bitrate1 > bitrate2:
  53. bitrate_counter += 1
  54. if size1 > size2:
  55. filesize_counter += 1
  56. print(f"码率大于次数: {bitrate_counter}")
  57. print(f"文件大小大于次数: {filesize_counter}")
  58. if __name__ == "__main__":
  59. # import sys
  60. #
  61. # if len(sys.argv) != 2:
  62. # print("使用方法: python script.py input.csv")
  63. # sys.exit(1)
  64. # process_csv(sys.argv[1])
  65. csv_file_path = '/root/h265.csv' # 替换为你的CSV文件路径
  66. process_csv(csv_file_path)