我使用MoviePy从图像创建视频,并在图像底部添加一些注释。问题是我要添加的文本是越南语(不是英语),所以MoviePy无法正确显示它。

具体来说,以下是我的代码

# -*- coding: utf-8 -*-
from moviepy.editor import *

# create clip from image
clip = ImageClip('img/1.jpg').on_color((1920, 1080))
clip = clip.set_duration(2)

# add annotation to clip
txtclip = TextClip('Truyện Kiều Nguyễn Du', fontsize=50, color='red')
cvc = CompositeVideoClip([ clip, txtclip.set_pos(('center', 'bottom'))])
cvc = cvc.set_duration(2)

# write video to file
cvc.write_videofile("text.mp4", fps=24)


它不显示Truyện Kiều Nguyễn Du,而是显示Truy?n Ki?u Nguy?n Du

我认为主要问题来自ImageMagick,因为当我使用命令时

convert -size 400x200 xc:khaki -gravity Center -pointsize 30 -annotate 0 "Truyện Kiều Nguyễn Du" u8_an.png

ImageMagick还创建具有相同问题的图像。如果您可以帮助我修复它,请告诉我。

更新:我也尝试将字符串转换为utf-8,但不起作用

t = u'Truyện Kiều Nguyễn Du'.encode('utf-8')txtclip = TextClip(t, fontsize=50, color='red')

最佳答案

根据@Gloin的建议,我将解决方案作为答案。

通过为TextClip使用不同的字体来修复此问题。具体来说,这就是解决方案

# -*- coding: utf-8 -*-
from moviepy.editor import *

# create clip from image
clip = ImageClip('img/1.jpg').on_color((1920, 1080))
clip = clip.set_duration(2)

# add annotation to clip
t = u'Truyện Kiều Nguyễn Du'.encode('utf-8')
txtclip = TextClip(t, fontsize=50, color='red', font='FreeMono')
cvc = CompositeVideoClip([ clip, txtclip.set_pos(('center', 'bottom'))])
cvc = cvc.set_duration(2)

# write video to file
cvc.write_videofile("text.mp4", fps=24)


我认为问题在于我们需要考虑(1)使用utf-8编码字符串(2)使用合适的字体推送到ImageMagick(在我的情况下FreeMono是合适的)

08-27 10:36