文本转视频2

由于之前的音频速度较慢,因此这里调整到1.3倍速

文本转语音代码

bash 复制代码
import torch
import soundfile as sf
from qwen_tts import Qwen3TTSModel
from moviepy import ImageClip, AudioFileClip, vfx
from pydub import AudioSegment
import os

def txt_to_speech(txt_path, output_audio, output_video, model_path, image_path=None, speed=1.0):
    # 1. 加载模型
    print(f"正在加载模型: {model_path} ...")
    model = Qwen3TTSModel.from_pretrained(
        model_path, device_map="cuda:0", dtype=torch.bfloat16, attn_implementation="sdpa"
    )
    print("模型加载完成!")

    # 2. 读取文本内容
    with open(txt_path, 'r', encoding='utf-8') as f:
        text_content = f.read().strip()
    if not text_content:
        print("文本文件为空,退出程序。")
        return

    # 3. 执行语音合成
    print("正在合成语音...")
    wavs, sr = model.generate_custom_voice(
        text=text_content, language="Chinese", speaker="Vivian", instruct="用温柔、专业的语气朗读。"
    )
    sf.write(output_audio, wavs[0], sr)
    print(f"✅ 原始语音合成完毕,已保存至: {output_audio}")

    # 4. 处理音频变速(核心优化部分)
    processed_audio_path = output_audio
    if speed != 1.0:
        print(f"🎵 正在使用专业算法处理 {speed}x 变速不变调...")
        try:
            # 使用 pydub 加载音频
            audio_seg = AudioSegment.from_file(output_audio)
            # speedup 方法可以实现变速不变调,crossfade=0 避免拼接杂音
            processed_audio_seg = audio_seg.speedup(playback_speed=speed, crossfade=0) 
            
            # 导出处理后的音频(覆盖原文件或保存为新文件)
            processed_audio_path = "temp_spaced_audio.wav"
            processed_audio_seg.export(processed_audio_path, format="wav")
            print("✅ 音频变速处理完成!")
        except Exception as e:
            print(f"⚠️ pydub 处理失败,将回退到普通变速: {e}")

    # 5. 合成 MP4 视频
    if image_path:
        print(f"正在合成 MP4 视频...")
        try:
            # 使用处理后的音频路径加载
            audio_clip = AudioFileClip(processed_audio_path)
            image_clip = ImageClip(image_path).with_duration(audio_clip.duration)
            video_clip = image_clip.with_audio(audio_clip)
            
            video_clip.write_videofile(output_video, codec="libx264", audio_codec="aac", fps=24)
            print(f"✅ MP4 视频合成完毕,已保存至: {output_video}")
            
            # 清理临时文件
            if processed_audio_path != output_audio and os.path.exists(processed_audio_path):
                os.remove(processed_audio_path)
                
        except Exception as e:
            print(f"❌ MP4 合成失败: {e}")

if __name__ == "__main__":
    TXT_FILE = "test.txt"
    OUTPUT_WAV = "output.wav"
    OUTPUT_MP4 = "output.mp4"
    MODEL_PATH = "../Qwen3-TTS-12Hz-0.6B-CustomVoice"
    BG_IMAGE = "tts.jpg" 
    SPEED = 1.3 
    
    txt_to_speech(TXT_FILE, OUTPUT_WAV, OUTPUT_MP4, MODEL_PATH, BG_IMAGE, speed=SPEED)

转换

bash 复制代码
C:\Users\admin\Desktop>python tts.py

********
Warning: flash-attn is not installed. Will only run the manual PyTorch version. Please install flash-attn for faster inference.
********

正在加载模型: ../Qwen3-TTS-12Hz-0.6B-CustomVoice ...
模型加载完成!
正在合成语音...
Setting `pad_token_id` to `eos_token_id`:2150 for open-end generation.
✅ 原始语音合成完毕,已保存至: output.wav
🎵 正在使用专业算法处理 1.3x 变速不变调...
✅ 音频变速处理完成!
正在合成 MP4 视频...
MoviePy - Building video output.mp4.
MoviePy - Writing audio in outputTEMP_MPY_wvf_snd.mp4
MoviePy - Done.
MoviePy - Writing video output.mp4

MoviePy - Done !
MoviePy - video ready output.mp4
✅ MP4 视频合成完毕,已保存至: output.mp4

输出

文本转视频demo

相关推荐
昇腾知识体系1 小时前
昇腾环境安装 flash_attn:FlashAttnPrefillBackend 报错与替代算子
人工智能·pytorch·华为·知识图谱
棣廷1 小时前
初识深度学习——数据增强与模型保存
人工智能·深度学习
找方案1 小时前
AI+气象预报:华为盘古大模型如何让天气预报精准到街区
人工智能·算法·机器学习
IT_陈寒1 小时前
Vite的HMR怎么突然罢工了?原来是我漏了这个配置
前端·人工智能·后端
狂师1 小时前
最近火爆出圈的,FDE 到底是个什么岗位?
人工智能·程序员·全栈
不要生病了1 小时前
Through Their Eyes:用简单对齐实现跨被试与跨数据集视觉脑解码
人工智能·深度学习
2601_962304251 小时前
AI照片上色新手好上手:怎么调出自然肤色?
人工智能
临床数据科学和人工智能兴趣组1 小时前
399元现在超值!学R语言,订阅我们专栏就够了,包括了所有的内容,不断更新!
人工智能·数据挖掘·r语言·r语言-4.2.1·临床研究
sjh7524229691 小时前
Deepseek Harness的四种模式
人工智能