您好,登錄后才能下訂單哦!
本篇內容介紹了“怎么使用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剪輯短視頻”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。