用python代替批处理脚本调用ffmpeg批量转换文件

需求:把指定文件夹下面的所有MP4文件无损转换为TS文件

用windows批处理脚本也能实现,不过为了学习python,当然要多写多用。

脚本思路很简单: 1.先输入要处理的文件夹 2.读取该文件夹下面的所有文件 3.遍历文件名,检查后缀是不是mp4 4.如果后缀是mp4则调用ffmpeg进行文件转换


调用ffmpeg进行mp4转ts的参数:ffmpeg.exe -v error -y -i file.mp4 -c copy file.ts 其中: -v error       表示只打印错误日志,不加这个ffmpeg会在控制台输出很多日志。 -y               表示如果输出文件已经存在则直接替换,不加这个ffmpeg会询问yes/no,需要手动输入。 -i file.mp4 指定要转换的mp4文件路径 -c copy     表示不进行重编码,仅容器格式转换 file.ts        表示输出TS文件的路径


参考代码如下:

#!python
#批量调用ffmpeg,转换MP4为TS格式
#蒋晓岗<kerndev@foxmail.com>
import os

#设置ffmpeg路径
EXE_PATH="D:\\ANSI\\FFmpeg\\ffmpeg.exe"

#调用ffmpeg
def call_ffmpeg(exe_path, src_path, dst_path):
	cmd_line = '%s -v error -y -i "%s" -c copy "%s"' % (exe_path, src_path, dst_path)
	ret = os.system(cmd_line)
	if ret == 0:
		print("-转换成功.")
		return True
	else:
		print("-转换失败:", ret)
		return False

#转换目录内的所有文件
def process_dir(exe_path, src_dir, dst_dir):
	print("处理目录:", src_dir)
	
	if not os.path.exists(src_dir):
		print("该目录不存在!")
		return

	if not os.path.exists(dst_dir):
		os.mkdir(dst_dir)

	mp4_list = os.listdir(src_dir)
	for file in mp4_list:
		if file.endswith(".mp4"):
			print("+转换文件:", file)
			src_path = src_dir + file
			dst_path = dst_dir + file + ".ts"
			call_ffmpeg(exe_path, src_path, dst_path)
			
	print("处理目录完成.")

#程序入口
src_dir = input("输入目录:") + "\\"
dst_dir = input("输出目录:") + "\\"
process_dir(EXE_PATH, src_dir, dst_dir)

最后,python大法好!