如何使用 Python 和 EV剪辑短视频

当下短视频行业,不论在制作体量、覆盖人群还是播放量上,都可以媲美电视台和视频网站制作的节目,已经成为了内容领域的第三极,本篇文章将使用 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 和 EV 剪辑短视频教程用 Python 和 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 = f'D:\\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 = f'ffmpeg -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=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格式,然后再合并,成功率更高。

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 = f'ffmpeg -i "concat:%s" -c copy 333333.avi'%lista  
#com = f'mencoder -forceidx -of lavf -oac copy -ovc copy -o output.avinew 2.avi new 2.avi'  print(com)  
os.system(com)  

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/221819.html<

(0)
管理的头像管理
上一篇2025-04-15 05:16
下一篇 2025-04-15 05:17

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注