【教学类-160-14】20260425 AI视频培训-练习014“豆包AI视频《月下枯蔷(哥特风)》+豆包图片风格:油画”

20260425 《014月下枯蔷(哥特风)》风格:油画

背景需求

选了哥特风格故事脚本

豆包故事脚本

只有画面,没有图片关键词、图片转视频动态关键词

内容有点长,我要控制在10秒一个镜头

很好只有10秒一个镜头了。

写一个故事名称

图片生成:选了"油画"

图片下载

视频生成

视频下载

视频剪辑

统一用一个哥特教堂音乐

把片头和片尾照片加入,删除多余音频,添加钟声特效

最后我还是 用了Python edge_tts的AI声音

python 复制代码
# 女声 · 空灵神秘风格
from pathlib import Path
import edge_tts
import asyncio
import subprocess

# 解说文本(可自由修改)
TEXT = "。".join([
    "亲爱的,你该来了",
    "月光为契,宿命为笼,我们终究触不到彼此。",
]) + "。"

# 保存路径
SAVE_DIR = Path(r"D:\test\20桌面素材\20260425 《月下枯蔷014(哥特)》风格:油画\声音")
SAVE_DIR.mkdir(parents=True, exist_ok=True)

# ===================== 女声 · 空灵神秘音色 =====================
# 女声基础音色(适合改造为空灵风格)
MYSTERIOUS_FEMALE_VOICES = [
    # 推荐:Xiaoxiao(温柔女声,调音范围大,空灵感强)
    # ("zh-CN-XiaoxiaoNeural", "神秘_女声_晓晓.mp3"),
    # 备选1:Xiaoyou(年轻女声,带梦幻感)
    # ("zh-CN-XiaoyouNeural", "神秘_女声_晓悠.mp3"),
    # 备选2:Xiaohan(自然亲切,适合神秘旁白)
    ("zh-CN-XiaohanNeural", "神秘_女声_晓涵.mp3"),
]

# 空灵神秘风格参数(女声专属)
MYSTERIOUS_PARAMS = {
    "rate": "-18%",      # 语速降低18%(比男声稍慢,更飘渺)
    "pitch": "-15Hz",    # 音高降低15Hz(女声降低后更空灵,不会太低沉)
    "volume": "+0%"      # 正常音量
}
# =================================================================

def add_mysterious_effects_female(input_mp3: str, output_mp3: str):
    """添加女声专属空灵效果:混响 + 回声 + 柔和淡入淡出"""
    
    # 女声空灵风格滤镜链(混响略轻,保持女声清透感)
    filter_chain = (
        "aecho=0.7:0.8:180:0.35, "        # 回声:延迟180ms,衰减0.35(比男声轻)
        "areverb=wet_gain=0.5, "           # 混响:湿声增益0.5(更强空间感)
        "afade=t=in:st=0:d=0.8, "           # 淡入0.8秒(更柔和)
        "afade=t=out:st=8:d=1.5"            # 淡出1.5秒
    )
    
    cmd = [
        "ffmpeg", "-i", input_mp3,
        "-af", filter_chain,
        "-y",
        output_mp3
    ]
    
    try:
        subprocess.run(cmd, capture_output=True, check=True)
        return True
    except subprocess.CalledProcessError as e:
        print(f"⚠️ FFmpeg处理失败: {e.stderr.decode()[:200]}")
        return False

async def generate_mysterious_female_voice():
    """生成空灵神秘女声"""
    
    for voice, filename in MYSTERIOUS_FEMALE_VOICES:
        out_mp3 = SAVE_DIR / filename
        temp_raw = SAVE_DIR / f"_temp_female_{filename}"
        
        # 步骤1:合成基础语音
        print(f"\n🎙️ 正在合成基础语音:{filename}")
        print(f"   音色:{voice}")
        print(f"   参数:语速={MYSTERIOUS_PARAMS['rate']}, 音高={MYSTERIOUS_PARAMS['pitch']}")
        
        tts = edge_tts.Communicate(
            TEXT, 
            voice,
            rate=MYSTERIOUS_PARAMS["rate"],
            pitch=MYSTERIOUS_PARAMS["pitch"],
            volume=MYSTERIOUS_PARAMS["volume"]
        )
        
        await tts.save(str(temp_raw))
        print(f"   ✅ 基础合成完成")
        
        # 步骤2:添加空灵效果
        print(f"   🔮 添加空灵混响效果...")
        if add_mysterious_effects_female(str(temp_raw), str(out_mp3)):
            print(f"   ✅ 空灵效果添加完成")
            # 删除临时文件
            temp_raw.unlink()
        else:
            # 如果FFmpeg失败,保留原始文件
            temp_raw.rename(out_mp3)
            print(f"   ⚠️ 效果添加失败,使用原始版本")
        
        print(f"✅ 已生成:{filename}")
        await asyncio.sleep(0.5)

def check_ffmpeg():
    try:
        subprocess.run(["ffmpeg", "-version"], capture_output=True, check=True)
        return True
    except (subprocess.SubprocessError, FileNotFoundError):
        print("⚠️ 未检测到FFmpeg,将跳过混响效果(仅使用基础调音)")
        print("   如需完整空灵效果,请安装FFmpeg:https://ffmpeg.org/download.html")
        return False

if __name__ == "__main__":
    print("=" * 50)
    print("  女声 · 空灵神秘合成器")
    print("=" * 50)
    
    # 检查FFmpeg状态
    has_ffmpeg = check_ffmpeg()
    if not has_ffmpeg:
        print("   将使用基础调音版本(语速降低+音高降低)\n")
    
    asyncio.run(generate_mysterious_female_voice())
    print("\n🎉 女声空灵神秘声音生成完成!")
python 复制代码
# 孔子,男播音员
# 老师的声音 → 改为【空灵神秘风格】
from pathlib import Path
import edge_tts
import asyncio
import subprocess
import tempfile

# 解说文本(可自由修改)
TEXT = "。".join([
    "亲爱的,我来了",
    "百年前的咒,困住了我,也困住了你的时光。",
    "唯有永夜相伴,守这一场未完成的约",
]) + "。"

# 保存路径
SAVE_DIR = Path(r"D:\test\20桌面素材\20260425 《月下枯蔷014(哥特)》风格:油画\声音")
SAVE_DIR.mkdir(parents=True, exist_ok=True)

# ===================== 核心修改:空灵神秘音色 =====================
# 使用适合改造的男声基础音色
MYSTERIOUS_VOICES = [
    # 推荐:Yunxi(年轻男声,调音范围大,适合做空灵效果)
    ("zh-CN-YunxiNeural", "神秘_云希.mp3"),
    # 备选:Yunjian(冷静叙述感,适合神秘旁白)
    ("zh-CN-YunjianNeural", "神秘_云健.mp3"),
]

# 空灵神秘风格参数
MYSTERIOUS_PARAMS = {
    "rate": "-15%",      # 语速降低15%(空灵感需要稍慢)
    "pitch": "-25Hz",    # 音高降低25Hz(低沉神秘)
    "volume": "+5%"      # 音量略微提升
}
# =================================================================

def add_mysterious_effects(input_mp3: str, output_mp3: str):
    """添加空灵神秘效果:混响 + 回声 + 淡入淡出"""
    
    # 空灵风格滤镜链
    # aecho: 回声效果(延迟200ms,衰减0.4)
    # areverb: 混响效果(湿声增益0.45,营造空间感)
    # afade: 淡入淡出(消除突兀感)
    filter_chain = (
        "aecho=0.8:0.9:200:0.4, "          # 回声:延迟200ms,衰减0.4
        "areverb=wet_gain=0.45, "           # 混响:湿声增益0.45(空灵感)
        "afade=t=in:st=0:d=0.5, "           # 淡入0.5秒
        "afade=t=out:st=8:d=1.5"            # 淡出1.5秒(假设总长10秒左右)
    )
    
    cmd = [
        "ffmpeg", "-i", input_mp3,
        "-af", filter_chain,
        "-y",  # 覆盖输出文件
        output_mp3
    ]
    
    try:
        subprocess.run(cmd, capture_output=True, check=True)
        return True
    except subprocess.CalledProcessError as e:
        print(f"⚠️ FFmpeg处理失败: {e.stderr.decode()[:200]}")
        return False

async def generate_mysterious_voice():
    """生成空灵神秘风格语音"""
    
    for voice, filename in MYSTERIOUS_VOICES:
        out_mp3 = SAVE_DIR / filename
        temp_raw = SAVE_DIR / f"_temp_{filename}"
        
        # 步骤1:合成基础语音
        print(f"\n🎙️ 正在合成基础语音:{filename}")
        print(f"   音色:{voice}")
        print(f"   参数:语速={MYSTERIOUS_PARAMS['rate']}, 音高={MYSTERIOUS_PARAMS['pitch']}")
        
        tts = edge_tts.Communicate(
            TEXT, 
            voice,
            rate=MYSTERIOUS_PARAMS["rate"],
            pitch=MYSTERIOUS_PARAMS["pitch"],
            volume=MYSTERIOUS_PARAMS["volume"]
        )
        
        await tts.save(str(temp_raw))
        print(f"   ✅ 基础合成完成")
        
        # 步骤2:添加空灵效果
        print(f"   🔮 添加空灵混响效果...")
        if add_mysterious_effects(str(temp_raw), str(out_mp3)):
            print(f"   ✅ 空灵效果添加完成")
            # 删除临时文件
            temp_raw.unlink()
        else:
            # 如果FFmpeg失败,保留原始文件
            temp_raw.rename(out_mp3)
            print(f"   ⚠️ 效果添加失败,使用原始版本")
        
        print(f"✅ 已生成:{filename}")
        await asyncio.sleep(0.5)

# 可选:检查FFmpeg是否可用
def check_ffmpeg():
    try:
        subprocess.run(["ffmpeg", "-version"], capture_output=True, check=True)
        return True
    except (subprocess.SubprocessError, FileNotFoundError):
        print("⚠️ 未检测到FFmpeg,将跳过混响效果(仅使用基础调音)")
        print("   如需完整空灵效果,请安装FFmpeg:https://ffmpeg.org/download.html")
        return False

if __name__ == "__main__":
    print("=" * 50)
    print("  空灵神秘男声合成器")
    print("=" * 50)
    
    # 检查FFmpeg状态
    has_ffmpeg = check_ffmpeg()
    if not has_ffmpeg:
        print("   将使用基础调音版本(语速降低+音高降低)\n")
    
    asyncio.run(generate_mysterious_voice())
    print("\n🎉 空灵神秘声音生成完成!")

最后两个镜头没有台词

这样每个镜头都有男女声的台词了

20260425 《014月下枯蔷(哥特风)》风格:油画

感悟:

哥特风格的脚本就很神秘、抽象,所以做出来的故事没有什么明显的剧情,全靠想象。

相关推荐
搬砖的小码农_Sky几秒前
AI Agent:WebMCP介绍和具体实现方案
人工智能·ai·人机交互·agi
t_hj13 分钟前
大模型微调
人工智能·python·深度学习
冬奇Lab22 分钟前
RAG 系列(二十三):多模态 RAG——图片、表格也能检索
人工智能·llm
冬奇Lab30 分钟前
一天一个开源项目(第106篇):Claude Plugins Official - Anthropic 官方 Claude Code 插件生态全解析
人工智能·开源·资讯
落羽的落羽40 分钟前
【算法札记】练习 | Week4
linux·服务器·数据结构·c++·人工智能·算法·动态规划
英辰朗迪AI获客1 小时前
【AI】豆包与抖音智能功能深度评测报告
人工智能
大橙子打游戏1 小时前
难题彻底解决!VPaste:让 SSH 终端也能"粘贴"截图
人工智能
IT_陈寒2 小时前
Redis内存用爆了,原来我们都忽略了这个配置
前端·人工智能·后端
captain_AIouo2 小时前
降本增效突围,Captain AI助力Ozon商家提升盈利空间
大数据·人工智能·经验分享·aigc