[时间:2019-05] [状态:Open]
[关键词:字幕,libass,字幕渲染,ffmpeg, subtitles, video filter]
0 引言
libass库则是一个轻量级的对ASS/SSA格式字幕进行渲染的开源库。该库使用C编写,效率较高。据官方说明,libass和VSFilter兼容性最好~
libass依赖的第三方库是FreeType,FriBidi,NASM,Fontconfig(可选),HarfBuzz(可选)。
FreeType是libass使用的通用字体渲染库,也是很强大的库,作用是把系统的字库渲染成单张位图。
虽然官方源码提供的说明已经相对来说足够了,我编写此文主要的目的是学习下如何使用该库,并了解其基本构成。本文将包括:
- libass如何编译
- libass中demo源码解读
- libass主要对外接口
- ffmpeg中libass调用
1 libass编译
1.1 libass编译
首先从https://github.com/libass/libass.git中下载对应源码。
进入git所在的根目录,对应的可执行文件只有一个,autogen.sh
,执行之。
这样会在当前目录下生成configure脚本,运行下面命令:
./configure
我的ubuntu(18.04)主机上遇到下面问题:
configure: error: Package requirements (fribidi >= 0.19.0) were not met:
No package 'fribidi' found
好吧。貌似是没有fribidi
这个库,可以从https://github.com/fribidi/fribidi中下载对应源码,然后编译,命令类似:
./autogen.sh
./configure
make
sudo make install
然后重新运行以下命令:
./configure
make
这样基本编译完成。最终生成的libass.a
位于./libass/.libs/
目录下。
1.2 测试demo编译
当然在./test
目录下还提供了一个libass库测试demo。为了编译之,我们需要将之前生成的libass.a拷贝到./test/.lib/
目录下,并在./test
目录下执行make
命令,这样就会生成最后的可验证的测试程序(默认名字为test
)。当然如果在编译中遇到错误,请按照错误提示添加确实的依赖项。比如我的主机遇到以下编译错误:
test-test.o: In function `write_png':
./test/test.c:53: undefined reference to `png_create_write_struct'
./test/test.c:54: undefined reference to `png_create_info_struct'
./test/test.c:57: undefined reference to `png_set_longjmp_fn'
./test/test.c:58: undefined reference to `png_destroy_write_struct'
./test/test.c:69: undefined reference to `png_init_io'
./test/test.c:70: undefined reference to `png_set_compression_level'
./test/test.c:72: undefined reference to `png_set_IHDR'
./test/test.c:76: undefined reference to `png_write_info'
./test/test.c:78: undefined reference to `png_set_bgr'
./test/test.c:84: undefined reference to `png_write_image'
./test/test.c:85: undefined reference to `png_write_end'
./test/test.c:86: undefined reference to `png_destroy_write_struct'
collect2: error: ld returned 1 e