20260628 《067碎镜织光者》风格玻璃碎光折射图片生成图片下载视频生成视频下载 换了新电脑适配python 3.8.10 把豆包10秒视频转为GIF deepseek阿夏 20260620 # 放在文件第一行优先执行 try: from PIL import Image # 新版Pillow别名映射 Image.ANTIALIAS Image.Resampling.LANCZOS except ImportError: pass # 下面是你原本的全部代码保持不动 import os from moviepy.editor import VideoFileClip def convert_mp4_to_gif(input_folder, output_folderNone, scale0.5, fps5, colors128): 修复版的MP4转GIF函数 if output_folder is None: output_folder input_folder os.makedirs(output_folder, exist_okTrue) for filename in os.listdir(input_folder): if filename.lower().endswith(.mp4): input_path os.path.join(input_folder, filename) output_path os.path.join(output_folder, f{os.path.splitext(filename)[0]}.gif) print(f正在转换: {filename}...) try: # 使用更稳定的方式读取视频 clip VideoFileClip(input_path) # 检查视频是否成功读取 if clip.duration 0: print(f警告: {filename} 可能为空或损坏) continue # 调整尺寸更保守的参数 if scale is not None: clip clip.resize(scale) # 限制GIF时长避免文件过大 if clip.duration 10: # 如果视频超过10秒只取前10秒 clip clip.subclip(0, 10) # 使用更稳定的GIF输出参数 clip.write_gif( output_path, fpsmin(fps, 8), # 限制最大帧率 programffmpeg, verboseFalse, loggerNone ) # 检查输出文件 if os.path.exists(output_path) and os.path.getsize(output_path) 0: print(f✓ 转换成功: {os.path.basename(output_path)}) else: print(f✗ 转换失败: 输出文件为空) except Exception as e: print(f✗ 转换 {filename} 时出错: {str(e)}) finally: if clip in locals(): clip.close() # 测试版本 - 更保守的参数 if __name__ __main__: path rD:\20260628 《067》风格\视频 # 首先检查文件夹是否存在 if not os.path.exists(path): print(f错误: 路径不存在 - {path}) else: print(f找到文件夹包含文件: {os.listdir(path)}) convert_mp4_to_gif( input_folderpath, # scale0.49, # 更小的缩放比例(5秒)通义万相 # scale1, # 更小的缩放比例(10秒) scale0.33, # 缩小到原尺寸1/3减小gif体积 豆包视频 fps8, # 降低帧率适配WORD插入 colors64 # 减少颜色压缩文件 )旁白与字幕 测试所有edge_tts普通话中文音频库(含普通话\方言\粤语\台湾国语) 保存音频包含音频库名称 Deepseek,阿夏 20260524 from pathlib import Path import edge_tts import asyncio # 配置区域 # 文本文件所在文件夹 TEXT_FOLDER Path(rD:\20260628 《067》风格\旁白) # 修改为你的文件夹路径 TEXT_FILE_NAME 旁白.txt # 文本文件名 # 音频输出路径 SAVE_DIR TEXT_FOLDER SAVE_DIR.mkdir(parentsTrue, exist_okTrue) # # Edge TTS 普通话声音 (zh-CN) 完整列表 # # 更新时间根据搜索结果整理建议运行 edge-tts --list-voices 获取最新列表 # # -------------------- 女声 -------------------- # 可用 # VOICE zh-CN-XiaoxiaoNeural # 晓晓 - 温暖亲切最常用的女声支持多种情感风格[citation:2][citation:3] # VOICE_NAME 晓晓 # VOICE zh-CN-XiaoyiNeural # 晓伊 - 活泼可爱元气少女音[citation:3] # VOICE_NAME 晓伊 VOICE zh-CN-XiaoxuanNeural # 晓萱 - 冷静清冽 VOICE_NAME 晓萱 # -------------------- 男声 -------------------- # # 可用 # VOICE zh-CN-YunyangNeural # 云扬 - 专业播音员风格沉稳有力适合新闻播报[citation:2][citation:3] # VOICE_NAME 云扬 # VOICE zh-CN-YunxiNeural # 云希 - 阳光年轻活泼开朗少年音[citation:2][citation:3] # VOICE_NAME 云希 # VOICE zh-CN-YunjianNeural # 云健 - 标准播音腔适合旁白、叙事[citation:2][citation:3] # VOICE_NAME 云健 # VOICE zh-CN-YunxiaNeural # 云夏 - 10岁小男孩童声 # VOICE_NAME 云夏 # -------------------- 方言/地区口音 -------------------- # 可用 # VOICE zh-CN-liaoning-XiaobeiNeural # 晓北 - 辽宁口音东北话[citation:9] # VOICE_NAME 辽宁晓北 # VOICE zh-CN-shaanxi-XiaoniNeural # 晓妮 - 陕西口音[citation:9] # VOICE_NAME 陕西晓妮 # -------------------- 香港粤语 (zh-HK) -------------------- # 可用 # VOICE zh-HK-HiuGaaiNeural # 晓佳 - 标准粤语女声自然亲切[citation:1][citation:10] # VOICE_NAME 粤语晓佳 # VOICE zh-HK-HiuMaanNeural # 晓曼 - 标准粤语女声[citation:1][citation:8] # VOICE_NAME 粤语晓曼 # VOICE zh-HK-WanLungNeural # 云龙 - 标准粤语男声沉稳自然[citation:1][citation:8] # VOICE_NAME 粤语云龙 # -------------------- 台湾国语 (zh-TW) -------------------- # 可用 # VOICE zh-TW-HsiaoChenNeural # 晓晨 - 台湾国语女声温柔细腻[citation:8] # VOICE_NAME 台湾晓晨 # VOICE zh-TW-HsiaoYuNeural # 晓宇 - 台湾国语女声语调柔和[citation:8][citation:9] # VOICE_NAME 台湾晓宇 # VOICE zh-TW-YunJheNeural # 云哲 - 台湾国语男声[citation:8] # VOICE_NAME 台湾云哲 # 音频参数 # RATE -20% # 语速稍慢 # PITCH 10Hz # 标准音调 # VOLUME 10% # 音量适中 RATE -20% # 语速 显著放慢营造稳重感 PITCH 20Hz # 音调 大幅降低音调追求低沉 VOLUME 10% # 音量 适度增加响度增强气场 # async def generate_audio(): # 构建完整的文本文件路径 txt_path TEXT_FOLDER / TEXT_FILE_NAME # 检查文件是否存在 if not txt_path.exists(): print(f错误找不到文件 {txt_path}) return # 读取文本文件内容UTF-8编码 with open(txt_path, r, encodingutf-8) as f: text_content f.read() # 去除首尾空白 text_content text_content.strip() if not text_content: print(❌ 错误文本文件为空) return # 生成音频文件名格式原文件名- 声音名称 .mp3 # 注意这里保留原文件名不含扩展名加上 - 声音名称 base_filename txt_path.stem # 获取不含扩展名的文件名 audio_filename f{base_filename} - {VOICE_NAME}.mp3 out SAVE_DIR / audio_filename # 生成语音 tts edge_tts.Communicate( text_content, VOICE, rateRATE, pitchPITCH, volumeVOLUME ) await tts.save(str(out)) print(f✅ 已生成{audio_filename}) print(f 来源文件{txt_path}) print(f 使用声音{VOICE_NAME} ({VOICE})) print(f 文本总字数{len(text_content)} 字) print(f 保存位置{out}) if __name__ __main__: asyncio.run(generate_audio()) print(\n 音频生成完成) # 不可用 # VOICE zh-CN-XiaohanNeural # 晓涵 - 甜美柔和抒情风格[citation:2][citation:3] # VOICE_NAME 晓涵 # 添加声音的中文名称用于文件名 # VOICE zh-CN-XiaomengNeural # 晓梦 - 软萌萝莉音[citation:3] # VOICE_NAME 晓梦 # VOICE zh-CN-XiaomoNeural # 晓墨 - 知性智慧支持多种情感风格[citation:2] # VOICE_NAME 晓墨 # VOICE zh-CN-XiaoruiNeural # 晓睿 - 成熟专业[citation:2] # VOICE_NAME 晓睿 # VOICE zh-CN-XiaoshuangNeural # 晓双 - 活泼明亮童声 # VOICE_NAME 晓双 # VOICE zh-CN-XiaoxiaNeural # 晓霞 - 成熟温柔 # VOICE_NAME 晓霞 # VOICE zh-CN-XiaoyanNeural # 晓颜 - 自然平常 # VOICE_NAME 晓颜 # VOICE zh-CN-XiaoyouNeural # 晓悠 - 软萌童声7岁左右 # VOICE_NAME 晓悠 # VOICE zh-CN-XiaozhenNeural # 晓珍 - 温暖关切 # VOICE_NAME 晓珍 # VOICE zh-CN-XinranNeural # 欣然 - 清新自然 # VOICE_NAME 欣然 # VOICE zh-CN-XiaochenNeural # 晓晨 - 温柔治愈[citation:3] # VOICE_NAME 晓晨 # 不能用 # VOICE zh-CN-YunfengNeural # 云枫 - 年轻清亮[citation:5] # VOICE_NAME 云枫 # VOICE zh-CN-YunhaoNeural # 云皓 - 25岁男性声音比云枫更低沉[citation:5] # VOICE_NAME 云皓 # VOICE zh-CN-YunyeNeural # 云野 - 35-40岁男性纪录片旁白风格[citation:5] # VOICE_NAME 云野 # VOICE zh-CN-YunzeNeural # 云泽 - 45-50岁男性慈祥和蔼的深沉嗓音[citation:5] # VOICE_NAME 云泽视频合成20260628 《067碎镜织光者》风格玻璃碎光折射