文本转视频

继续前面一个实例,给转换后的文本配上一张图片,形成mp4视频文件

文本文件内容

bash 复制代码
近日网络上一条网友的发言意外走红,相关观点迅速在数码和汽车圈层扩散,也随之引发了大范围的公众争议。

Python代码

bash 复制代码
# 导入 PyTorch 深度学习框架,用于模型加载和指定运行设备(如 GPU)
import torch
# 导入 soundfile 库,用于将生成的音频数据保存为 WAV 等音频文件
import soundfile as sf
# 从 qwen_tts 库中导入 Qwen3TTSModel 类,这是核心的语音合成模型
from qwen_tts import Qwen3TTSModel
# 导入 moviepy 用于音视频合成
from moviepy import ImageClip, AudioFileClip

def txt_to_speech(txt_path, output_audio, output_video, model_path, image_path=None):
    """
    将文本文件转换为语音并保存为音频文件,可选合成 MP4 视频。
    """
    # 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="用温柔、专业的语气朗读。"
    )

    # 4. 保存音频文件 (WAV)
    sf.write(output_audio, wavs[0], sr)
    print(f"✅ 语音合成完毕,已保存至: {output_audio}")

    # 5. 如果提供了背景图片,则合成 MP4 视频
    if image_path:
        print("正在合成 MP4 视频...")
        try:
            audio_clip = AudioFileClip(output_audio)
            image_clip = ImageClip(image_path).with_duration(audio_clip.duration)
            video_clip = image_clip.with_audio(audio_clip)
            
            # ✅ 加上 fps=24 即可解决报错
            video_clip.write_videofile(output_video, codec="libx264", audio_codec="aac", fps=24)
            print(f"✅ MP4 视频合成完毕,已保存至: {output_video}")
        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"
    
    # 提供一张背景图片的路径(如 jpg 或 png)
    BG_IMAGE = "tts.jpg" 
    
    txt_to_speech(TXT_FILE, OUTPUT_WAV, OUTPUT_MP4, MODEL_PATH, BG_IMAGE)

转换

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
正在合成 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

转换结果

output

依赖

bash 复制代码
pip install torch transformers qwen_tts soundfile moviepy imageio-ffmpeg
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
相关推荐
企业数字化笔记4 小时前
视频目标跟踪怎么选?SORT、DeepSORT、ByteTrack 的连续性、遮挡与计算成本对比
人工智能·目标跟踪·音视频
zhizhizhuzhuxia8 小时前
情感解说短视频的配音选型:从工程视角看情感音色与批量出片
人工智能·音视频
AOI小白新手上路12 小时前
RainMamba 视频去雨复现实录:从 AutoDL 开机到 PSNR 出分
音视频
feasibility.12 小时前
BeefTV:数据留在本地的 AI 视频工作台,和 ComfyUI 分工不同
人工智能·音视频
可乐鸡翅yeah_12 小时前
AES‑128 加密 M3U8,IV 初始化向量新手容易踩坑
前端·网络·数据库·ffmpeg·音视频·m3u8在线
勤劳X码农14 小时前
2026年AI配音做职场视频怎么选?
人工智能·音视频
勤劳X码农19 小时前
2026年AI配音做教育视频怎么选?
人工智能·游戏·音视频
youdexiang1 天前
iOS版本语音转文字工具:音频识别原理
音视频
实心儿儿1 天前
Qt — 音视频文件
qt·音视频
勤劳X码农2 天前
2026年电商视频AI配音软件怎么选?
人工智能·音视频