6

I am trying to make a short video in FFMPEG, where a word stays on screen for the duration of the video (0.5s). My FFMPEG code looks like this:

ffmpeg -f lavfi -i color=c=white:s=320x240:d=0.5 -vf "drawtext=fontfile= ‘c\:\Windows\fonts\calibri.ttf':fontsize=18: fontcolor=black:x=(w-text_w)/2:y=(h-text_h)/2:text='word'" output.mp4

However, I keep getting the following error (see below for full output):

Fontconfig error: Cannot load default config file 
[Parsed_drawtext_0 @ 000001c2918cef00] Using "C:/Windows/fonts/mingliub.ttc"

I figured it had something to do with the path to the font file. I also tried copying the font file to my FFMPEG map and map the font path to the FFMPEG directory:

ffmpeg -f lavfi -i color=c=white:s=320x240:d=0.5 -vf
"drawtext=fontfile=‘C:\FFMPEG\bin\calibri.ttf':fontsize=18: 
fontcolor=black:x=(w-text_w)/2:y=(h-text_h)/2:text='word'" output.mp4'

This doesn't work either. I do get an output video.mp4 video, but the font is wrong. Here is the full output I get. It is the same for both code examples above:

 c:\FFMPEG\bin>ffmpeg -f lavfi -i color=c=white:s=320x240:d=0.5 -vf "drawtext=fontfile= ‘c\\:\\\Windows\\\fonts\\\calibri.ttf':fontsize=18:  fontcolor=black:x=(w-text_w)/2:y=(h-text_h)/2:text='word'" output.mp4
ffmpeg version N-93234-g2e67f751b5 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 8.2.1 (GCC) 20190212
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt
  libavutil      56. 26.100 / 56. 26.100
  libavcodec     58. 47.102 / 58. 47.102
  libavformat    58. 26.101 / 58. 26.101
  libavdevice    58.  6.101 / 58.  6.101
  libavfilter     7. 48.100 /  7. 48.100
  libswscale      5.  4.100 /  5.  4.100
  libswresample   3.  4.100 /  3.  4.100
  libpostproc    55.  4.100 / 55.  4.100
Input #0, lavfi, from 'color=c=white:s=320x240:d=0.5':
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 320x240 [SAR 1:1 DAR 4:3], 25 tbr, 25 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
Press [q] to stop, [?] for help
Fontconfig error: Cannot load default config file
[Parsed_drawtext_0 @ 00000291ad7def00] Using "C:/Windows/fonts/mingliub.ttc"
[libx264 @ 00000291af0ef180] using SAR=1/1
[libx264 @ 00000291af0ef180] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 00000291af0ef180] profile High, level 1.3, 4:2:0, 8-bit
[libx264 @ 00000291af0ef180] 264 - core 157 r2935 545de2f - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'output.mp4':
  Metadata:
    encoder         : Lavf58.26.101
    Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 320x240 [SAR 1:1 DAR 4:3], q=-1--1, 25 fps, 12800 tbn, 25 tbc
    Metadata:
      encoder         : Lavc58.47.102 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
[Parsed_color_0 @ 00000291af0aa840] EOF timestamp not reliable
frame=   13 fps=0.0 q=-1.0 Lsize=       2kB time=00:00:00.40 bitrate=  43.9kbits/s speed=4.27x
video:1kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 84.991570%
[libx264 @ 00000291af0ef180] frame I:1     Avg QP: 9.22  size:   306
[libx264 @ 00000291af0ef180] frame P:3     Avg QP:11.33  size:    20
[libx264 @ 00000291af0ef180] frame B:9     Avg QP:12.67  size:    14
[libx264 @ 00000291af0ef180] consecutive B-frames:  7.7%  0.0%  0.0% 92.3%
[libx264 @ 00000291af0ef180] mb I  I16..4: 98.7%  0.0%  1.3%
[libx264 @ 00000291af0ef180] mb P  I16..4:  0.0%  0.0%  0.0%  P16..4:  0.0%  0.0%  0.0%  0.0%  0.0%    skip:100.0%
[libx264 @ 00000291af0ef180] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8:  0.0%  0.0%  0.0%  direct: 0.0%  skip:100.0%
[libx264 @ 00000291af0ef180] 8x8 transform intra:0.0%
[libx264 @ 00000291af0ef180] coded y,uvDC,uvAC intra: 1.0% 0.0% 0.0% inter: 0.0% 0.0% 0.0%
[libx264 @ 00000291af0ef180] i16 v,h,dc,p: 92%  1%  7%  0%
[libx264 @ 00000291af0ef180] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 39%  3% 42%  2%  5%  5%  2%  2%  2%
[libx264 @ 00000291af0ef180] i8c dc,h,v,p: 100%  0%  0%  0%
[libx264 @ 00000291af0ef180] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 00000291af0ef180] kb/s:7.65
Merel
  • 131
  • 1
  • 1
  • 6
  • 2
    Please remove SOLVED from the title. And post the answer I question the answer field, not in the question. (You can answer your own question) – szatmary Feb 27 '19 at 16:01

3 Answers3

9

2019 Windows builds seem to have changed syntax or something again; here's what works for me today:

-vf "drawtext=fontfile=C\\:/Windows/fonts/consola.ttf:fontsize=72:fontcolor='white':timecode='00\:00\:00\:00':rate=25:text='TCR\:':boxcolor=0x000000AA:box=1:x=860-text_w/2:y=960"

In my case, I'm running FFmpeg from PWD not C: so I have to specify font path C:\ with escaped colon and forward-slash for path.

Omensan
  • 91
  • 1
  • 3
7

SOLVED! Apparently the problem was that the path to the font cannot contain a semicolon (i.e., "C:/". The code that worked is:

ffmpeg -f lavfi -i color=c=white:s=320x240:d=0.5 -vf “drawtext=fontfile= /Windows/fonts/calibri.ttf:fontsize=18: fontcolor=black:x=(w-text_w)/2:y=(h-text_h)/2:text=word” output.mp4

Merel
  • 131
  • 1
  • 1
  • 6
1

If you are trying to get the font using script/program, you should additionally escape backslashes.
This path worked for me:

const FONT_FILE = 'C\\\\:/Windows/Fonts/arial.ttf';

Yurii Brusentsov
  • 539
  • 4
  • 12