做bad apple第二步: python如何將視頻變成一幀幀的圖片,如何將一幀幀的圖片轉為視頻


直接上代碼

"""視頻轉圖片"""
port cv2
def getphoto(video_in, video_save):
cap = cv2.VideoCapture(video_in) # 打開視頻文件
n_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) # 視頻的幀數
fps = cap.get(cv2.CAP_PROP_FPS) # 視頻的幀率
dur = n_frames / fps # 視頻的時間
num_frame = 0
judge = cap.isOpened()
while judge:
flag, frame = cap.read() # flag是讀取狀態,frame下一幀
cv2.imshow('video', frame) # capture
if cv2.waitKey(0) == 27:
break
if flag:
num_frame += 1
# print("正在保存第%d張照片" % num_frame)
# cv2.imwrite('a\\' + str(num_frame) + '.jpg', frame) # cv2.imwrite(‘路徑’ + ‘名字’ + ‘后綴, 要存的幀)
# cv2.waitKey(1)
# # new_path = str(num_frame) + '.jpg'
# # cv2.imencode('.jpg', frame)[1].tofile(new_path)
else:
break

print("視頻時長: %d " % dur)
print("視頻共有幀數: %d 保存幀數為: %d" % (n_frames, num_frame))
print("每秒的幀數(FPS): %.1lf" % fps)

def main():
video_in = 'apple.flv'
video_save = '2th'
getphoto(video_in, video_save)


if __name__ == '__main__':
main()

"""圖片轉視頻"""
import cv2
import os

def getvideo(photo_path, video_name, fps):
filelist = os.listdir(photo_path)
size = (1440, 1080)
video = cv2.VideoWriter(video_name, cv2.VideoWriter_fourcc('I', '4', '2', '0'), fps, size)
num = int(0)
for item in filelist:
# print(item)
num += 1
print('轉化到%d' % num)
if item.endswith('.jpg'):
item = photo_path + item
img = cv2.imread(item)
video.write(img)
video.release()
cv2.destroyAllWindows()

def main():
photo_path = 'E:\\try apple\\aa\\'
video_name = 'new.avi'
fps = 30
getvideo(photo_path, video_name, fps)

if __name__ == '__main__':
main()
 
        

我想說的惡心的地方是:圖片轉視頻時,一定不要把圖片的像素大小弄錯,我為此白白從凌晨到凌晨2點找bug,各種百度。

還有就是 filelist = os.listdir(photo_path) 這個東西輸出后發現不是按照文件名的字典序,像是個二維數組,但是奇怪的是明明不是順序讀取圖片的,但是合成后的視頻竟然是正確的。但是如果你的圖片種有一些一樣的圖片,合成的視頻就會總是閃你那個一樣的圖片。

我試了下500張圖片,錢50張是開場全是黑屏,合成的視頻沒有開場,但是總是閃黑屏,把這50張照片刪了之后就好了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM