【教学类-160-61】20260621 AI视频培训-练习061“豆包AI视频《龙峙东方 守我山河》+豆包图片风格:国潮中国风

背景需求

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

图片生成

图片下载

视频生成

视频下载

里面的龙的动态效果太强大了,配的声音也非常贴切(激烈打斗、吼叫等)

'''
换了新电脑,适配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视频太强大!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿夏reasonsummer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值