




背景需求





我想做一个“中国龙”和“白头鹰”战斗的国潮中国风



图片生成









图片下载

视频生成









视频下载

里面的龙的动态效果太强大了,配的声音也非常贴切(激烈打斗、吼叫等)
'''
换了新电脑,适配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_folder=None, scale=0.5, fps=5, colors=128):
"""
修复版的MP4转GIF函数
"""
if output_folder is None:
output_folder = input_folder
os.makedirs(output_folder, exist_ok=True)
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,
fps=min(fps, 8), # 限制最大帧率
program='ffmpeg',
verbose=False,
logger=None
)
# 检查输出文件
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 = r'D:\20260621《061中国龙VS白头鹰》风格:国潮新中式\视频'
# 首先检查文件夹是否存在
if not os.path.exists(path):
print(f"错误: 路径不存在 - {path}")
else:
print(f"找到文件夹,包含文件: {os.listdir(path)}")
convert_mp4_to_gif(
input_folder=path,
# scale=0.49, # 更小的缩放比例(5秒)通义万相
# scale=1, # 更小的缩放比例(10秒)
scale=0.33, # 缩小到原尺寸1/3,减小gif体积 豆包视频
fps=8, # 降低帧率适配WORD插入
colors=64 # 减少颜色压缩文件
)





旁白和字幕




'''
测试所有edge_tts普通话中文音频库(含普通话\方言\粤语\台湾国语) 保存音频包含音频库名称
Deepseek,阿夏
20260524
'''
from pathlib import Path
import edge_tts
import asyncio
# ========== 配置区域 ==========
# 文本文件所在文件夹
TEXT_FOLDER = Path(r"D:\20260621《061中国龙VS白头鹰》风格:国潮新中式\旁白") # 修改为你的文件夹路径
TEXT_FILE_NAME = "旁白.txt" # 文本文件名
# 音频输出路径
SAVE_DIR = TEXT_FOLDER
SAVE_DIR.mkdir(parents=True, exist_ok=True)
# ============================================================
# 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 = "-35%" # 显著放慢,营造稳重感
PITCH = "-40Hz" # 大幅降低音调,追求低沉
VOLUME = "+15%" # 适度增加响度,增强气场
# ============================
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", encoding="utf-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,
rate=RATE,
pitch=PITCH,
volume=VOLUME
)
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 = "云泽"

听上去模糊、声音嗡嗡的



视频合成






这是我做过的动态度最高(打斗)的视频,豆包AI视频太强大!