2017-02-05 1 views
1

Я использовал MoviePy для создания видео с изображения и добавления аннотации к нижней части изображения. Проблема в том, что текст, который я хочу добавить, является вьетнамским (а не английским), поэтому 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 также создает изображение с той же проблемой. Пожалуйста, дайте мне знать, можете ли вы помочь мне исправить это.

UPDATE: Я также пытаюсь преобразовать строку в UTF-8, но он не работает

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

+0

Это может быть проблема с шрифтом по умолчанию. Укажите тот, который, как вы знаете, содержит вьетнамские символы. Вам также может потребоваться явно кодировать текст в UTF-8. –

+0

BTW, с вопросами Unicode всегда полезно упомянуть версию Python и ОС. –

+0

Привет, версия Python, которую я использовал, - 2.7.12. Моя ОС - Ubuntu 16.04 LTS 64bit. Я также явно кодирую текст в UTF8, но он не работает '' t = u'Truyện Kiều Nguyễn Du'.encode ('utf-8') txtclip = TextClip (t, fontsize = 50, color = ' red ') '' Вы бы дали мне больше предложений о шрифте? – tndoan

ответ

0

С предложением @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 является подходящим)