需要下载ffmpeg
import subprocess
import threading
import os
def convert_mkv_to_mp4(input_file, output_file):
# 使用ffmpeg进行转换
command = [
'E:\\ffmpeg\\bin\\ffmpeg',
'-i', input_file,
'-c:v', 'copy', # 复制视频流
'-c:a', 'aac', # 使用AAC编码音频
output_file
]
try:
subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print(f"成功转换: {input_file} -> {output_file}")
except subprocess.CalledProcessError as e:
print(f"转换失败: {input_file} -> {output_file}")
print(e.stderr.decode())
def worker(mkv_file, output_dir):
base_name = os.path.splitext(os.path.basename(mkv_file))[0]
output_file = os.path.join(output_dir, f"{base_name}.mp4")
convert_mkv_to_mp4(mkv_file, output_file)
def convert_multiple_mkv_to_mp4(mkv_files, output_dir, num_threads=5):
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 创建线程列表
threads = []
# 使用for循环和线程锁(如果需要)来创建线程
for i in range(0, len(mkv_files), num_threads):
for mkv_file in mkv_files[i:i + num_threads]:
t = threading.Thread(target=worker, args=(mkv_file, output_dir))
t.start()
threads.append(t)
# 等待所有线程完成
for t in threads:
t.join()
# 示例使用
if __name__ == '__main__':
# 假设你有一个包含mkv文件的目录
input_dir = 'E:\\AI混剪\\mkv'
output_dir = 'E:\\AI混剪\\mp4'
# 获取所有mkv文件
mkv_files = [os.path.join(input_dir, file) for file in os.listdir(input_dir) if file.endswith('.mkv')]
print(mkv_files)
# 并发转换视频
convert_multiple_mkv_to_mp4(mkv_files, output_dir, num_threads=5)