Commit a5b64584 authored by Stefano Sabatini's avatar Stefano Sabatini Committed by Anton Khirnov

lavfi: Port drawtext filter by Hemanth from the libavfilter soc repo

With the following additions:
* support to anti-aliased glyph rendering
* support to UTF-8 text and Unicode chars rendering
* support for RGB packed formats
* fix minor errors and typos in the filter description
* extend/clarify examples in the filter description
Signed-off-by: 's avatarAnton Khirnov <anton@khirnov.net>
parent 45a811b5
...@@ -169,6 +169,7 @@ External library support: ...@@ -169,6 +169,7 @@ External library support:
and libraw1394 [no] and libraw1394 [no]
--enable-libdirac enable Dirac support via libdirac [no] --enable-libdirac enable Dirac support via libdirac [no]
--enable-libfaac enable FAAC support via libfaac [no] --enable-libfaac enable FAAC support via libfaac [no]
--enable-libfreetype enable libfreetype [no]
--enable-libgsm enable GSM support via libgsm [no] --enable-libgsm enable GSM support via libgsm [no]
--enable-libmp3lame enable MP3 encoding via libmp3lame [no] --enable-libmp3lame enable MP3 encoding via libmp3lame [no]
--enable-libnut enable NUT (de)muxing via libnut, --enable-libnut enable NUT (de)muxing via libnut,
...@@ -928,6 +929,7 @@ CONFIG_LIST=" ...@@ -928,6 +929,7 @@ CONFIG_LIST="
libdc1394 libdc1394
libdirac libdirac
libfaac libfaac
libfreetype
libgsm libgsm
libmp3lame libmp3lame
libnut libnut
...@@ -1077,6 +1079,7 @@ HAVE_LIST=" ...@@ -1077,6 +1079,7 @@ HAVE_LIST="
llrintf llrintf
local_aligned_16 local_aligned_16
local_aligned_8 local_aligned_8
localtime_r
log2 log2
log2f log2f
loongson loongson
...@@ -1462,6 +1465,7 @@ udp_protocol_deps="network" ...@@ -1462,6 +1465,7 @@ udp_protocol_deps="network"
# filters # filters
blackframe_filter_deps="gpl" blackframe_filter_deps="gpl"
cropdetect_filter_deps="gpl" cropdetect_filter_deps="gpl"
drawtext_filter_deps="libfreetype"
frei0r_filter_deps="frei0r dlopen strtok_r" frei0r_filter_deps="frei0r dlopen strtok_r"
frei0r_src_filter_deps="frei0r dlopen strtok_r" frei0r_src_filter_deps="frei0r dlopen strtok_r"
hqdn3d_filter_deps="gpl" hqdn3d_filter_deps="gpl"
...@@ -2782,6 +2786,7 @@ check_func getrusage ...@@ -2782,6 +2786,7 @@ check_func getrusage
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
check_func inet_aton $network_extralibs check_func inet_aton $network_extralibs
check_func isatty check_func isatty
check_func localtime_r
check_func ${malloc_prefix}memalign && enable memalign check_func ${malloc_prefix}memalign && enable memalign
check_func mkstemp check_func mkstemp
check_func mmap check_func mmap
...@@ -2868,6 +2873,7 @@ enabled libdirac && require_pkg_config dirac \ ...@@ -2868,6 +2873,7 @@ enabled libdirac && require_pkg_config dirac \
"libdirac_decoder/dirac_parser.h libdirac_encoder/dirac_encoder.h" \ "libdirac_decoder/dirac_parser.h libdirac_encoder/dirac_encoder.h" \
"dirac_decoder_init dirac_encoder_init" "dirac_decoder_init dirac_encoder_init"
enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
enabled libgsm && require libgsm gsm/gsm.h gsm_create -lgsm enabled libgsm && require libgsm gsm/gsm.h gsm_create -lgsm
enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
enabled libnut && require libnut libnut.h nut_demuxer_init -lnut enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
......
...@@ -353,6 +353,129 @@ drawbox ...@@ -353,6 +353,129 @@ drawbox
drawbox=10:20:200:60:red@@0.5" drawbox=10:20:200:60:red@@0.5"
@end example @end example
@section drawtext
Draw text string or text from specified file on top of video using the
libfreetype library.
To enable compilation of this filter you need to configure FFmpeg with
@code{--enable-libfreetype}.
The filter also recognizes strftime() sequences in the provided text
and expands them accordingly. Check the documentation of strftime().
The filter accepts parameters as a list of @var{key}=@var{value} pairs,
separated by ":".
The description of the accepted parameters follows.
@table @option
@item fontfile
The font file to be used for drawing text. Path must be included.
This parameter is mandatory.
@item text
The text string to be drawn. The text must be a sequence of UTF-8
encoded characters.
This parameter is mandatory if no file is specified with the parameter
@var{textfile}.
@item textfile
A text file containing text to be drawn. The text must be a sequence
of UTF-8 encoded characters.
This parameter is mandatory if no text string is specified with the
parameter @var{text}.
If both text and textfile are specified, an error is thrown.
@item x, y
The offsets where text will be drawn within the video frame.
Relative to the top/left border of the output image.
The default value of @var{x} and @var{y} is 0.
@item fontsize
The font size to be used for drawing text.
The default value of @var{fontsize} is 16.
@item fontcolor
The color to be used for drawing fonts.
Either a string (e.g. "red") or in 0xRRGGBB[AA] format
(e.g. "0xff000033"), possibly followed by an alpha specifier.
The default value of @var{fontcolor} is "black".
@item boxcolor
The color to be used for drawing box around text.
Either a string (e.g. "yellow") or in 0xRRGGBB[AA] format
(e.g. "0xff00ff"), possibly followed by an alpha specifier.
The default value of @var{boxcolor} is "white".
@item box
Used to draw a box around text using background color.
Value should be either 1 (enable) or 0 (disable).
The default value of @var{box} is 0.
@item ft_load_flags
Flags to be used for loading the fonts.
The flags map the corresponding flags supported by libfreetype, and are
a combination of the following values:
@table @var
@item default
@item no_scale
@item no_hinting
@item render
@item no_bitmap
@item vertical_layout
@item force_autohint
@item crop_bitmap
@item pedantic
@item ignore_global_advance_width
@item no_recurse
@item ignore_transform
@item monochrome
@item linear_design
@item no_autohint
@item end table
@end table
Default value is "render".
For more information consult the documentation for the FT_LOAD_*
libfreetype flags.
@item tabsize
The size in number of spaces to use for rendering the tab.
Default value is 4.
@end table
For example the command:
@example
drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"
@end example
will draw "Test Text" with font FreeSerif, using the default values
for the optional parameters.
The command:
@example
drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text':\
x=100: y=50: fontsize=24: fontcolor=yellow@@0.2: box=1: boxcolor=red@@0.2"
@end example
will draw 'Test Text' with font FreeSerif of size 24 at position x=100
and y=50 (counting from the top-left corner of the screen), text is
yellow with a red box around it. Both the text and the box have an
opacity of 20%.
Note that the double quotes are not necessary if spaces are not used
within the parameter list.
For more information about libfreetype, check:
@url{http://www.freetype.org/}.
@section fade @section fade
Apply fade-in/out effect to input video. Apply fade-in/out effect to input video.
......
...@@ -26,6 +26,7 @@ OBJS-$(CONFIG_COPY_FILTER) += vf_copy.o ...@@ -26,6 +26,7 @@ OBJS-$(CONFIG_COPY_FILTER) += vf_copy.o
OBJS-$(CONFIG_CROP_FILTER) += vf_crop.o OBJS-$(CONFIG_CROP_FILTER) += vf_crop.o
OBJS-$(CONFIG_CROPDETECT_FILTER) += vf_cropdetect.o OBJS-$(CONFIG_CROPDETECT_FILTER) += vf_cropdetect.o
OBJS-$(CONFIG_DRAWBOX_FILTER) += vf_drawbox.o OBJS-$(CONFIG_DRAWBOX_FILTER) += vf_drawbox.o
OBJS-$(CONFIG_DRAWTEXT_FILTER) += vf_drawtext.o
OBJS-$(CONFIG_FADE_FILTER) += vf_fade.o OBJS-$(CONFIG_FADE_FILTER) += vf_fade.o
OBJS-$(CONFIG_FIELDORDER_FILTER) += vf_fieldorder.o OBJS-$(CONFIG_FIELDORDER_FILTER) += vf_fieldorder.o
OBJS-$(CONFIG_FIFO_FILTER) += vf_fifo.o OBJS-$(CONFIG_FIFO_FILTER) += vf_fifo.o
......
...@@ -45,6 +45,7 @@ void avfilter_register_all(void) ...@@ -45,6 +45,7 @@ void avfilter_register_all(void)
REGISTER_FILTER (CROP, crop, vf); REGISTER_FILTER (CROP, crop, vf);
REGISTER_FILTER (CROPDETECT, cropdetect, vf); REGISTER_FILTER (CROPDETECT, cropdetect, vf);
REGISTER_FILTER (DRAWBOX, drawbox, vf); REGISTER_FILTER (DRAWBOX, drawbox, vf);
REGISTER_FILTER (DRAWTEXT, drawtext, vf);
REGISTER_FILTER (FADE, fade, vf); REGISTER_FILTER (FADE, fade, vf);
REGISTER_FILTER (FIELDORDER, fieldorder, vf); REGISTER_FILTER (FIELDORDER, fieldorder, vf);
REGISTER_FILTER (FIFO, fifo, vf); REGISTER_FILTER (FIFO, fifo, vf);
......
...@@ -26,8 +26,8 @@ ...@@ -26,8 +26,8 @@
#include "libavutil/samplefmt.h" #include "libavutil/samplefmt.h"
#define LIBAVFILTER_VERSION_MAJOR 2 #define LIBAVFILTER_VERSION_MAJOR 2
#define LIBAVFILTER_VERSION_MINOR 3 #define LIBAVFILTER_VERSION_MINOR 4
#define LIBAVFILTER_VERSION_MICRO 1 #define LIBAVFILTER_VERSION_MICRO 0
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
LIBAVFILTER_VERSION_MINOR, \ LIBAVFILTER_VERSION_MINOR, \
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment