Não é possível renderizar caracteres não-ASCII com o drawtext do ffmpeg

0

Usando o filtro drawtext em ffmpeg , não consigo usar nada além de caracteres ASCII.

Este comando cria um vídeo de teste de cinco segundos, como esperado (nada bonito):

ffmpeg -f lavfi -i testsrc -to 5 -vf "drawtext=text='AT 05 ーポン 攢ð':fontcolor=white" test.mpg

Mas a saída falha ao renderizar caracteres não-ASCII:

Notadaesquerdaparaadireita:

AT-Caracteresduplosespaçados

05-Númerossimples

ーポン-caracteresCJK

攢ð-AltGr+a,b,c,dnomeuidioma(en_GB.UTF-8)

Aprincípio,presumiqueafonteestavaerrada,masverifiqueiváriasfonteseelastêmosglifosrelevantes.Defato,todoomeusistemanãotemproblemascomessespersonagens.Entãoassumiquedeveriaserffmpeg,mastenteioseguinte:

convert-backgroundblack-size800x480-fill"#ff0080" -family "Ubuntu Mono" -pointsize 72 -gravity center label:'AT 05 ーポン 攢ð' output.png

O resultado é:

Então,voltoasuporqueháalgoerradocommeuambiente.JáexperimenteioUbuntuTrustyeoUbuntuXenial,masosresultadossãoosmesmos.

$localeLANG=en_GB.UTF-8LANGUAGE=en_GB:enLC_CTYPE="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_PAPER="en_GB.UTF-8"
LC_NAME="en_GB.UTF-8"
LC_ADDRESS="en_GB.UTF-8"
LC_TELEPHONE="en_GB.UTF-8"
LC_MEASUREMENT="en_GB.UTF-8"
LC_IDENTIFICATION="en_GB.UTF-8"
LC_ALL=

$ ffmpeg
ffmpeg version 3.2.4-static http://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 5.4.1 (Debian 5.4.1-5) 20170205
  configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc-5 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gray --enable-libass --enable-libfreetype --enable-libfribidi --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzimg
  libavutil      55. 34.101 / 55. 34.101
  libavcodec     57. 64.101 / 57. 64.101
  libavformat    57. 56.101 / 57. 56.101
  libavdevice    57.  1.100 / 57.  1.100
  libavfilter     6. 65.100 /  6. 65.100
  libswscale      4.  2.100 /  4.  2.100
  libswresample   2.  3.100 /  2.  3.100
  libpostproc    54.  1.100 / 54.  1.100

$ convert -version
Version: ImageMagick 6.7.7-10 2017-05-26 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC
Features: OpenMP

Não sei mais para onde procurar, pois minha localidade parece estar correta e qualquer fonte que eu usar corretamente renderiza a fonte, mas quando passada para ffmpeg ou convert , o texto mostrado é inútil.

Eu fiz as horas e horas usuais de pesquisando sem sucesso. Estou surpreso que ninguém tenha visto esse problema antes de mim.

Alguém pode lançar alguma luz?

    
por Ken Sharp 14.06.2017 / 00:05

1 resposta

0

Os caracteres que funcionam são ASCII (códigos 32-126) ou ISO-8859-1 (códigos 160-255), que são todos códigos de byte único. Os que não estão funcionando para você são UTF-8, com um byte inicial que um aplicativo ASCII (ou Latin-1) pode tratar como imprimível. Mas os bytes adicionais caem no intervalo de controles C1 (128-159) e seriam descartados por esse tipo de aplicativo. Então, quando ele tenta ecoar esses bytes iniciais, um terminal esperando que o UTF-8 possa descartar essas sequências (incompletas), dando as caixas vazias mostradas na primeira imagem.

    
por 29.06.2017 / 02:08

Tags