# pip uninstall -y Pillow==9.5.0 # pip install Pillow==9.5.0 import os from urllib.parse import unquote import uuid import shutil import subprocess import pkg_resources import sys def install(package): subprocess.check_call( [sys.executable, "-m", "pip", "install", package, "-i", "https://pypi.tuna.tsinghua.edu.cn/simple"]) if __name__ == "__main__": # 安装ffmpeg try: # 尝试导入包 pkg_resources.get_distribution('ffmpeg') except pkg_resources.DistributionNotFound: # 如果未安装,使用pip安装ffmpeg print("ffmpeg库未安装,正在安装...") install('ffmpeg-python ') finally: # 包安装后或者已存在时,导入包 import ffmpeg print("ffmpeg库已加载。") # 安装Pillow try: # 尝试导入包 pkg_resources.get_distribution('Pillow') except pkg_resources.DistributionNotFound: # 如果未安装,使用pip安装ffmpeg print("Pillow库未安装,正在安装...") install('Pillow==9.5.0') finally: # 包安装后或者已存在时,导入包 from PIL import Image print("Pillow库已加载。") # 创建目录 directory = "assets/images/" if os.path.exists("target.txt"): os.remove("target.txt") # 检查目录是否存在 if os.path.exists(directory): # 删除目录及其所有内容 shutil.rmtree(directory) os.makedirs(directory) # 打开文件 with open('source.txt', 'r', encoding='utf-8') as file: # 逐行读取文件内容 for line in file: # 每一行 video_path = line.strip() # 获取信息 probe = ffmpeg.probe(video_path) # print('source_video_path: {}'.format(video_path)) format = probe['format'] bit_rate = int(format['bit_rate']) / 1000 size = int(format['size']) / 1024 / 1024 video_stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'video'), None) if video_stream is None: print('No video stream found!') continue width = int(video_stream['width']) height = int(video_stream['height']) num_frames = int(video_stream['nb_frames']) fps = int(video_stream['r_frame_rate'].split('/')[0]) / int(video_stream['r_frame_rate'].split('/')[1]) duration = float(video_stream['duration']) # Convert size to MB video_size = "{:.1f}MB".format(size) video_size = video_size.replace("M", "") # print(video_size) # Convert duration to minutes and seconds minutes = int(duration // 60) seconds = int(duration % 60) # Format minutes and seconds with leading zeros if necessary minutes_str = str(minutes).zfill(2) seconds_str = str(seconds).zfill(2) video_length = "{}:{}".format(minutes_str, seconds_str) # print(video_length) # 获取中文名称 # 使用字符串分割方法,获取最后一个'/'后面的部分 last_part = video_path.split('/')[-1] # 对URL编码的字符串进行解码 video_name = unquote(last_part) # 设置输出图片路径 # 生成一个随机的 UUID new_uuid = uuid.uuid4() # 将 UUID 对象转换为字符串类型 uuid_string = str(new_uuid) video_thumb = directory + uuid_string + '.jpg' if os.path.exists(video_thumb): os.remove(video_thumb) # 使用 ffmpeg-python 进行视频截取 ffmpeg.input(video_path).filter('select', 'gte(n,0)').output(video_thumb, vframes=1).run() # 打开原始图像 image = Image.open(video_thumb) # 获取原始图像的宽度和高度 width, height = image.size # 计算等比例缩放后的高度 new_height = int((320 / width) * height) # 缩放图像 resized_image = image.resize((320, new_height), Image.ANTIALIAS) # 保存缩放后的图像 resized_image.save(video_thumb) # 关闭原始图像 image.close() # 读入模板文件 with open('Template.html', 'r', encoding='utf-8') as tFile: # 读取文件的全部内容 content = tFile.read() content = content.replace("{{video_url}}", video_path) content = content.replace("{{video_size}}", video_size) content = content.replace("{{video_length}}", video_length) content = content.replace("{{video_thumb}}", video_thumb) content = content.replace("{{video_name}}", video_name.replace(".mp4","")) # 打开文件并设置为追加模式 with open('target.txt', 'a', encoding='utf-8') as fw: # 向文件追加内容 fw.write(content + "\n") print("恭喜,所有操作成功完成!")