溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么使用Python和EV剪輯短視頻

發(fā)布時(shí)間:2022-01-21 15:38:22 來源:億速云 閱讀:148 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“怎么使用Python和EV剪輯短視頻”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

一、將圖片轉(zhuǎn)化成視頻

通過python的opencv庫就可以把圖片轉(zhuǎn)成視頻,要注意的是把幀率設(shè)置成30,方便后續(xù)和其他視頻拼接,因?yàn)閹什煌瑫?huì)導(dǎo)致拼接出錯(cuò)。

import cv2,os  
import matplotlib.pyplot as plt  
from PIL import Image  
canshu=0.5  #設(shè)置視頻分辨率參數(shù)  img = Image.open('中國票據(jù)發(fā)展報(bào)告.jpg')  
img.save('ddd.jpg')  
img = cv2.imread('ddd.jpg') #設(shè)置一個(gè)圖片的大小作為指定大小  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)  #參數(shù)依次是:文件路徑;指定編碼器;幀率;畫面大??;是彩色還是黑色  file_list = os.listdir('./1//')   #獲取文件夾里的列表  for i in range(0,len(file_list)):  
   fileName ='./1//'+file_list[i]
   img = Image.open(fileName)  
   #根據(jù)樣本圖片調(diào)整圖片大小     (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') #讀取圖像     #因?yàn)槭菃螐垐D片的時(shí)間太短,每一張圖片插入20幀     for j in range(0,20):  
       videoWrite.write(img)  
videoWrite.release()

但是如果要將圖片做一些簡單的動(dòng)畫效果,例如做一個(gè)畫面逐漸縮小的動(dòng)畫,那就要借助EV剪輯,調(diào)整圖片的大小,加上白背景,然后導(dǎo)出視頻。

怎么使用Python和EV剪輯短視頻
用 Python 和 EV 剪輯短視頻教程用 Python 和 EV 剪輯短視頻教程

注意導(dǎo)出的時(shí)候要設(shè)置幀率,如果時(shí)間過長,可以設(shè)置設(shè)置幀率低一點(diǎn),然后用python程序把播放速度提升,幀率也會(huì)相應(yīng)提高。

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,解碼器會(huì)進(jìn)行顏色框架的解碼,否則會(huì)使用灰度進(jìn)行顏色架構(gòu)  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處理過的視頻會(huì)失去音頻。我們也可以使用ffmpeg來調(diào)速,可以保留聲音,特別適合微調(diào)。要使用FFmpeg,安裝完之后,設(shè)置環(huán)境變量,就能在python調(diào)用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.要將不同的視頻合并,首先要確保幀率和畫布大小一樣,這樣才能確保合并起來不出錯(cuò)。下面代碼是調(diào)整畫布。將形狀不同的視頻畫面,要按照原視頻的比例,調(diào)整到一個(gè)框里面去。

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:  
 #獲取當(dāng)前視頻的   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.將視頻合并

將視頻先轉(zhuǎn)化成ts格式,然后再合并,成功率更高。

import os  
lista='kaishiwizhi'  #先獲取這些MP4文件,轉(zhuǎn)換成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剪輯短視頻”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI