import os import random from moviepy.editor import VideoFileClip, AudioFileClip, CompositeVideoClip def convert_mp3_to_mp4(mp3_directory, output_directory, background_dir, width=1920, height=1280): # 获取所有背景图文件列表 background_files = [os.path.join(background

import os
import random
from moviepy.editor import VideoFileClip, AudioFileClip, CompositeVideoClip

def convert_mp3_to_mp4(mp3_directory, output_directory, background_dir, width=1920, height=1280):
    # 获取所有背景图文件列表
    background_files = [os.path.join(background_dir, f) for f in os.listdir(background_dir) if f.endswith(('.jpg', '.jpeg', '.png'))]

    # 确保输出目录存在
    os.makedirs(output_directory, exist_ok=True)

    # 遍历MP3目录中的所有文件
    for mp3_file in os.listdir(mp3_directory):
        if mp3_file.endswith('.mp3'):
            mp3_path = os.path.join(mp3_directory, mp3_file)

            # 随机选择一个背景图
            background_file = random.choice(background_files)

            # 加载音频文件
            audio_clip = AudioFileClip(mp3_path)

            # 创建一个空白视频剪辑,使用选定的视频尺寸
            blank_clip = VideoFileClip(background_file, audio=False).resize(width=width, height=height)

            # 合并音频和背景视频
            video_clip = CompositeVideoClip([blank_clip.set_audio(audio_clip)])

            # 生成输出文件路径
            output_path = os.path.join(output_directory, f"{os.path.splitext(mp3_file)[0]}.mp4")

            # 写入视频文件
            video_clip.write_videofile(output_path, codec='libx264', audio_codec='aac')

 


# 示例用法
mp3_directory = r'D:\Work_Tools\chinaminjian\txtcn'  # 输入MP3文件所在的目录
output_directory = r'D:\Work_Tools\chinaminjian\txtcnmp4'  # 输出MP4文件的目录
background_dir = r'D:\归档\pexels风景图'  # 包含背景图的目录
convert_mp3_to_mp4(mp3_directory, output_directory, background_dir)
pip install moviepy
import os
import random
from moviepy.editor import VideoFileClip, AudioFileClip, CompositeVideoClip, ImageClip

def convert_mp3_to_mp4(mp3_directory, output_directory, background_dir, width=1920, height=1280, background_change_interval=1):
    # 获取所有背景图文件列表
    background_files = [os.path.join(background_dir, f) for f in os.listdir(background_dir) if f.endswith(('.jpg', '.jpeg', '.PNG'))]

    # 确保输出目录存在
    os.makedirs(output_directory, exist_ok=True)

    # 遍历MP3目录中的所有文件
    for mp3_file in os.listdir(mp3_directory):
        if mp3_file.endswith('.mp3'):
            mp3_path = os.path.join(mp3_directory, mp3_file)

            # 加载音频文件
            audio_clip = AudioFileClip(mp3_path)

            # 创建一个空白视频剪辑,使用选定的视频尺寸
            blank_clip = ImageClip(background_files[0], duration=audio_clip.duration).resize(width=width, height=height)

            # 合并音频和背景视频
            video_clip = CompositeVideoClip([blank_clip.set_audio(audio_clip)])

            # 为每隔一秒更换一张背景图
            for i in range(10, int(audio_clip.duration), background_change_interval):
                current_background = random.choice(background_files)
                current_clip = ImageClip(current_background, duration=min(background_change_interval, audio_clip.duration - i)).resize(width=width, height=height)
                video_clip = CompositeVideoClip([video_clip.set_duration(i), current_clip.set_start(i)])

            # 生成输出文件路径
            output_path = os.path.join(output_directory, f"{os.path.splitext(mp3_file)[0]}.mp4")

            # 写入视频文件
            video_clip.write_videofile(output_path, codec='libx264', audio_codec='aac', fps=24)  # 设置fps为帧数,可根据需要调整




# 示例用法
mp3_directory = r'D:\Work_Tools\chinaminjian\txtcn'  # 输入MP3文件所在的目录
output_directory = r'D:\Work_Tools\chinaminjian\txtcnmp4'  # 输出MP4文件的目录
background_dir = r'D:\Work_Tools\chinaminjian\民间故事图片素材2020102'  # 包含背景图的目录
convert_mp3_to_mp4(mp3_directory, output_directory, background_dir)