起因
最近一直在b站上投稿喜羊羊与灰太狼的视频,但是苦于需要手动裁剪视频的片头和片尾,裁剪的多了就发现喜羊羊与灰太狼的视频片头几乎都是1分25秒结束,也就是持续85秒,片尾也差不多是持续1分02秒差不多也就是62秒,于是开始思考有没有什么方法可以替代人类进行自动化批量裁剪?
思路发展迭代与确定
一开始是想使用Premier里面的预设来做的,结果发现Premier里面高版本的导出变成了各种网站的标准,相比于剪映的自定义帧率和清晰度来说,太不方便了,于是遂放弃。
之后想着要不要搞一个宏,但是又觉得搞宏跟搞预设是一个道理,于是遂打消念头。
后来询问了豆包AI和一些搜索引擎,发现有个ffmpeg的命令行软件很厉害,可以实现对视频的各种操作,并且支持批量化操作,但是就在这时,豆包还给了我一个思路,那就是用Python去写代码,Python可以直接调用moivepy库进行操作,这么一听我瞬间就来了兴趣。于是索性开始学习这个库的使用,后来编写出来代码并跑了跑,发现真是非常好用,Python真厉害!
编写代码
说干就干,代码编写之后如下:
from moviepy import *
import os
def get_video_files(directory):
video_extensions = ['.mp4', '.avi', '.mov', '.mkv'] # 可以添加更多的视频文件格式
video_files = []
for root, dirs, files in os.walk(directory):
for file in files:
if any(file.endswith(ext) for ext in video_extensions):
video_files.append(os.path.join(root, file))
return video_files
def crop_videos(video_files):
for video_file in video_files:
try:
clipMaterial = VideoFileClip("C:\\Users\\22576\\Desktop\\喜洋洋素材结尾.mp4")
# print(clipMaterial.duration)
clip = VideoFileClip(video_file)
duration = clip.duration # 获取视频的总时长
# 裁剪前 1 分钟和后 1 分钟
cropped_clip = clip.subclipped(81, duration - 67)
# 保存裁剪后的视频,这里添加一个后缀,比如 "_cropped" 表示这是裁剪后的视频
output_file = video_file.replace('.', '_cropped.')
final_clip = concatenate_videoclips([cropped_clip, clipMaterial])
final_clip.write_videofile(output_file)
# cropped_clip.write_videofile(output_file)`
clip.close() # 释放资源
except Exception as e:
print(f"Error processing {video_file}: {e}")
if __name__ == "__main__":
directory = "D:\\XiYangYang\\10615" # 替换为你的视频所在的目录
video_files = get_video_files(directory)
crop_videos(video_files)