import cv2
import numpy as np
import os
# 设置视频参数
fps = 30
size = (1080, 1920)
# 加载图片
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')
img3 = cv2.imread('image3.jpg')
img4 = cv2.imread('image4.jpg')
img5 = cv2.imread('image5.jpg')
# 创建视频写入对象
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
video_writer = cv2.VideoWriter('output.mp4', fourcc, fps, size)
# 添加转场特效
transition_frames = int(fps * 1.5)
transition_kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
for i in range(transition_frames):
alpha = i / transition_frames
beta = 1 - alpha
img1_transition = cv2.morphologyEx(img1, cv2.MORPH_OPEN, transition_kernel)
img2_transition = cv2.morphologyEx(img2, cv2.MORPH_OPEN, transition_kernel)
img_transition = cv2.addWeighted(img1_transition, beta, img2_transition, alpha, 0)
video_writer.write(img_transition)
# 添加图片1
for i in range(fps * 5):
video_writer.write(img1)
# 添加转场特效
for i in range(transition_frames):
alpha = i / transition_frames
beta = 1 - alpha
img2_transition = cv2.morphologyEx(img2, cv2.MORPH_OPEN, transition_kernel)
img3_transition = cv2.morphologyEx(img3, cv2.MORPH_OPEN, transition_kernel)
img_transition = cv2.addWeighted(img2_transition, beta, img3_transition, alpha, 0)
video_writer.write(img_transition)
# 添加图片2
for i in range(fps * 5):
video_writer.write(img2)
# 添加转场特效
for i in range(transition_frames):
alpha = i / transition_frames
beta = 1 - alpha
img3_transition = cv2.morphologyEx(img3, cv2.MORPH_OPEN, transition_kernel)
img4_transition = cv2.morphologyEx(img4, cv2.MORPH_OPEN, transition_kernel)
img_transition = cv2.addWeighted(img3_transition, beta, img4_transition, alpha, 0)
video_writer.write(img_transition)
# 添加图片3
for i in range(fps * 5):
video_writer.write(img3)
# 添加转场特效
for i in range(transition_frames):
alpha = i / transition_frames
beta = 1 - alpha
img4_transition = cv2.morphologyEx(img4, cv2.MORPH_OPEN, transition_kernel)
img5_transition = cv2.morphologyEx(img5, cv2.MORPH_OPEN, transition_kernel)
img_transition = cv2.addWeighted(img4_transition, beta, img5_transition, alpha, 0)
video_writer.write(img_transition)
# 添加图片4
for i in range(fps * 5):
video_writer.write(img4)
# 添加转场特效
for i in range(transition_frames):
alpha = i / transition_frames
beta = 1 - alpha
img5_transition = cv2.morphologyEx(img5, cv2.MORPH_OPEN, transition_kernel)
img1_transition = cv2.morphologyEx(img1, cv2.MORPH_OPEN, transition_kernel)
img_transition = cv2.addWeighted(img5_transition, beta, img1_transition, alpha, 0)
video_writer.write(img_transition)
# 添加图片5
for i in range(fps * 5):
video_writer.write(img5)
# 释放资源
video_writer.release()
# 添加背景音乐
os.system('ffmpeg -i output.mp4 -i music.mp3 -c:v copy -c:a aac -strict experimental -map 0:v:0 -map 1:a:0 -shortest final.mp4')
# 删除中间文件
os.remove('output.mp4')
代码使用了OpenCV库来处理图片和视频,需要先安装该库。同时,需要将图片和音乐文件放在代码所在的目录下,并将文件名修改为image1.jpg
、image2.jpg
、image3.jpg
、image4.jpg
、image5.jpg
和music.mp3
。最终生成的视频文件为final.mp4
。