本篇内容介绍了“怎么使用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 = 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 h364_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)
“怎么使用Python和EV剪辑短视频”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。