#coding:utf-8
from moviepy.editor import *
import random
videopath=r"D:/video/input/"
start_video="1.mp4"
second_video="2.mp4"
end_video="3.mp4"
end_img="E:/BaiduSyncdisk/短剧自动化/images/片尾/观看完整版.png"
end_mp3="E:/BaiduSyncdisk/短剧自动化/mp3/片尾/end.mp3"
bg_mp3 = "古风--仙侠177_爱给网_aigei_com.mp3"
output_file="output1.mp4"
main_img="片中.png"
#创建倒序片头
def create_film_start(video,start_duration=10,title="",color=(0,0,0),size=(1000, 200), bgcolor=(255,255,0), duration=3, fps=25):
video=video.subclip(video.duration-start_duration, video.duration-1)
title_video=ColorClip(size, bgcolor, duration=duration)
txt_clip = TextClip(title, fontsize=80, color='#000000',font='D:/video/AlibabaPuHuiTi-3-65-Medium.ttf')
txt_clip = txt_clip.set_pos('center').set_duration(duration)
title_video= CompositeVideoClip([title_video, txt_clip]).set_pos('center')
return CompositeVideoClip([video,title_video])
# 制作片尾
def create_film_stop(end_video_clip):
end_video_clip_end = end_video_clip.subclip(end_video_clip.duration-4,end_video_clip.duration)
end_video_clip_main = end_video_clip.subclip(1.5, end_video_clip.duration-4)
end_imgclip = (ImageClip(end_img)
# 水印持续时间
.set_duration(end_video_clip_end.duration)
.resize(width=1080).set_pos(('center', 'center')))
end_video_clip_end = CompositeVideoClip([end_video_clip_end, end_imgclip])
end_audio = AudioFileClip(end_mp3).volumex(0.9)
# end_audio = afx.audio_loop( end_audio, duration=end_video_clip_end.duration)
mix_audio = CompositeAudioClip([end_video_clip_end.audio.volumex(0.5), end_audio])
end_video_clip_end = end_video_clip_end.set_audio(mix_audio) # 給視頻文件設置新的音頻
end_video_clip=concatenate_videoclips([end_video_clip_main,end_video_clip_end])
return end_video_clip;
#变速处理
def video_speedx_random(video_clip,minspeedx=10,maxspeedx=15):
return video_clip.speedx(random.randint(minspeedx, maxspeedx)/10)
#区域放大处理
def video_changesize_random(video_clip,minx=1,maxx=10,miny=1,maxy=10):
if(minx<0):
minx=0
if(maxx<0):
minx=0
if(maxx>50):
maxx=50
if(maxy>50):
maxy=50
x1=(random.randint(minx, maxx)/100)*1080
y1=(random.randint(miny, maxy)/100)*1920
x2=1080-(random.randint(minx, maxx)/100)*1080
y2=1920-(random.randint(miny, maxy)/100)*1920
return video_clip.crop(x1=x1,y1=y1,x2=x2,y2=y2).resize([1080,1920])
# 特效处理
def commontool(video_clip):
return video_speedx_random(video_changesize_random(video_clip))
start_video_clip = VideoFileClip(videopath+start_video)
second_video_clip = VideoFileClip(videopath+second_video)
end_video_clip = VideoFileClip(videopath+end_video)
start_video_clip=start_video_clip.subclip(1,start_video_clip.duration-1)
second_video_clip=second_video_clip.subclip(1,second_video_clip.duration-1)
end_video_clip=end_video_clip.subclip(1,end_video_clip.duration-1)
# start_video_clip=start_video_clip.subclip(10,20)
# second_video_clip=second_video_clip.subclip(10,20)
# end_video_clip=end_video_clip.subclip(10,20)
mainvideo=concatenate_videoclips([start_video_clip,second_video_clip,end_video_clip])
title_video=create_film_start(video=start_video_clip,start_duration=10,title="史上最强王妃1")
L = []
L.append(title_video)
persize=5
for i in range(0,int(mainvideo.duration/persize)):
L.append(commontool(mainvideo.subclip(i*persize, i*persize+persize)))
video=concatenate_videoclips(L)
video=create_film_stop(video)
video.write_videofile(videopath+"output.mp4", fps=25)
python自动化完成短剧混剪
最新推荐文章于 2025-03-12 00:36:27 发布