百科狗-知识改变命运!
--

用python和EV剪辑短视频

百变鹏仔1年前 (2023-11-21)阅读数 17#技术干货
文章标签视频

现在小视频非常流行,如何进行高效简便的视频剪辑,是各个up主的必备技能。本文借助python和EV剪辑制作我们所要的视频效果,不仅免费,而且没有广告水印。

用python和EV剪辑短视频

一、将图片转化成视频

通过python的opencv库就可以把图片转成视频,要注意的是把帧率设置成30,方便后续和其他视频拼接,因为帧率不同会导致拼接出错。

importcv2,os  importmatplotlib.pyplotasplt  fromPILimportImage  canshu=0.5 #设置视频分辨率参数  img=Image.open('图一.jpg')  img.save('ddd.jpg')  img=cv2.imread('ddd.jpg')#设置一个图片的大小作为指定大小  imgimgInfo=img.shape  size=(int(imgInfo[1]*canshu),int(imgInfo[0]*canshu))  fourcc=cv2.VideoWriter_fourcc('M','J','P','G')  videoWrite=cv2.VideoWriter('3.avi',fourcc,30,size,True) #参数依次是:文件路径;指定编码器;帧率;画面大小;是彩色还是黑色  file_list=os.listdir('./1//')  #获取文件夹里的列表  foriinrange(0,len(file_list)):    fileName='./1//'+file_list[i]   img=Image.open(fileName)    #根据样本图片调整图片大小    (x00,y00)=img.size    x_s=x00*canshu    y_s=int(y00*x_s/x00)    imgimg=img.resize(size,Image.ANTIALIAS)    img.save('ddd.jpg')    img=cv2.imread('ddd.jpg')#读取图像    #因为是单张图片的时间太短,每一张图片插入20帧    forjinrange(0,20):      videoWrite.write(img)  videoWrite.release() 

但是如果要将图片做一些简单的动画效果,例如做一个画面逐渐缩小的动画,那就要借助EV剪辑,调整图片的大小,加上白背景,然后导出视频。

注意导出的时候要设置帧率,如果时间过长,可以设置设置帧率低一点,然后用python程序把播放速度提升,帧率也会相应提高。

importcv2  vdop="4.mp4"#输入视频路径  cap=cv2.VideoCapture(vdop)  fps=cap.get(cv2.CAP_PROP_FPS)#获取输入视频的帧率 size=(int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),      int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))#获取输入视频的大小  fourcc=cv2.VideoWriter_fourcc('I','4','2','0') #ThesearetheFOURCCstocompressedformats  out_path="8.mp4"#输出2倍速的avi格式的视频路径  output_viedo=cv2.VideoWriter()  fps=(29.5/26.8)*fps#2倍速处理  #isColor:如果该位值为Ture,解码器会进行颜色框架的解码,否则会使用灰度进行颜色架构  output_viedo.open(out_path,fourcc,fps,size,isColor=True)  rval=True  whilerval:    rval,img=cap.read()#逐帧读取原视频    output_viedo.write(img)#写入视频帧  output_viedo.release()  cap.release() 

用opencv处理过的视频会失去音频。我们也可以使用ffmpeg来调速,可以保留声音,特别适合微调。要使用FFmpeg,安装完之后,设置环境变量,就能在python调用FFmpeg。

importos  os.system('ffmpeg-i4.mp4-vf "setpts=2*PTS"8.mp4') #图像两倍慢速  

二、将视频添加音频作为背景音乐

importsubprocess,os  mp4_f='./2.avi'  mp3_f='./背景音.mp3'  n_mp4_n='new'+mp4_f.split('/')[-1] n_mp4_f=mp4_f.replace(mp4_f.split('/')[-1],n_mp4_n)  com=f'D:fmpeginfmpeg.exe-i"{mp3_f}"-i"{mp4_f}"' f'-acodeccopy-vcodeccopy"{n_mp4_f}"'  print(com)  os.system(com) 

三、合并视频

1.剪切视频

importos  importsubprocess,cv2  com=f'ffmpeg-i5.mp4-ccopy-t00:00:20.0output.mp4' #截取前20秒 -ss00:00:00.0  起始位置  os.system(com) 

2.要将不同的视频合并,首先要确保帧率和画布大小一样,这样才能确保合并起来不出错。下面代码是调整画布。将形状不同的视频画面,要按照原视频的比例,调整到一个框里面去。

importsubprocess,os  importcv2  #获取样本的画布大小  video_path="2.mp4"  cap=cv2.VideoCapture(video_path)  frame_width=int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))#获取视频高度  frame_height=int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))#获取视频宽度  fps=cap.get(cv2.CAP_PROP_FPS)#视频平均帧率  h0=frame_height  w0=frame_width  file_list=os.listdir('3')  #获取文件夹里的所有文件列表  foriinfile_list:   #获取当前视频的   video_path='3'+i   cap=cv2.VideoCapture(video_path)   frame_width=int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))  #获取视频高度、宽度   frame_height=int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))   h=frame_height   w=frame_width   ifh/w>h0/w0:     strn=f'ffmpeg-i%s-vf"scale=(%s*%s/%s):%s,pad=%s:%s:(%s-(%s*%s/%s))/2:0:black"%s'% (video_path,w,h0,h,h0,    w0,h0,w0,w,h0,h,i)   else:           strn=f'ffmpeg-i %s-vf"scale=%s:%s*%s/%s,pad=%s:%s:0:((%s-(%s*%s/%s))/2):black" %s'%  (video_path,w0,w0,h,w,    w0,h0,     h0,w0,h,w,i)                 #本图缩放后=宽:高,位置=总宽:总高:水平方向放置的位置:垂直方向放置的位置   os.system(strn) 

3.将视频合并

将视频先转化成ts格式,然后再合并,成功率更高。

importos  lista='kaishiwizhi'  #先获取这些MP4文件,转换成ts格式  foreachinos.listdir():    ifeach[-3:]in['mp4','avi']:      os.system('ffmpeg.exe-i%s-ccopy-vbsfh264_mp4toannexb%s.ts'%(each,each[:-4]))      listalista=lista+('|%s.ts'%(each[:-4]))  listalista=lista.replace('kaishiwizhi|','')  importsubprocess,cv2  #subprocess.call(cmd,shell=True)  com=f'ffmpeg-i"concat:%s"-ccopy333333.avi'%lista  #com=f'mencoder-forceidx-oflavf-oaccopy-ovccopy-ooutput.avinew2.avinew2.avi'  print(com)  os.system(com) 

以上内容为大家介绍了用python和EV剪辑短视频,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:开发教育。http://www.baikegou.com/


鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)