代码实例

from moviepy.editor import VideoFileClip
from moviepy import editor
 
clip = VideoFileClip('video.mp4')
text = '''
红笺小字。
说尽平生意。
鸿雁在云鱼在水。
惆怅此情难寄。
斜阳独倚西楼。
遥山恰对帘钩。
人面不知何处,
绿波依旧东流。
'''
text_clip = editor.TextClip(text, font=r'./font/STKAITI.TTF', fontsize=30, color='blue', bg_color='white', transparent=True)
"""
set_position:設置文字顯示位置【屏幕左上角为(0, 0),右下角为(屏幕宽度, 屏幕高度)】
    1、set_position((800, 500)): 显示在800, 500的位置上
    2、set_position(("center", "center")): 显示在屏幕的正中央
    3、set_position((0.4, 0.6), True): 显示在距离左边百分之40、距离上边百分之60的位置上
set_duration(10): 持续10秒
set_opacity(0.6): 设置透明度为0.6
set_start(5):设置开始显示的时间点
set_end(10):设置结束的时间点
"""
text_clip = text_clip.set_position(("center", "center")).set_duration(20).set_opacity(0.8)
 
video_clip = editor.CompositeVideoClip([clip, text_clip])  # 把文本剪贴板贴在视频上
 
video_clip.write_videofile("demo1.mp4")  # 保存視頻
给视频添加滚动文字(一)

from moviepy.editor import VideoFileClip, vfx
from moviepy import editor
 
demo_video = VideoFileClip('video.mp4')
 
text = '''
红笺小字。
说尽平生意。
鸿雁在云鱼在水。
惆怅此情难寄。
斜阳独倚西楼。
遥山恰对帘钩。
人面不知何处,
绿波依旧东流。
'''
 
text_clip = editor.TextClip(text * 4, font=r'./font/STKAITI.TTF', fontsize=20, color="red").set_position(
    ('center', 0)).set_duration(20).set_opacity(0.8).set_start(5).set_end(25)  # 可以直接使用链式操作
 
w, h = demo_video.size
 
x_speed = x_start = y_start = 0
y_speed = 20
text_clip = text_clip.fx(vfx.scroll, w, h, x_speed, y_speed, x_start, y_start)
 
video_clip = editor.CompositeVideoClip([demo_video, text_clip])
video_clip.write_videofile('demo_video01.mp4')


给视频添加滚动文字(二)

from moviepy.editor import VideoFileClip, TextClip, CompositeVideoClip
 
# 同畫面中合併視頻,視頻顯示位置設置或屏幕中文本字幕顯示位置set_pos('center')、set_pos((45,150)),見http://doc.moviepy.com.cn/index.html#中的剪輯定位
## 1、添加文字
clip = VideoFileClip('video.mp4')
text = '其形也,翩若惊鸿,婉若游龙。\n荣曜秋菊,华茂春松。\n髣髴兮若轻云之蔽月,飘飖兮若流风之回雪。\n远而望之,皎若太阳升朝霞;迫而察之,灼若芙蕖出渌波。\n秾纤得衷,修短合度。肩若削成,腰如约素。\n延颈秀项,皓质呈露。芳泽无加,铅华弗御。\n云髻峨峨,修眉联娟。丹唇外朗,皓齿内鲜,明眸善睐,靥辅承权。\n瑰姿艳逸,仪静体闲。柔情绰态,媚于语言。奇服旷世,骨像应图。\n披罗衣之璀粲兮,珥瑶碧之华琚。戴金翠之首饰,缀明珠以耀躯。\n践远游之文履,曳雾绡之轻裾。微幽兰之芳蔼兮,步踟蹰于山隅。'
 
txt_clip = TextClip(txt=text, fontsize=20, color='red', font=r'./font/STKAITI.TTF')
 
txt_clip = txt_clip.set_pos(lambda t: ('center', -100 + t * 20)).set_duration(25)  # 設置一個隨時間變化自動移動的動態字幕
 
video = CompositeVideoClip([clip, txt_clip])  # 将文本剪辑覆盖在第一个视频剪辑上
 
video.write_videofile('demo2023.mp4')
 

补充(视频属性判断)

clip = VideoFileClip('video.mp4')
 
# 是否作为遮罩使用
print(clip.ismask)  
 
# 帧的构建方法,通过构造方法传入或set_make_frame方法设置,帧的构建方法用于根据时间构建帧,该方法是get_frame获取帧时调用的方法。帧的构建可以从已有剪辑中获取或变换,也可以代码自己填充
print(clip.make_frame)  
 
# 当一个视频帧有遮罩时,使用该属性记录遮罩的剪辑。如果为None,则视频剪辑完全不透明。可以通过add_mask、set_opacity等方法来构建剪辑的遮罩,也可以通过set_mask来将已有的剪辑设置为视频剪辑的遮罩
print(clip.mask)
 
# aspect_ratio属性为剪辑的纵横比,实际上就是剪辑的宽/高。注意该属性为浮点数,只读,通过属性名访问
print(clip.aspect_ratio)