解决MoviePy视频剪辑,不支持中文字幕问题
在Linux服务器上,默认是没有中文字体,导致MoviePy的TextClip编辑视频字幕中异常:
Traceback (most recent call last):
File "/usr/local/lib/python3.10/dist-packages/moviepy/video/VideoClip.py", line 1137, in __init__
subprocess_call(cmd, logger=None)
File "/usr/local/lib/python3.10/dist-packages/moviepy/tools.py", line 54, in subprocess_call
raise IOError(err.decode('utf8'))
OSError: magick: unable to read font `SimHei' @ warning/annotate.c/RenderType/1024.
magick: delegate library support not built-in '/usr/share/fonts/type1/gsfonts/n019003l.pfb' (Freetype) @ warning/annotate.c/RenderFreetype/2108.
magick: no decode delegate for this image format `' @ error/constitute.c/ReadImage/746.
magick: no images for write '-write' 'PNG32:/tmp/tmp0s0dn2ch.png' at CLI arg 18 @ error/operation.c/CLINoImageOperator/4981.
原因:
MoviePy使用ImageMagick工具生产字幕,该工具使用操作系统字体,如果操作系统没有中文字体,MoviePy在编辑视频字幕时会出现异常。
解决:
1.确认linux系统是否安装了中文字体
在终端窗口,输入fc-list命令,确认是否包含中文字体。
/usr/share/fonts/vista/msyhbd.ttc: Microsoft YaHei,微软雅黑:style=Bold,Negreta,tučné,fed,Fett,Έντονα,Negrita,Lihavoitu,Gras,Félkövér,Grassetto,Vet,Halvfet,Pogrubiony,Negrito,Полужирный,Fet,Kalın,Krepko,Lodia
/usr/share/fonts/truetype/dejavu/DejaVuSerif-Bold.ttf: DejaVu Serif:style=Bold
/usr/share/fonts/opentype/urw-base35/URWBookman-LightItalic.otf: URW Bookman:style=Light Italic
/usr/share/fonts/opentype/urw-base35/URWBookman-Light.otf: URW Bookman:style=Light
/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf: DejaVu Sans Mono:style=Book
/usr/share/fonts/opentype/urw-base35/NimbusMonoPS-Italic.otf: Nimbus Mono PS:style=Italic
/usr/share/fonts/truetype/noto/NotoSansMono-Regular.ttf: Noto Sans Mono:style=Regular
常用的中文字体
楷体 simkai.ttf
隶书 SIMLI.TTF
黑体 simhei.ttf
仿宋 simfang.ttf
幼圆 SIMYOU.TTF
宋体 SIMSUN.TTF
新宋体 NSIMSUN.TTF
Linux其他管理字体命令:
#fc-list:上面已经提到过,它可以列出所有可用的字体
#fc-match:该命令以字符串搜索的方式,查找与所提供字体最相似的字体
#fc-cache:该命令会刷新字体缓存文件,并更新系统字体信息。这通常在安装新字体后应该执行
#fc-query:该命令可以查询字体信息,如文件名、字体格式、字符集、颜色等。
2.在linux的/usr/share/fonts目录下,新建vista目录(自己命名),在windows的C:\Windows\Fonts目录下,拷贝相关中文字体,并上传到vista目录下
3.在linux上执行安装命令
#sudo mkfontscale && sudo mkfontdir
#sudo fc-cache -f -v
4.重装ImageMagick,目的是出发imagick_type_gen脚本更新type.xml,添加支持中文字体
下载ImageMagick
sudo wget http://www.imagemagick.org/download/ImageMagick.tar.gz
解压
sudo tar xzvf ImageMagick.tar.gz
进入ImageMagick目录,依次执行命令安装
./configure
sudo make
sudo make install
ldconfig /usr/local/lib
验证
使用convert命令测试ImageMagick是否已经支持中文字体:
convert -list font | grep Font
列表:
出现的列表中有中文字体,说明ImageMagick已经支持中文,MoviePy可以使用中文编辑中文字幕了