MoviePy 无法正确显示非英文文本
MoviePy cannot display non-English text properly
我使用 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的建议,我post我的方案作为答案。
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
是合适的)
我使用 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的建议,我post我的方案作为答案。
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
是合适的)