Share

只需要一张照片和音频,即可生成会说话唱歌的AI视频 sadtalker

import os
import shutil
import subprocess
import time

# 设置wav、jpg、result和mp4文件的目录
wav_dir = 'D:\\Work\\temp\\wav'
jpg_dir = 'D:\\Work\\temp\\jpg'
result_dir = 'D:\\Work\\temp\\sadtalker'
mp4_dir = 'D:\\Work\\temp\\mp4'

# 确保mp4目录存在
if not os.path.exists(mp4_dir):
    os.makedirs(mp4_dir)

# 获取wav和jpg目录中的文件列表
wav_files = [f for f in os.listdir(wav_dir) if f.endswith('.mp3')]
jpg_files = [f for f in os.listdir(jpg_dir) if f.endswith('.png')]

# 初始化一个计数器来跟踪当前使用的jpg文件索引
jpg_index = 0

# 遍历wav文件列表
for wav_file in wav_files:
    # 计算当前要使用的jpg文件名
    jpg_file = jpg_files[jpg_index % len(jpg_files)]
    jpg_full_path = os.path.join(jpg_dir, jpg_file)

    # 构建命令行参数
    cmd = [
        'python', 'inference.py',
        '--driven_audio', os.path.join(wav_dir, wav_file),
        '--source_image', jpg_full_path,
        '--result_dir', result_dir,
        '--still',
        '--preprocess', 'crop',
        '--enhancer', 'gfpgan'
    ]
    
    # 执行命令
    subprocess.run(cmd)
    
    # 等待60秒
    time.sleep(60)

    # 复制mp4文件到mp4目录
    for mp4_file in os.listdir(result_dir):
        if mp4_file.endswith('.mp4'):
            shutil.copy(os.path.join(result_dir, mp4_file), mp4_dir)

    # 删除result_dir目录下除.mp4文件外的其他文件
    for file in os.listdir(result_dir):
        if not file.endswith('.mp4'):
            os.remove(os.path.join(result_dir, file))

    # 标记wav文件已使用
    wav_used = wav_file.replace('.mp3', '_used.mp3')
    os.rename(os.path.join(wav_dir, wav_file), os.path.join(wav_dir, wav_used))
    
    # 更新jpg文件索引
    jpg_index += 1

print("Processing complete.")

https://www.freedidi.com/12112.html

这是一段文字

import os
import shutil
import subprocess
import time

# 设置wav、jpg、result和mp4文件的目录
wav_dir = 'D:\\Work\\temp\\wav'
jpg_dir = 'D:\\Work\\temp\\pnghjl'
result_dir = 'D:\\Work\\temp\\sadtalker'
mp4_dir = 'D:\\Work\\temp\\MP4'

# 确保mp4目录存在
if not os.path.exists(mp4_dir):
    os.makedirs(mp4_dir)

# 获取wav和jpg目录中的文件列表
wav_files = [f for f in os.listdir(wav_dir) if f.endswith('.wav')]
jpg_files = [f for f in os.listdir(jpg_dir) if f.endswith('.png')]

# 初始化一个计数器来跟踪当前使用的jpg文件索引
jpg_index = 0

# 遍历wav文件列表
for wav_file in wav_files:
    wav_full_path = os.path.join(wav_dir, wav_file)
    wav_base_name = os.path.splitext(wav_file)[0]  # 获取wav文件的基本名称,不含扩展名

    # 计算当前要使用的jpg文件名
    jpg_file = jpg_files[jpg_index % len(jpg_files)]
    jpg_full_path = os.path.join(jpg_dir, jpg_file)

    # 构建命令行参数
    cmd = [
        'python', 'inference.py',
        '--driven_audio', wav_full_path,
        '--source_image', jpg_full_path,
        '--result_dir', result_dir,
        '--still',
        '--preprocess', 'extfull',
        '--enhancer', 'gfpgan'
    ]
    
    # 执行命令,并添加错误处理
    try:
        subprocess.run(cmd, check=True)
    except subprocess.CalledProcessError as e:
        print(f"An error occurred while processing {wav_file}: {e}")
        continue  # 跳过当前wav文件,继续处理下一个

    # 等待直到结果目录中有mp4文件生成
    while True:
        time.sleep(10)  # 每10秒检查一次
        result_files = os.listdir(result_dir)
        if any(mp4_file.endswith('.mp4') for mp4_file in result_files):
            break

    # 复制mp4文件到mp4目录,并确保文件名与wav文件相同
    for mp4_file in result_files:
        if mp4_file.endswith('.mp4'):
            shutil.move(
                os.path.join(result_dir, mp4_file),
                os.path.join(mp4_dir, f"{wav_base_name}.mp4")
            )

    # 删除result_dir目录下除.mp4文件外的其他文件
    for file in os.listdir(result_dir):
        if not file.endswith('.mp4'):
            os.remove(os.path.join(result_dir, file))

    # 标记wav文件已使用
    wav_used = wav_file.replace('.wav', '_used.wav')
    os.rename(wav_full_path, os.path.join(wav_dir, wav_used))
    
    # 更新jpg文件索引
    jpg_index += 1

print("Processing complete.")