视频裁剪小工具(批量)
一、代码
import csv
import os
from moviepy.editor import *
import logging
# 错误日志
logger = logging.getLogger() # 实例化一个logger对象
logger.setLevel(logging.INFO) # 设置初始显示级别
file_handle = logging.FileHandler("video_clip错误日志", encoding="UTF-8")
stream_handle = logging.StreamHandler()
fmt = logging.Formatter('%(asctime)s %(filename)s %(levelname)s %(message)s')
file_handle.setFormatter(fmt) # 文件句柄设置格式
logger.addHandler(file_handle) # logger对象绑定文件句柄
# 视频切割
def video_clip(src_path, clip_pts, save_path):
"""
无音频
:param src_path:视频源路径
:param clip_pts:分割点数组
"""
fd_name = src_path.split('\\')[-1][:-4]
print(fd_name)
for i in range(len(clip_pts) - 1):
video = VideoFileClip(src_path)
start_time = clip_pts[i][0]
end_time = clip_pts[i + 1][0]
clip_video = video.subclip(start_time, end_time)
os.path.join(save_path, fd_name)
folder = os.path.join(save_path, fd_name)
if not os.path.exists(folder):
os.makedirs(folder)
save_name = folder + '\\' + clip_pts[i][1] + '-' + clip_pts[i + 1][1] + '.mp4'
clip_video.write_videofile(save_name)
print("分割成功!")
# csv读取
def read_csv(csv_path):
"""
:param csv_path: 读取csv的路径
:return: 每行拼成数组
"""
line_arr = []
with open(csv_path, 'r') as f:
reader = csv.reader(f)
next(reader)
for line in reader:
line_arr.append(line)
return line_arr
# 获取目录下所有csv路径
def get_all_csv(d_path):
"""
:param d_path: 目录路径
:return: 目录下所有csv文件路径
"""
csv_arr = []
file_list = os.listdir(d_path)
for file_name in file_list:
de_path = os.path.join(d_path, file_name)
if os.path.isfile(de_path):
if de_path.endswith(".csv"): # Specify to find the txt file.
csv_arr.append(de_path)
return csv_arr
if __name__ == "__main__":
# 指定video、csv目录(必须包含视频及其对应csv文件)
dir_path = input("请输入video路径(包含.csv): ")
# dir_path = r"C:\Users\GYL\Desktop\视频数字识别\clip\源"
# 指定输出目录
out_path = input("文件输出目录: ")
# out_path = r"C:\Users\GYL\Desktop\视频数字识别\clip\输出"
all_csv_path = get_all_csv(dir_path)
for csv_file in all_csv_path:
video_name = csv_file.split('\\')[-1][:-4] + ".mp4"
video_path = os.path.join(dir_path, video_name)
try:
l_arr = read_csv(csv_file)
video_clip(video_path, l_arr, out_path)
except Exception as e:
logger.info(e)
print("==============已完成,请关闭窗口!=================")
os.system("pause")
二、打包
pyinstall -F [name].py 打包没报错,运行报错:
No module named imageio,no attribute audio-fadein
网友解决方法:
https://blog.csdn.net/weixin_44206902/article/details/106211723还是报错!
最后,直接把moviepy包复制过来,解决了…
三、脚本链接
https://download.csdn.net/download/m0_37970224/16137446