from PIL import Image
from moviepy.editor import *from configs.settings import PROJECT_PATHdef movie_add_image(video_config, type, video_path, out_path):# 加載視頻文件video = VideoFileClip(video_path)all_time = 0for config in video_config:image = config.get('top_image')time = config.get('time')if image:# 打開圖片img = Image.open(f'{PROJECT_PATH}/src/{type}/{image}')new_img = img.resize((200, 300))new_img.save(f'{PROJECT_PATH}/src/{type}/tmp_{image}')# 添加圖片image_clip = ImageClip(f'{PROJECT_PATH}/src/{type}/tmp_{image}')image_clip = image_clip.set_position("center").set_start(all_time).set_duration(time)# 將文字和音樂添加到視頻中video = CompositeVideoClip([video, image_clip])all_time += time# 導出視頻video.write_videofile(out_path, codec='mpeg4', audio_codec='aac')
[{'subtitle': '盼望著,盼望著,東風來了,春天的腳步近了。', 'image': '1.png', 'time': 3}, {'subtitle': '一切都像剛睡醒的樣子,欣欣然張開了眼。', 'image': '1.png', 'time': 3}, {'subtitle': '山朗潤起來了,水漲起來了,太陽的臉紅起來了。', 'image': '1.png', 'time': 3}, {'subtitle': '不好意思打斷下,先來介紹下最新的顯卡排名。', 'image': '1.png', 'top_image': '9.png', 'time': 4}, {'subtitle': 'xxxxxxx第一名。', 'image': '1.png', 'top_image': '9.png', 'time': 2}, {'subtitle': 'xxxxxxx第2名。', 'image': '2.png', 'top_image': '9.png', 'time': 3}, {'subtitle': 'xxxxxxx第3名。', 'image': '2.png', 'top_image': '9.png', 'time': 3}, {'subtitle': 'xxxxxxx第4名。', 'image': '2.png', 'top_image': '9.png', 'time': 2}, {'subtitle': 'xxxxxxx第5名。', 'image': '2.png', 'top_image': '9.png', 'time': 3}, {'subtitle': '園子里,田野里,瞧去,一大片一大片滿是的。', 'image': '2.png', 'time': 3}, {'subtitle': '坐著,躺著,打兩個滾,踢幾腳球,', 'image': '2.png', 'time': 3}, {'subtitle': '賽幾趟跑,捉幾回迷藏。風輕悄悄的,草軟綿綿的。', 'image': '2.png', 'time': 4}, {'subtitle': '桃樹、杏樹、梨樹,你不讓我,我不讓你,都開滿了花趕趟兒。', 'image': '3.png', 'time': 5}, {'subtitle': '紅的像火,粉的像霞,白的像雪。', 'image': '3.png', 'time': 2}, {'subtitle': '花里帶著甜味兒,閉了眼,樹上仿佛已經滿是桃兒、杏兒、梨兒。', 'image': '3.png', 'time': 5}, {'subtitle': '花下成千成百的蜜蜂嗡嗡地鬧著,大小的蝴蝶飛來飛去。', 'image': '3.png', 'time': 4}, {'subtitle': '野花遍地是:雜樣兒,有名字的,沒名字的,', 'image': '3.png', 'time': 3}, {'subtitle': '散在花叢里,像眼睛,像星星,還眨呀眨的。', 'image': '3.png', 'time': 3}, {'subtitle': '“吹面不寒楊柳風”,不錯的,像母親的手撫摸著你。', 'image': '4.png', 'time': 4}, {'subtitle': '風里帶來些新翻的泥土的氣息,混著青草味兒,', 'image': '4.png', 'time': 3}, {'subtitle': '還有各種花的香,都在微微潤濕的空氣里醞釀。', 'image': '4.png', 'time': 3}, {'subtitle': '鳥兒將巢安在繁花嫩葉當中,高興起來了,', 'image': '4.png', 'time': 3}, {'subtitle': '呼朋引伴地賣弄清脆的喉嚨,唱出宛轉的曲子,', 'image': '4.png', 'time': 3}, {'subtitle': '跟輕風流水應和著。牛背上牧童的短笛,', 'image': '4.png', 'time': 3}, {'subtitle': '這時候也成天在嘹亮地響著。', 'image': '4.png', 'time': 2}, {'subtitle': '雨是最尋常的,一下就是三兩天。可別惱。', 'image': '5.png', 'time': 4}, {'subtitle': '看,像牛毛,像花針,像細絲,密密地斜織著,', 'image': '5.png', 'time': 3}, {'subtitle': '人家屋頂上全籠著一層薄煙。樹葉兒卻綠得發亮,', 'image': '5.png', 'time': 4}, {'subtitle': '小草也青得逼你的眼。傍晚時候,上燈了,', 'image': '5.png', 'time': 3}, {'subtitle': '一點點黃暈的光,烘托出一片這安靜而和平的夜。', 'image': '5.png', 'time': 4}, {'subtitle': '在鄉下,小路上,石橋邊,有撐起傘慢慢走著的人;', 'image': '6.png', 'time': 4}, {'subtitle': '還有地里工作的農民,披著蓑戴著笠。他們的草屋,', 'image': '6.png', 'time': 3}, {'subtitle': '稀稀疏疏的,在雨里靜默著。', 'image': '6.png', 'time': 2}, {'subtitle': '天上風箏漸漸多了,地上孩子也多了。', 'image': '7.png', 'time': 3}, {'subtitle': '城里鄉下,家家戶戶,老老小小,', 'image': '7.png', 'time': 2}, {'subtitle': '也趕趟兒似的,一個個都出來了。', 'image': '7.png', 'time': 3}, {'subtitle': '舒活舒活筋骨,抖擻抖擻精神,', 'image': '7.png', 'time': 2}, {'subtitle': '各做各的一份兒事去,“一年之計在于春”;', 'image': '7.png', 'time': 3}, {'subtitle': '剛起頭兒,有的是工夫,有的是希望。', 'image': '7.png', 'time': 2}, {'subtitle': '春天像剛落地的娃娃,從頭到腳都是新的,它生長著。', 'image': '8.png', 'time': 4}, {'subtitle': '春天像小姑娘,花枝招展的,笑著,走著。', 'image': '8.png', 'time': 3}, {'subtitle': '春天像健壯的青年,有鐵一般的胳膊和腰腳,他領著我們上前去。', 'image': '8.png', 'time': 5}]
1.通過VideoFileClip加載需要處理的視頻
2.通過Image類,來修改圖片的尺寸到指定大小
3.通過ImageClip來加載需要添加的圖片
可以設置圖片的顯示位置set_position
開始顯示時間set_start
停留時間set_duration
4.通過CompositeVideoClip類,來合并視頻和圖片