如何使用ffmpeg和drawtext以及表情符号TTF

时间:2016-01-19 15:32:08

标签: video ffmpeg true-type-fonts

我尝试使用ffmpeg在视频上叠加一些文字表情符号。这适用于普通的TTF,例如。

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`

但是,当我尝试使用带有彩色表情符号的TTF文件时,如emojioneNoto Color Emoji,我会收到以下错误:

[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!`

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

对于肮脏的解决方法,您可以像这样手动调整字符上方的表情符号

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部分。

答案 1 :(得分:0)

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

  1. 添加文本后,当您想要保存时..
  2. 将这些文本转换为图像
  3. 借助“图像叠加命令”将这些图像添加到 FFMPEG。

我希望这些步骤有所帮助。