如何使用ffmpeg和drawtext以及一个emoji TTF?

25

我正在尝试使用FFmpeg在视频上叠加一些文本表情符号... 对于普通的TrueType字体,这很顺利。

ffmpeg -i video.mp4 -vf drawtext="Arial.ttf: text='YENTL  Bresseleers ': fontcolor=white: fontsize=24: x=(w-text_w)/2: y=(h-text_h-line_h)/2" -codec:a copy output.mp4 -y

我可以使用OpenSansEmoji字体,这使得我更接近我所需要的内容。

ffmpeg -i video.mp4 -vf drawtext="OpenSansEmoji.ttf.ttf: text='YENTL  Bresseleers ': fontcolor=white: fontsize=24: x=(w-text_w)/2: y=(h-text_h-line_h)/2" -codec:a copy output.mp4 -y`

但是当我尝试使用像emojioneNoto Color Emoji这样具有彩色表情符号的TTF文件时,会出现以下错误:

[Parsed_drawtext_0 @ 0x7fd643700000] Could not set font size to 24 pixels: invalid module handle
[AVFilterGraph @ 0x7fd643608b80] Error initializing filter 'drawtext' with args 'fontfile=AppleColorEmoji.ttf: text=YENTL  Bresseleers : fontcolor=white: fontsize=24: x=(w-text_w)/2: y=(h-text_h-line_h)/2'
Error opening filters!`

有什么想法吗?


目前(2016年1月),常规字体绘制引擎不支持“彩色字符” - 甚至还没有明确的标准!所有当前实现都在其字体中使用私有数据。这就是为什么任何带有“常规”字符(即,轮廓填充一种颜色)的旧字体可以工作,但专有格式位图和轮廓则不能。 - Jongware
2
我进一步研究了一下 - 看起来libfreetype(ffmpeg用于呈现文本的库)自v2.5以来就支持彩色字体 - 参考https://lists.gnu.org/archive/html/freetype-announce/2013-06/msg00000.html和http://www.freetype.org/freetype2/docs/reference/ft2-base_interface.html#FT_LOAD_COLOR你知道ffmpeg使用的版本是什么,是否可以升级? - morrislaptop
无法与使用libfreetype 2.6.2编译的ffmpeg一起工作。 - Gyan
这个有更新了吗? - justswim
尝试将文本用单引号括起来,并在命令中消除不必要的空格。 - Richard Barber
https://trac.ffmpeg.org/ticket/5777 -- ffmpeg 仍然缺少表情符号支持 - sendmoreinfo
2个回答

2
为了进行一种简单的变通,可以手动将表情符号调整到字符上方,方法如下。
ffmpeg -i video.mp4 -i "https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/apple/237/smiling-face-with-sunglasses_1f60e.png" -filter_complex "[1:v]scale=24:24,format=argb,colorchannelmixer=aa=0.5[ovrl],[0:v]drawtext=text='YENTL O Bresseleers':fontcolor=white:fontsize=24:x='(w-text_w)/2':y='(h-text_h-line_h)/2'[text],[text][ovrl]overlay=main_w/2-46:main_h/2-20" -codec:a copy output.mp4 -y

当位置正确时,请删除,format=argb,colorchannelmixer=aa=0.5部分。

0

目前,FFMPEG不支持表情符号和一些特殊字符, 我也遇到了同样的问题, 为了解决这个问题,我采取了不同的方法, 你可以按照相同的步骤操作。

  1. 在添加文本后,当你想要保存它时...
  2. 将这些文本转换成图像
  3. 使用“图像叠加命令”将这些图像添加到FFMPEG中。

希望这些步骤能够帮助你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接