python自动化完成短剧混剪

本文介绍了如何使用Python库moviepy对视频进行剪辑、添加倒序片头和片尾、调整速度、大小以及应用随机特效,最后将多个片段合并成输出视频。
摘要由CSDN通过智能技术生成
#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)

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天傲设计小组

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值