#encoding=utf-8
'''
pic合成movie
'''
import os
import imageio
from PIL import Image
#encoding=utf-8
import os
import logging
import datetime
logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(name)s -%(levelname)s -%(message)s')
log = logging.getLogger(__name__)
class FileOprate():
def __init__(self,obsfn,fp,fn,create_time,update_time,access_time,file_size):
self.obsfn = obsfn
self.fp = fp
self.fn = fn
self.create_time = create_time
self.update_time = update_time
self.access_time = access_time
self.file_size = file_size
def time2str(time):
return str(datetime.datetime.fromtimestamp(time)).split('.')[0]
def getAllFiles(folder):
fo_list = []
for root,folder_names,file_names in os.walk(folder):
for file_name in file_names:
file_path = root + os.sep + file_name
file_stat = os.stat(file_path)
ct = file_stat.st_ctime
ut = file_stat.st_mtime
at = file_stat.st_atime
fs = os.path.getsize(file_path)
fo = FileOprate(file_path,root,file_name,ct,ut,at,fs)
fo_list.append(fo)
return fo_list
def suo_tu2(path,save_path,width=224,height=224):
raw_files = os.walk(path)
for root,dirs,files in raw_files:
log.info("遍历图片信息:{}".format(root))
for file in files:
pic_path = os.path.join(root,file)
pic_org = Image.open(pic_path)
#pic_new = pic_org.resize((width,height),Image.ANTIALIAS)
pic_new = pic_org.resize((width,height),)
_, sub_folder = os.path.split(root) #得到子文件夹的名字
pic_new_path = os.path.join(save_path,sub_folder)
if not os.path.exists(pic_new_path):
os.makedirs(pic_new_path)
pic_new_path = os.path.join(pic_new_path,file)
#pic_new_path = os.path.join(save_path,file)
log.info("pic_new_path:{},pic_new:{}".format(pic_new_path,pic_new.__dict__))
pic_new.save(pic_new_path)
'''
将图片合成视频
'''
from pathlib import Path
from moviepy.editor import ImageSequenceClip
def image2Movie(src_folder,distFile):
# src_folder: 来源文件夹的路径
file_list = list(Path(src_folder).glob('*.jpg'))
duration_list = [1] * len(file_list) #设置每张图片在视频中显示的时长
new_video = ImageSequenceClip(src_folder,durations=duration_list)
new_video.write_videofile(distFile,fps=5)
def test():
#获取D:\temp\pic下的所有图片
src_folder = r'D:\temp\pic\srcPic'
save_path = r'D:\tmp\pic\20230605'
distFile = r'D:\tmp\pic\20230605.mp4'
suo_tu2(src_folder,save_path,640,640)
#image2Movie(save_path,distFile)
import cv2
import os
import moviepy.editor as mov
def image_to_video(image_path,media_path):
image_names = os.listdir(image_path)
#对提取的图片名称进行排序
image_names.sort(key=lambda n: int(n[:-4]))
#设置写入格式
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
#设置每秒帧数
fps = 1
#读取第一个图片大小尺寸,因为需要转换成视频的图片大小尺寸是一样的
image = Image.open(image_path + os.sep + image_names[0])
#初始化媒体写入对象
media_writer = cv2.VideoWriter(media_path,fourcc,fps,image.size)
#遍历图片,将每张图片加入视频当中
for i in range(3):
for image_name in image_names:
im = cv2.imread(os.path.join(image_path,image_name))
media_writer.write(im)
log.info("{}合并完成!".format(image_name))
#释放媒体写入对象
media_writer.release()
log.info("无声视频写入完成!")
# 给视频配置音乐
def set_music():
#合成视频设置背景音乐函数
log.info("开始添加背景音乐!")
#初始化视频文件对象
clip = mov.VideoFileClip(r'D:\tmp\pic\20230605.mp4')
#从某个视频中提取一段背景音乐
audio = mov.AudioFileClip(r'D:\tmp\pic\taohuanuo.mp3').subclip(30,90)
#将背景音乐写入.mp3文件
audio.write_audiofile(r'D:\tmp\pic\taohuanuo2.mp3')
# 想合成好的无声视频中添加音乐
clip = clip.set_audio(audio)
#保存视频
clip.write_videofile('D:\tmp\pic\20230605-2.mp4')
log.info("背景音乐添加完成!")
from moviepy import *
from moviepy.editor import *
# mp3与mp4合并
def mp3_merge_mp4(mp3,mp4,newmp4):
#提取音频
audio = AudioFileClip(mp3)
#读取视频
video = VideoFileClip(mp4)
#将音频合并到视频中
video = video.set_audio(audio)
#输出
video.write_videofile(newmp4)
# 给视频添加标题字幕
from moviepy.editor import VideoFileClip, TextClip, CompositeVideoClip
def make_title_text():
video_clip = VideoFileClip(r'D:\tmp\pic\20230605-2.mp4') # 读取视频
text = TextClip(txt='商洛*望江楼', font='FZBangSXJW.ttf',fontsize=120,color='RED',kerning=10)
text = text.set_position('center')
text = text.set_duration(1)
new_video = CompositeVideoClip([video_clip, text])
new_video.write_videofile(r'D:\tmp\pic\20230605-3.mp4')
if __name__=='__main__':
#test()
'''
image_path = r'D:\temp\pic\srcPic'
media_path = r'D:\tmp\pic\20230605.mp4'
image_to_video(image_path,media_path)
'''
#set_music()
'''
mp3 = r'D:\tmp\pic\taohuanuo2.mp3'
mp4 = r'D:\tmp\pic\20230605.mp4'
newmp4 = r'D:\tmp\pic\20230605-2.mp4'
mp3_merge_mp4(mp3,mp4,newmp4)
'''
make_title_text()