ffmpeg의 drawtext를 사용하여 ASCII가 아닌 문자를 렌더링할 수 없습니다

ffmpeg의 drawtext를 사용하여 ASCII가 아닌 문자를 렌더링할 수 없습니다

drawtext필터를 사용할 때는 ffmpegASCII 문자만 사용할 수 있습니다.

이 명령은 예상대로 작동하는(별로 화려하지는 않음) 5초짜리 테스트 비디오를 생성합니다.

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을 기대하는 터미널은 이러한 (불완전한) 시퀀스를 폐기하여 첫 번째 그림에 표시된 빈 상자를 제공할 수 있습니다.

관련 정보