用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大法好!