无法使用 ffmpeg 的drawtext 渲染非ASCII 字符

无法使用 ffmpeg 的drawtext 渲染非ASCII 字符

使用drawtext过滤器时,ffmpeg我只能使用 ASCII 字符。

此命令创建一个五秒的测试视频,如预期的那样(没什么好看的):

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

但输出无法呈现任何非 ASCII 字符:

FFMPEG

注意从左到右:

AT - 双倍行距字符

05 - 简单的数字

ーポン - CJK 字符

æ”ð - AltGr + a,b,c,d 在我的语言环境中 (en_GB.UTF-8)

起初我以为字体有问题,但我检查了很多字体,它们都有相关的字形。事实上,我的整个系统对这些字符完全没有问题。然后我认为一定是这样,ffmpeg但我尝试了以下操作:

convert -background black -size 800x480 -fill "#ff0080" -family "Ubuntu Mono" -pointsize 72 -gravity center label:'AT 05 ーポン 攢ð' output.png

结果是:

转变

所以我又开始假设我的环境有问题。我尝试过 Ubuntu Trusty 和 Ubuntu Xenial,但结果是相同的。

$ locale
LANG=en_GB.UTF-8
LANGUAGE=en_GB:en
LC_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

鉴于我的语言环境似乎是正确的,并且我使用的任何字体都可以正确呈现字体,我不知道还能在哪里查看,但是当传递到 或 时,ffmpeg显示convert的文本是无用的。

我按照平常的时间进行了数小时的谷歌搜索,但毫无结果。我很惊讶没有人在我之前见过这个问题。

任何人都可以阐明吗?

答案1

有效的字符是 ASCII(代码 32-126)或 ISO-8859-1(代码 160-255),它们都是单字节代码。那些不适合你的是 UTF-8,带有初始字节ASCII(或 Latin-1)应用程序可能将其视为可打印。但额外的字节属于 C1 控制范围 (128-159),并且会被该类型的应用程序丢弃。然后,当它尝试回显这些初始字节时,期望 UTF-8 的终端可能会丢弃这些(不完整)序列,从而给出第一张图片中显示的空框。

相关内容