如何用 Python 和 EV 剪辑短视频

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

一、何用和将图片转化成视频

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

import cv2,视频os  import matplotlib.pyplot as plt  from PIL import Image  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//)   #获取文件夹里的列表  for i in range(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帧      for j in range(0,何用和20):          videoWrite.write(img)  videoWrite.release() 

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

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

import cv2  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)  #These are the FOURCCs to compressed formats  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  while rval:      rval, img = cap.read()#逐帧读取原视频      output_viedo.write(img)#写入视频帧  output_viedo.release()  cap.release() 

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

import os  os.system(ffmpeg -i 4.mp4 -vf  "setpts=2*PTS" 8.mp4)  #图像两倍慢速  

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

import subprocess,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 = fD:\\ffmpeg\\bin\\ffmpeg.exe -i "{ mp3_f}" -i "{ mp4_f}"  \ f -acodec copy -vcodec copy "{ n_mp4_f}"  print(com)  os.system(com) 

三、合并视频

1.剪切视频 

import os  import subprocess,cv2  com = fffmpeg -i 5.mp4 -c copy -t 00:00:20.0 output.mp4  # 截取前20秒  -ss 00:00:00.0   起始位置  os.system(com) 

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

import subprocess,os  import cv2  #获取样本的画布大小  video_path = "2\\1.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\\)   #获取文件夹里的所有文件列表  for i in file_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     if h/w>h0/w0:        strn=fffmpeg -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=fffmpeg -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格式,然后再合并,成功率更高。 

import os  lista=kaishiwizhi  #先获取这些MP4文件,源码库转换成ts格式  for each in os.listdir():      if each[-3:] in [mp4,avi] :          os.system(ffmpeg.exe -i %s -c copy -vbsf h264_mp4toannexb %s.ts % (each, each[:-4]))          listalista=lista +(|%s.ts%(each[:-4]))  listalista=lista.replace(kaishiwizhi|,)  import subprocess,cv2  #subprocess.call(cmd, shell=True)  com = fffmpeg -i "concat:%s" -c copy 333333.avi%lista  #com = fmencoder -forceidx -of lavf -oac copy -ovc copy -o output.avinew 2.avi new 2.avi  print(com)  os.system(com)  
滇ICP备2023000592号-31