本人写过ffmpeg为mkv封装格式的音视频文件添加内挂字幕
,里面字幕和视频是两个独立的通道,可以将字幕从文件中剔除,添加自己的字幕。

若想字幕和视频粘在一块,无法分割,则需要ass,subtitles滤镜,此时的字幕为内嵌字幕。
而ffmpeg若要支持ass,subtitles滤镜,则在configure的时候,需要–enable-libass。

本文讲解在vs2017下编译libass静态库,并集成到ffmpeg中去。
首先是libass的下载,本人建议到ShiftMediaProject工程中下载,该工程对ffmpeg的常用配置库,比如opus,fdk-aac,libass,harfbuzz等;都有专门的vs工程。libass的地址为https://github.com/ShiftMediaProject/libass。本人下载的是0.17.0版本,里面的目录结构如下。

在文件夹SMP中有对应的解决方案libass.sln,直接双击此文件(libass.sln),会弹出下面的对话框。

此时可以先打开vs2017,然后将此sln拖进去即可。

libass里面有一部分汇编代码(asm结尾的文件),用的是nasm编译器,vs2017没有自带nasm编译器,需要读者配置,本人下载的nasm编译器地址如下:
https://www.nasm.us/pub/nasm/releasebuilds/2.14/win32/
这块是nasm.exe,其实在vs2017中,还需要有几个配置文件拷贝到vs2017的安装目录,这块读者可以参考Win7 VS2015 NASM汇编语言环境配置

然后我们看libass的依赖库,里面有五个库。

关于freetype库的支持,读者可以看本人的博客:
ffmpeg编译时添加freetype支持,用于在视频中添加文字

iconv库的编译,读者可以看本人的博客:
vs2017编译iconv

fontconfig库的编译,读者可以看本人的博客:
ffmpeg vs2017静态库编译,支持fontconfig

fribidi库,本人用的是1.0.12版本,直接在msys2上编译,这个没用vs2017编译。

harfbuzz库,本人用的也是ShiftMediaProject工程里面的,版本为3.4.0

这五个库编译好后,再编译libass,编译libass时,有一点需要注意:

这里本人配置的运行库是MT,是运行时库的静态版本;如果是MD,则在配置ffmpeg的时候,会报链接错误。

最后,本人将上面编译好的ass库和其依赖的库放到msys2环境中,切换到ffmpeg的编译目录,配置命令如下:
./configure --toolchain=msvc --arch=x86_64 --disable-debug --enable-gpl --enable-libass --enable-libfreetype --enable-libfontconfig --enable-libopus --enable-libx264 --enable-libx265 --extra-cflags=-I/usr/local/x264/include --extra-ldflags=‘-LIBPATH:/usr/local/x264/lib’ --prefix=/home/ffmpeg_x264_x265_vpx_opus_ass_freetype_fontconfig_static --enable-libvpx --enable-encoder=libvpx_vp8 --enable-encoder=libvpx_vp9 --enable-decoder=vp8 --enable-decoder=vp9 --enable-parser=vp8 --enable-parser=vp9

编译出ffmpeg。

然后执行命令:

ffmpeg -i 2022-01-08T22-32-58.mp4 -vf ass=ts.ass -y 2022-01-08T22-32-58_ass.mp4

ass滤镜可以将字幕内嵌到视频中

执行命令

ffmpeg -i 2022-01-08T22-32-58.mp4 -vf subtitles=ts.ass -y 2022-01-08T22-32-58_ass_2.mp4

subtitles滤镜也可以将字幕内嵌到视频中。

vs2017编译libass静态库,并添加到ffmpeg中去,以支持ass,subtitles滤镜相关推荐

  1. PHP编译为静态库,Linux下将Tinyxml编译为静态库

    转载请注明来源:Linux下将Tinyxml编译为静态库 一个应用需要在linux服务器上运行,不能保证每个服务器都有应用依赖的库,又懒得每个服务器都去安装下,也不太现实,于是就将应用所用到的库全部编 ...

  2. Linux中gcc的编译、静态库和动态库的制作

    欢迎大家关注笔者,你的关注是我持续更博的最大动力 Linux中gcc的编译.静态库.动态库 文章目录: 1 gcc的编译过程 1.1 gcc的编译过程 1.2 gcc的常用参数 2 gcc 静态库的制 ...

  3. pytorch 矩阵相乘_编译PyTorch静态库

    背景 众所周知,PyTorch项目作为一个C++工程,是基于CMake进行构建的.然而当你想基于CMake来构建PyTorch静态库时,你会发现: 静态编译相关的文档不全: CMake文件bug太多, ...

  4. linux编译c++ 静态库,C/C++ 条件编译静态库

    ==>windows 下方法: 1.方法一:VS工程中中直接添加 1.1在VS的属性->常规->附加库目录,添上文件夹的路径:例如:lib/x64: 1.2输入的附加依赖项,添加上库 ...

  5. cmake中添加引用动态链接_CMake 添加头文件目录,链接动态、静态库(添加子文件夹)...

    CMake支持大写.小写.混合大小写的命令. 当编译一个需要第三方库的项目时,需要知道: 去哪找头文件(.h),-I(GCC) INCLUDE_DIRECTORIES() 去哪找库文件(.so/.dl ...

  6. cmake 编译 linux 库,使用CMake编译跨平台静态库

    在开始介绍如何使用CMake编译跨平台的静态库以前,先讲讲我在没有使用CMake以前所趟过的坑.由于不少开源的程序,好比png,都是自带编译脚本的.咱们可使用下列脚原本进行编译:linux . / c ...

  7. iOS架构-C/C++lame库在Mac下编译通用静态库.a库(13)

    C/C++ 有很多成熟的库,还有很多特殊功能的库,有时候iOS 平台开发一些比较前沿或者冷门的功能时,iOS并没有提供解决方案,这时候就可以研究C/C++的一些库,为我们使用.但是在Xcode编译C/ ...

  8. Linux基础——gcc编译、静态库与动态库(共享库)

    Linux基础--gcc编译.静态库与动态库(共享库) https://blog.csdn.net/daidaihema/article/details/80902012 Linux基础--gcc编译 ...

  9. Linux命令【三】gcc编译+静态库+动态库+makefile+gdb调试

    用C编译器编译源文件:gcc 源文件 -o 可执行文件名 详细步骤: gcc -E a.c -o a.i预处理器将头文件展开,宏替换,去掉注释 gcc -S a.i -o a.s编译器将C文件变成汇编 ...

最新文章

  1. 超卖频发or商品滞销?压倒卖家的最后一根稻草竟是库存!
  2. java仿真软件_一个简单的Java仿真程序
  3. 保护模式下寻址(易懂)
  4. 获取用户精准地理位置信息(百度地图)
  5. 如何设置postfix别名邮件组只接受本域的邮件
  6. 《TensorFlow 2.0深度学习算法实战教材》学习笔记(二、回归问题和分类问题)
  7. 【2021Java最新学习路线】java后端开发入门
  8. 芒果文件服务器,芒果云服务器
  9. SharePoint 2013 本地创建解决方案
  10. [HTML/CSS]下拉菜单
  11. scrapy框架使用教程
  12. 山寨杂志《Nature and Science》
  13. 【全开源+免费更新】doodoo.js项目结构
  14. 《前端》eval函数
  15. python杀毒软件程序_使用Python Shells绕过杀毒软件
  16. 读书笔记——吴翰清《白帽子讲Web安全》
  17. 微信小程序使用weapp-qrcode生成二维码
  18. 入门图形学:光照模型(四)
  19. 安卓AccountManager数据库存储位置
  20. SystemUI setSystemUiVisibility参数属性

热门文章

  1. CSS技巧:背景图转换动画
  2. python编写2048游戏代码_python pygame实现2048游戏
  3. define定义常量和宏 以及 寄存器关键字register
  4. 腾讯又一神级APP下架!网友:我用了7年啊。。
  5. LFS7.4编译笔记(3)
  6. Python re模块用法详解
  7. Android 10 SurfaceFlinger
  8. Hadoop---(2)MapReduce(分布式计算编程模型)
  9. 【阵列信号处理】矩阵代数基础知识总结
  10. SQL 删除表数据,id从1开始