python+moviepy音视频处理(二):视频添加文字(字幕)、视频添加汉字不显示问题

目录

添加文字报错处理

中文不显示处理

代码实例

给视频添加滚动文字


添加文字报错处理

报错内容:OSError: MoviePy Error: creation of None failed because of the following error:
[WinError 2] 系统找不到指定的文件。.
.This error can be due to the fact that ImageMagick is not installed on your computer, or (for Windows users) that you didn't specify the path to the ImageMagick binary in file conf.py, or that the path you specified is incorrect.

报错原因:moviepy处理视频使用的是 ffmpeg,生成文字使用的是 ImageMagick。Windows系统在执行 editor.TextClip() 的时候,会报出如上错误,原因是由于电脑上缺少ImageMagick造成的。
处理方法:需要去官网下载对应操作系统的ImageMagick。下载地址:http://www.imagemagick.org/script/download.php,由于是外网,下载速度比较慢。下载完成并安装到指定位置,然后修改site-packages\moviepy\config_defaults.py,在文件的尾部有如下内容:

import os

FFMPEG_BINARY = os.getenv('FFMPEG_BINARY', 'ffmpeg-imageio')
IMAGEMAGICK_BINARY = os.getenv('IMAGEMAGICK_BINARY', 'auto-detect')

# 把 `IMAGEMAGICK_BINARY = ` 后面的内容
# 换成 ImageMagick 安装路径下 magick.exe 的绝对路径,如下:

import os

FFMPEG_BINARY = os.getenv('FFMPEG_BINARY', 'ffmpeg-imageio')
IMAGEMAGICK_BINARY = r"C:\Program Files\ImageMagick-7.1.0-Q16\magick.exe"

中文不显示处理

moviepy对中文和多语言环境的支持做得并不好,包括中文文件名以及用于显示文字的TextClip就是典型的中文支持方面存在问题的。对于编解码的问题,可以通过修改解码语句中的编码类型为’asn’或‘cp936’等方式解决,对于文字显示的处理,稍微麻烦。解决办法:找到对应中文字库,将其字库文件拷贝到代码所在目录,将TextClip的参数font不用字体名,而是用字体文件名。字体库位置:C:\Windows\Fonts,鼠标右击字体文件,找到属性中安全下的对象名称,将对象名称复制下来作为font的值。

代码实例

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')

猜你喜欢

转载自blog.csdn.net/JBY2020/article/details/128819587