FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass

ffmpeg,windows,libass · 浏览次数 : 2

小编点评

**1. 安装 libass 库** ```bash cd libass-0.17.1 (2) ./configure --prefix=/usr/local/libass make install ``` **2. 配置 FFmpeg** ```bash # 在 /etc/profile 文件末尾添加以下行: export PKG_CONFIG_PATH=/usr/local/libass/lib/pkgconfig:$PKG_CONFIG_PATH # 重新加载环境变量 source /etc/profile ``` **3. 重配置 FFmpeg** ```bash ./configure &--prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-static --disable-doc --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libdavs2 --enable-libmp3lame --enable-gpl --enable-nonfree --enable-libfreetype --enable-sdl2 --enable-libvorbis --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3 --enable-libopus --enable-libvpx --enable-libass --enable-libfribidi --enable-libxml2 --enable-fontconfig --enable-openssl --enable-iconv --enable-zlib --extra-cflags='-I/usr/local/lame/include -I/usr/local/libogg/include -I/usr/local/amr/include' --extra-ldflags='-L/usr/local/lame/lib -L/usr/local/libogg/lib -L/usr/local/amr/lib' --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32 ``` **4. 编译 FFmpeg** ```bash make cleanmake -j4 make installmv /usr/local/ffmpeg/bin/*.lib /usr/local/ffmpeg/lib/cp /usr/local/libxml2/bin/*.dll /usr/local/ffmpeg/bincp /usr/local/freetype/bin/*.dll /usr/local/fontconfig/bin/*.dll /usr/local/fribidi/bin/*.dll /usr/local/ffmpeg/bincp /usr/local/harfbuzz/bin/*.dll /usr/local/ffmpeg/bincp /usr/local/libass/bin/*.dll /usr/local/ffmpeg/bin ``` **5. 查看 FFmpeg 版本信息** ```bash ffmpeg -version ```

正文

libass是一个适用于ASS和SSA格式(Advanced Substation Alpha/Substation Alpha)的字幕渲染器,支持的字幕类型包括srt、ass等,凡是涉及到给视频画面添加字幕,均需事先集成libass。

《FFmpeg开发实战:从零基础到短视频上线》一书的“7.3.1  Linux环境安装libass”介绍了如何在Linux环境给FFmpeg集成libass,其实在Windows环境也能给FFmpeg集成libass,具体的集成步骤说明如下。注意:下列的所有命令均需在MSYS窗口中执行。

1、安装freetype

fontconfig、fribidi、harfbuzz、libass都依赖于freetype库,所以要先安装该库。freetype的安装步骤说明如下。
(1)freetype的下载页面是https://download.savannah.gnu.org/releases/freetype/,比如2023年8月发布的freetype-2.13.2,该版本的源码下载地址是https://download.savannah.gnu.org/releases/freetype/freetype-2.13.2.tar.gz。

tar zxvf freetype-2.13.2.tar.gz
cd freetype-2.13.2

(2)进入解压后的freetype目录,运行下面命令配置freetype。

./configure --prefix=/usr/local/freetype

(3)运行下面命令编译freetype。

make

(4)编译完成后,运行下面命令安装freetype。

make install

(5)给环境变量PKG_CONFIG_PATH添加freetype的pkgconfig路径,也就是在/etc/profile文件末尾添加如下一行内容:

export PKG_CONFIG_PATH=/usr/local/freetype/lib/pkgconfig:$PKG_CONFIG_PATH

然后执行下面命令重新加载环境变量:

source /etc/profile

执行下面命令查看当前的环境变量,发现PKG_CONFIG_PATH的修改已经奏效。

env | grep PKG_CONFIG_PATH

2、安装libxml2

由于字体配置库fontconfig依赖于libxml2库,因此要先安装该库。libxml2的安装步骤说明如下。
(1)libxml2的下载页面是http://xmlsoft.org/sources/,比如2010年11月发布的libxml2-2.7.8,该版本的源码下载地址是http://xmlsoft.org/sources/libxml2-2.7.8.tar.gz。执行下面命令解压下载好的压缩包:

tar zxvf libxml2-2.7.8.tar.gz
cd libxml2-2.7.8

(2)修改include/libxml/xmlexports.h,在文件开头增加下面一行:

#define LIBXML_STATIC

(3)进入解压后的libxml2目录,运行下面命令配置libxml2。

./configure --prefix=/usr/local/libxml2

(4)运行下面命令编译libxml2。

make

(5)编译完成后,运行下面命令安装libxml2。

make install

(6)给环境变量PKG_CONFIG_PATH添加libxml2的pkgconfig路径,也就是在/etc/profile文件末尾添加如下一行内容:

export PKG_CONFIG_PATH=/usr/local/libxml2/lib/pkgconfig:$PKG_CONFIG_PATH

然后执行下面命令重新加载环境变量:

source /etc/profile

执行下面命令查看当前的环境变量,发现PKG_CONFIG_PATH的修改已经奏效。

env | grep PKG_CONFIG_PATH

3、安装gperf

由于字体配置库fontconfig依赖于gperf,因此要先安装该工具。Windows环境运行下面命令安装gperf:

pacman -S gperf

4、安装fontconfig

fontconfig是一款字体配置工具,它能够自动检测字库,以及管理和配置字库。fontconfig的安装步骤说明如下。
(1)fontconfig的下载页面是https://www.freedesktop.org/software/fontconfig/release/,比如2023年1月发布的fontconfig-2.14.2,该版本的源码下载地址是https://www.freedesktop.org/software/fontconfig/release/fontconfig-2.14.2.tar.gz。执行下面命令解压下载好的压缩包:

tar zxvf fontconfig-2.14.2.tar.gz
cd fontconfig-2.14.2

(2)进入解压后的fontconfig目录,运行下面命令配置fontconfig。

./configure --prefix=/usr/local/fontconfig --enable-libxml2 --disable-docs

注意:如果没安装libxml2,运行configure就会报错“*** expat is required. or try to use --enable-libxml2”。
(3)运行下面命令编译fontconfig。

make

(4)编译完成后,运行下面命令安装fontconfig。

make install

(5)给环境变量PKG_CONFIG_PATH添加fontconfig的pkgconfig路径,也就是在/etc/profile文件末尾添加如下一行内容:

export PKG_CONFIG_PATH=/usr/local/fontconfig/lib/pkgconfig:$PKG_CONFIG_PATH

然后执行下面命令重新加载环境变量:

source /etc/profile

执行下面命令查看当前的环境变量,发现PKG_CONFIG_PATH的修改已经奏效。

env | grep PKG_CONFIG_PATH

5、安装fribidi

fribidi是个中东字体增强库,它实现了Unicode字符集的双向算法,以便处理阿拉伯语、希伯来语这些中东语言。fribidi的安装步骤说明如下。
(1)fribidi的下载页面是https://github.com/fribidi/fribidi/releases,比如2023年5月发布的fribidi-1.0.13,该版本的源码下载地址是https://github.com/fribidi/fribidi/releases/download/v1.0.13/fribidi-1.0.13.tar.xz。注意要下载扩展名是tar.xz的压缩包,不能下载扩展名是tar.gz的压缩包,因为tar.gz里面没有configure文件。执行下面命令解压下载好的压缩包:

tar xvf fribidi-1.0.13.tar.xz
cd fribidi-1.0.13

(2)进入解压后的fribidi目录,运行下面命令配置fribidi。

./configure --prefix=/usr/local/fribidi

(3)运行下面命令编译fribidi。

make

(4)编译完成后,运行下面命令安装fribidi。

make install

(5)给环境变量PKG_CONFIG_PATH添加fribidi的pkgconfig路径,也就是在/etc/profile文件末尾添加如下一行内容:

export PKG_CONFIG_PATH=/usr/local/fribidi/lib/pkgconfig:$PKG_CONFIG_PATH

然后执行下面命令重新加载环境变量:

source /etc/profile

执行下面命令查看当前的环境变量,发现PKG_CONFIG_PATH的修改已经奏效。

env | grep PKG_CONFIG_PATH

6、安装harfbuzz

harfbuzz是一个文本塑形引擎,它能够将Unicode字符转换为格式正确的字形输出,可用于调试和预览字体效果。harfbuzz的安装步骤说明如下。
(1)harfbuzz的最新源码在https://github.com/harfbuzz/harfbuzz,但是高版本harfbuzz容易编译失败,实际应用采取1.2.7版本就够了。各版本harfbuzz的下载页面是https://www.freedesktop.org/software/harfbuzz/release/,比如1.2.7版本的源码下载地址是https://www.freedesktop.org/software/harfbuzz/release/harfbuzz-1.2.7.tar.bz2。执行下面命令解压下载好的压缩包:

tar xvf harfbuzz-1.2.7.tar.bz2
cd harfbuzz-1.2.7

(2)进入解压后的harfbuzz目录,运行下面命令配置harfbuzz。

./configure --prefix=/usr/local/harfbuzz --disable-gtk-doc

(3)运行下面命令编译harfbuzz。

make

(4)编译完成后,运行下面命令安装harfbuzz。

make install

(5)给环境变量PKG_CONFIG_PATH添加harfbuzz的pkgconfig路径,也就是在/etc/profile文件末尾添加如下一行内容:

export PKG_CONFIG_PATH=/usr/local/harfbuzz/lib/pkgconfig:$PKG_CONFIG_PATH

然后执行下面命令重新加载环境变量:

source /etc/profile

执行下面命令查看当前的环境变量,发现PKG_CONFIG_PATH的修改已经奏效。

env | grep PKG_CONFIG_PATH

7、安装libass

确认以上的freetype、libxml2、gperf、fontconfig、fribidi、harfbuzz等库全都正确安装之后,再来安装字幕渲染器libass。libass的安装步骤说明如下。
(1)libass的源码页面是https://github.com/libass/libass,下载页面是https://github.com/libass/libass/releases,比如2023年2月发布的libass-0.17.1,该版本的源码下载地址是https://github.com/libass/libass/releases/download/0.17.1/libass-0.17.1.tar.gz。执行下面命令解压下载好的压缩包:

tar zxvf libass-0.17.1.tar.gz
cd libass-0.17.1

(2)进入解压后的libass目录,运行下面命令配置libass。

./configure --prefix=/usr/local/libass

(3)运行下面命令编译libass。

make

(4)编译完成后,运行下面命令安装libass。

make install

(5)给环境变量PKG_CONFIG_PATH添加libass的pkgconfig路径,也就是在/etc/profile文件末尾添加如下一行内容:

export PKG_CONFIG_PATH=/usr/local/libass/lib/pkgconfig:$PKG_CONFIG_PATH

然后执行下面命令重新加载环境变量:

source /etc/profile

执行下面命令查看当前的环境变量,发现PKG_CONFIG_PATH的修改已经奏效。

env | grep PKG_CONFIG_PATH

8、启用libass

由于FFmpeg默认未启用libass,因此需要重新配置FFmpeg,标明启用libass,然后重新编译安装FFmpeg。FFmpeg的Windows环境完整编译过程参见《FFmpeg开发实战:从零基础到短视频上线》一书的“8.1  Windows环境编译FFmpeg”,详细的启用步骤说明如下。
(1)确保下列路径均已加载至环境变量PKG_CONFIG_PATH

export PKG_CONFIG_PATH=/usr/local/freetype/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/local/libxml2/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/local/fontconfig/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/local/fribidi/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/local/harfbuzz/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/local/libass/lib/pkgconfig:$PKG_CONFIG_PATH

(2)执行以下命令,在libxml2的安装路径下补充一个xmlversion.h,因为配置FFmpeg的时候会检查<libxml2/libxml/xmlversion.h>。

mkdir -p /usr/local/libxml2/include/libxml2/libxml2/libxml
cp /usr/local/libxml2/include/libxml2/libxml/xmlversion.h /usr/local/libxml2/include/libxml2/libxml2/libxml/xmlversion.h

(3)回到FFmpeg源码的目录,执行以下命令重新配置FFmpeg,主要增加启用libass。(增加了选项--enable-libass --enable-libfribidi --enable-libxml2 --enable-fontconfig)

./configure  --prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-static --disable-doc --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libdavs2 --enable-libmp3lame --enable-gpl --enable-nonfree --enable-libfreetype --enable-sdl2 --enable-libvorbis --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3 --enable-libopus --enable-libvpx --enable-libass --enable-libfribidi --enable-libxml2 --enable-fontconfig --enable-openssl --enable-iconv --enable-zlib --extra-cflags='-I/usr/local/lame/include -I/usr/local/libogg/include -I/usr/local/amr/include' --extra-ldflags='-L/usr/local/lame/lib -L/usr/local/libogg/lib -L/usr/local/amr/lib' --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32

(4)运行下面命令编译FFmpeg。

make clean
make -j4

(5)执行下面命令安装FFmpeg。

make install
mv /usr/local/ffmpeg/bin/*.lib /usr/local/ffmpeg/lib/
cp /usr/local/libxml2/bin/*.dll /usr/local/ffmpeg/bin
cp /usr/local/freetype/bin/*.dll /usr/local/ffmpeg/bin
cp /usr/local/fontconfig/bin/*.dll /usr/local/ffmpeg/bin
cp /usr/local/fribidi/bin/*.dll /usr/local/ffmpeg/bin
cp /usr/local/harfbuzz/bin/*.dll /usr/local/ffmpeg/bin
cp /usr/local/libass/bin/*.dll /usr/local/ffmpeg/bin

(6)运行以下命令查看FFmpeg的版本信息。

ffmpeg -version

查看控制台回显的FFmpeg版本信息,找到“--enable-libass”,说明FFmpeg正确启用了字幕渲染器libass。

与FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass相似的内容:

FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass

​libass是一个适用于ASS和SSA格式(Advanced Substation Alpha/Substation Alpha)的字幕渲染器,支持的字幕类型包括srt、ass等,凡是涉及到给视频画面添加字幕,均需事先集成libass。 《FFmpeg开发实战:从零基础到短视频上线》一书的“7.3

FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库

​《FFmpeg开发实战:从零基础到短视频上线》一书的例程主要测试本地的音视频文件,当然为了安全起见,很多网络视频都采用了https地址。FFmpeg若要访问https视频,就必须集成第三方的openssl库,但编译FFmpeg时却默认关闭了openssl。为了让App能够播放采用https的在线视

FFmpeg开发笔记(三十四)Linux环境给FFmpeg集成libsrt和librist

​《FFmpeg开发实战:从零基础到短视频上线》一书的“10.2 FFmpeg推流和拉流”提到直播行业存在RTSP和RTMP两种常见的流媒体协议。除此以外,还有比较两种比较新的流媒体协议,分别是SRT和RIST。 其中SRT全称为Secure Reliable Transport,中文叫做安全可靠传

FFmpeg开发笔记(三十三)分析ZLMediaKit对H.264流的插帧操作

​《FFmpeg开发实战:从零基础到短视频上线》一书的“3.4.3 把原始的H264文件封装为MP4格式”介绍了如何把H.264裸流封装为MP4文件。那么在网络上传输的H.264裸流是怎样被接收端获取视频格式的呢?前文指出H.264流必定以“SPS帧→PPS帧→IDR帧”开头,接下来就来验证是否确实

FFmpeg开发笔记(三十二)利用RTMP协议构建电脑与手机的直播Demo

不管是传统互联网还是移动互联网,实时数据传输都是刚需,比如以QQ、微信为代表的即时通信工具,能够实时传输文本和图片。其中一对一的图文通信叫做私聊,多对多的图文通信叫做群聊。 除了常见的图文即时通信,还有实时音视频通信,比如一对一的音频通话、一对一的视频通话等等,此时可采用WebRTC技术,有关Web

FFmpeg开发笔记(三十一)使用RTMP Streamer开启APP直播推流

​RTMP Streamer是一个安卓手机端的开源RTMP直播推流框架,可用于RTMP直播和RTSP直播,其升级版还支持SRT直播(腾讯视频云就采用SRT协议)。RTMP Streamer支持的视频编码包括H264、H265、AV1等等,支持的音频编码包括AAC、G711、OPUS等等,可谓功能强大

FFmpeg开发笔记(三十)解析H.264码流中的SPS帧和PPS帧

​《FFmpeg开发实战:从零基础到短视频上线》一书的“2.1.1 音视频编码的发展历程”介绍了H.26x系列的视频编码标准,其中H.264至今仍在广泛使用,无论视频文件还是网络直播,H.264标准都占据着可观的市场份额。 之所以H.264取得了巨大的成功,是因为它提出了一个新概念,把标准框架划分为

FFmpeg开发笔记(二十八)Linux环境给FFmpeg集成libxvid

​XviD是个开源的视频编解码器,它与DivX一同被纳入MPEG-4规范第二部分的视频标准,但DivX并未开源。早期的MP4视频大多采用XviD或者DivX编码,当时的视频格式被称作MPEG-4。现在常见的H.264后来才增补到MPEG-4规范的第十部分,当然如今使用XviD压缩的视频已经不多了。

FFmpeg开发笔记(二十六)Linux环境安装ZLMediaKit实现视频推流

​《FFmpeg开发实战:从零基础到短视频上线》一书在第10章介绍了轻量级流媒体服务器MediaMTX,通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流。不过MediaMTX的功能实在是太简单了,无法应用于真实直播的生产环境,真正能用于生产环境的流媒体服务器还要看SRS或者ZLMediaKi

FFmpeg开发笔记(二十四)Linux环境给FFmpeg集成AV1的编解码器

​AV1是一种新兴的免费视频编码标准,它由开放媒体联盟(Alliance for Open Media,简称AOM)于2018年制定,融合了Google VP10、Mozilla Daala以及Cisco Thor三款开源项目的成果。据说在实际测试中,AV1标准比H.265(HEVC)的压缩率提升了