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.")