MoviePy中文乱码的原因以及解决办法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ucsheep/article/details/84340440

很多朋友在群里面提问说TextClip出现中文乱码。今天写博客讲一下原因及解决办法。

原因:

很多人直接拷贝了别人的代码案例,像下面这样:

from moviepy.editor import TextClip
txtClip = TextClip('我爱你中国',color='white', font="Amiri-Bold",kerning = 5, fontsize=100)

结果大多数都是显示几个问号,中文无法正常显示。
注意到了吗?TextClip中有一个重要的参数 font="Amiri-Bold" 这其实是字体出了问题,原因可能两种:

  • 1 字体不支持中文
  • 2 字体不存在

解决:

from moviepy.editor import TextClip
print ( TextClip.list("font") )

通过上述方式,你可以拿到当前系统中的全部字体,如下

['AvantGarde-Book', 'AvantGarde-BookOblique', 'AvantGarde-Demi', 'AvantGarde-DemiOblique', 'Bookman-Demi', 'Bookman-DemiItalic', 'Bookman-Light', 'Bookman-LightItalic', 'Courier', 'Courier-Bold', 'Courier-BoldOblique', 'Courier-Oblique', 'fixed', 'Helvetica', 'Helvetica-Bold', 'Helvetica-BoldOblique', 'Helvetica-Narrow', 'Helvetica-Narrow-Bold', 'Helvetica-Narrow-BoldOblique', 'Helvetica-Narrow-Oblique', 'Helvetica-Oblique', 'NewCenturySchlbk-Bold', 'NewCenturySchlbk-BoldItalic', 'NewCenturySchlbk-Italic', 'NewCenturySchlbk-Roman', 'Palatino-Bold', 'Palatino-BoldItalic', 'Palatino-Italic', 'Palatino-Roman', 'Symbol', 'Times-Bold', 'Times-BoldItalic', 'Times-Italic', 'Times-Roman', 'Abyssinica-SIL', 'AR-PL-UKai-CN', 'AR-PL-UKai-HK', 'AR-PL-UKai-TW', 'AR-PL-UKai-TW-MBE', 'AR-PL-UMing-CN', 'AR-PL-UMing-HK', 'AR-PL-UMing-TW', 'AR-PL-UMing-TW-MBE', 'Bitstream-Charter', 'Bitstream-Charter-Bold', 'Bitstream-Charter-Bold-Italic', 'Bitstream-Charter-Italic', 'Bitstream-Vera-Sans', 'Bitstream-Vera-Sans-Bold', 'Bitstream-Vera-Sans-Bold-Oblique', 'Bitstream-Vera-Sans-Mono', 'Bitstream-Vera-Sans-Mono-Bold', 'Bitstream-Vera-Sans-Mono-Bold-Oblique', 'Bitstream-Vera-Sans-Mono-Oblique', 'Bitstream-Vera-Sans-Oblique', 'Bitstream-Vera-Serif', 'Bitstream-Vera-Serif-Bold', 'Century-Schoolbook-L-Bold', 'Century-Schoolbook-L-Bold-Italic', 'Century-Schoolbook-L-Italic', 'Century-Schoolbook-L-Roman', 'Courier-10-Pitch', 'Courier-10-Pitch-Bold', 'Courier-10-Pitch-Bold-Italic', 'Courier-10-Pitch-Italic', 'DejaVu-Sans', 'DejaVu-Sans-Bold', 'DejaVu-Sans-Bold-Oblique', 'DejaVu-Sans-Condensed', 'DejaVu-Sans-Condensed-Bold', 'DejaVu-Sans-Condensed-Bold-Oblique', 'DejaVu-Sans-Condensed-Oblique', 'DejaVu-Sans-ExtraLight', 'DejaVu-Sans-Mono', 'DejaVu-Sans-Mono-Bold', 'DejaVu-Sans-Mono-Bold-Oblique', 'DejaVu-Sans-Mono-Oblique', 'DejaVu-Sans-Oblique', 'DejaVu-Serif', 'DejaVu-Serif-Bold', 'DejaVu-Serif-Bold-Italic', 'DejaVu-Serif-Condensed', 'DejaVu-Serif-Condensed-Bold', 'DejaVu-Serif-Condensed-Bold-Italic', 'DejaVu-Serif-Condensed-Italic', 'DejaVu-Serif-Italic', 'Dingbats', 'FreeMono', 'FreeMono-Bold', 'FreeMono-Bold-Oblique', 'FreeMono-Oblique', 'FreeSans', 'FreeSans-Bold', 'FreeSans-Bold-Oblique', 'FreeSans-Oblique', 'FreeSerif', 'FreeSerif-Bold', 'FreeSerif-Bold-Italic', 'FreeSerif-Italic', 'Garuda', 'Garuda-Bold', 'Garuda-Bold-Oblique', 'Garuda-Oblique', 'KacstArt', 'KacstBook', 'KacstDecorative', 'KacstDigital', 'KacstFarsi', 'KacstLetter', 'KacstNaskh', 'KacstOffice', 'KacstOne', 'KacstOne-Bold', 'KacstPen', 'KacstPoster', 'KacstQurn', 'KacstScreen', 'KacstTitle', 'KacstTitleL', 'Khmer-OS', 'Khmer-OS-System', 'Kinnari', 'Kinnari-Bold', 'Kinnari-Bold-Italic', 'Kinnari-Bold-Oblique', 'Kinnari-Italic', 'Kinnari-Oblique', 'Laksaman', 'Laksaman-Bold', 'Laksaman-Bold-Italic', 'Laksaman-Italic', 'Liberation-Mono', 'Liberation-Mono-Bold', 'Liberation-Mono-Bold-Italic', 'Liberation-Mono-Italic', 'Liberation-Sans', 'Liberation-Sans-Bold', 'Liberation-Sans-Bold-Italic', 'Liberation-Sans-Italic', 'Liberation-Sans-Narrow', 'Liberation-Sans-Narrow-Bold', 'Liberation-Sans-Narrow-Bold-Italic', 'Liberation-Sans-Narrow-Italic', 'Liberation-Serif', 'Liberation-Serif-Bold', 'Liberation-Serif-Bold-Italic', 'Liberation-Serif-Italic', 'LKLUG', 'Lohit-Punjabi', 'Loma', 'Loma-Bold', 'Loma-Bold-Oblique', 'Loma-Oblique', 'mry_KacstQurn', 'NanumBarunGothic', 'NanumBarunGothic-Bold', 'NanumGothic', 'NanumGothicBold', 'NanumMyeongjo', 'NanumMyeongjoBold', 'Nimbus-Mono-L', 'Nimbus-Mono-L-Bold', 'Nimbus-Mono-L-Bold-Oblique', 'Nimbus-Mono-L-Regular-Oblique', 'Nimbus-Roman-No9-L', 'Nimbus-Roman-No9-L-Medium', 'Nimbus-Roman-No9-L-Medium-Italic', 'Nimbus-Roman-No9-L-Regular-Italic', 'Nimbus-Sans-L', 'Nimbus-Sans-L-Bold', 'Nimbus-Sans-L-Bold-Condensed', 'Nimbus-Sans-L-Bold-Condensed-Italic', 'Nimbus-Sans-L-Bold-Italic', 'Nimbus-Sans-L-Regular-Condensed', 'Nimbus-Sans-L-Regular-Condensed-Italic', 'Nimbus-Sans-L-Regular-Italic', 'Norasi', 'Norasi-Bold', 'Norasi-Bold-Italic', 'Norasi-Bold-Oblique', 'Norasi-Italic', 'Norasi-Oblique', 'Noto-Sans-CJK-JP-Black', 'Noto-Sans-CJK-JP-Bold', 'Noto-Sans-CJK-JP-DemiLight', 'Noto-Sans-CJK-JP-Light', 'Noto-Sans-CJK-JP-Medium', 'Noto-Sans-CJK-JP-Regular', 'Noto-Sans-CJK-JP-Thin', 'Noto-Sans-CJK-KR-Black', 'Noto-Sans-CJK-KR-Bold', 'Noto-Sans-CJK-KR-DemiLight', 'Noto-Sans-CJK-KR-Light', 'Noto-Sans-CJK-KR-Medium', 'Noto-Sans-CJK-KR-Regular', 'Noto-Sans-CJK-KR-Thin', 'Noto-Sans-CJK-SC-Black', 'Noto-Sans-CJK-SC-Bold', 'Noto-Sans-CJK-SC-DemiLight', 'Noto-Sans-CJK-SC-Light', 'Noto-Sans-CJK-SC-Medium', 'Noto-Sans-CJK-SC-Regular', 'Noto-Sans-CJK-SC-Thin', 'Noto-Sans-CJK-TC-Black', 'Noto-Sans-CJK-TC-Bold', 'Noto-Sans-CJK-TC-DemiLight', 'Noto-Sans-CJK-TC-Light', 'Noto-Sans-CJK-TC-Medium', 'Noto-Sans-CJK-TC-Regular', 'Noto-Sans-CJK-TC-Thin', 'Noto-Sans-Mono-CJK-JP-Bold', 'Noto-Sans-Mono-CJK-JP-Regular', 'Noto-Sans-Mono-CJK-KR-Bold', 'Noto-Sans-Mono-CJK-KR-Regular', 'Noto-Sans-Mono-CJK-SC-Bold', 'Noto-Sans-Mono-CJK-SC-Regular', 'Noto-Sans-Mono-CJK-TC-Bold', 'Noto-Sans-Mono-CJK-TC-Regular', 'OpenSymbol', 'Padauk', 'Padauk-Bold', 'Padauk-Book', 'Padauk-Book-Bold', 'Phetsarath-OT', 'Purisa', 'Purisa-Bold', 'Purisa-Bold-Oblique', 'Purisa-Oblique', 'Saab', 'Sawasdee', 'Sawasdee-Bold', 'Sawasdee-Bold-Oblique', 'Sawasdee-Oblique', 'Standard-Symbols-L', 'STIX-Bold', 'STIX-BoldItalic', 'STIX-Italic', 'STIX-Regular', 'STIXGeneral-Bold', 'STIXGeneral-BoldItalic', 'STIXGeneral-Italic', 'STIXGeneral-Regular', 'STIXIntegralsD-Bold', 'STIXIntegralsD-Regular', 'STIXIntegralsSm-Bold', 'STIXIntegralsSm-Regular', 'STIXIntegralsUp-Bold', 'STIXIntegralsUp-Regular', 'STIXIntegralsUpD-Bold', 'STIXIntegralsUpD-Regular', 'STIXIntegralsUpSm-Bold', 'STIXIntegralsUpSm-Regular', 'STIXMath-Regular', 'STIXNonUnicode-Bold', 'STIXNonUnicode-BoldItalic', 'STIXNonUnicode-Italic', 'STIXNonUnicode-Regular', 'STIXSizeFiveSym-Regular', 'STIXSizeFourSym-Bold', 'STIXSizeFourSym-Regular', 'STIXSizeOneSym-Bold', 'STIXSizeOneSym-Regular', 'STIXSizeThreeSym-Bold', 'STIXSizeThreeSym-Regular', 'STIXSizeTwoSym-Bold', 'STIXSizeTwoSym-Regular', 'STIXVariants-Bold', 'STIXVariants-Regular', 'Symbola', 'TakaoPGothic', 'Tibetan_Machine_Uni', 'Tlwg-Mono', 'Tlwg-Mono-Bold', 'Tlwg-Mono-Bold-Oblique', 'Tlwg-Mono-Oblique', 'Tlwg-Typewriter', 'Tlwg-Typewriter-Bold', 'Tlwg-Typewriter-Bold-Oblique', 'Tlwg-Typewriter-Oblique', 'Tlwg-Typist', 'Tlwg-Typist-Bold', 'Tlwg-Typist-Bold-Oblique', 'Tlwg-Typist-Oblique', 'Tlwg-Typo', 'Tlwg-Typo-Bold', 'Tlwg-Typo-Bold-Oblique', 'Tlwg-Typo-Oblique', 'Ubuntu', 'Ubuntu-Bold', 'Ubuntu-Bold-Italic', 'Ubuntu-Condensed', 'Ubuntu-Italic', 'Ubuntu-Light', 'Ubuntu-Light-Italic', 'Ubuntu-Medium', 'Ubuntu-Medium-Italic', 'Ubuntu-Mono', 'Ubuntu-Mono-Bold', 'Ubuntu-Mono-Bold-Italic', 'Ubuntu-Mono-Italic', 'Umpush', 'Umpush-Bold', 'Umpush-Bold-Oblique', 'Umpush-Light', 'Umpush-Light-Oblique', 'Umpush-Oblique', 'URW-Bookman-L-Demi-Bold', 'URW-Bookman-L-Demi-Bold-Italic', 'URW-Bookman-L-Light', 'URW-Bookman-L-Light-Italic', 'URW-Chancery-L-Medium-Italic', 'URW-Gothic-L-Book', 'URW-Gothic-L-Book-Oblique', 'URW-Gothic-L-Demi', 'URW-Gothic-L-Demi-Oblique', 'URW-Palladio-L-Bold', 'URW-Palladio-L-Bold-Italic', 'URW-Palladio-L-Italic', 'URW-Palladio-L-Roman', 'Waree', 'Waree-Bold', 'Waree-Bold-Oblique', 'Waree-Oblique', '文泉驿微米黑', '文泉驿等宽微米黑']

TAT我的字体有点多啊。

  • 如果你的要求仅仅是显示中文文字就OK,那么你从中搜索一下中文字体并使用就OK了(PS:‘CN’结尾的一般都是)。
  • 如果你的要求比较高,希望使用特定字体来显示中文文字,也有办法。
    • 首先,准备好特定的字体文件,TTF格式,假设准备好了文件 heimi.TTF 文件,你可以将不同的字体文件放置在项目中的特定目录下统一管理,假设放置在 ./font 目录下
    • 在代码中声明全局变量,FONT_URL,就是TTF文件的位置
    • TextClip的font参数,填FONT_URL

代码如下:

from moviepy.editor import TextClip
FONT_URL = './font/heimi.ttf'
txtClip = TextClip('我爱你中国',color='white', font=FONT_URL,kerning = 5, fontsize=100)

现在,世界清净了。

回到问题目录

猜你喜欢

转载自blog.csdn.net/ucsheep/article/details/84340440