综合 FFmpeg 编译使用 ffmpeg-gl-transition 以丰富视频特效

2024-11-19 05:45:47 +0800 CST views 1116

FFmpeg 编译使用 ffmpeg-gl-transition 以丰富视频特效

引言

FFmpeg 是一个功能强大的开源多媒体处理库,支持集成 GL Transitions【1】。通过这种集成,可以在命令行中为视频添加炫酷的转场效果。本文介绍如何在 Mac 系统上编译支持 GL Transitions 的 FFmpeg,并解决可能遇到的问题。

1. Mac 系统下编译

安装依赖库

按照 FFmpeg 官方编译文档,先安装一些必要的依赖库:

brew install automake fdk-aac git lame libass libtool libvorbis libvpx \
opus sdl shtool texi2html theora wget x264 x265 xvid nasm

安装 GLEW 和 GLFW3

文档中建议使用 Homebrew 安装 GLEW 和 GLFW:

brew install glew glfw

虽然该命令可以安装成功,但在后续编译 FFmpeg 时可能会提示找不到 GLEW 库。可行的方案是从源码编译 GLEW 和 GLFW3。

从源码编译 GLEW

GLEW 官网 下载源码,然后执行以下命令:

cd glew/build
cmake ./cmake
make -j4
sudo make install

从源码编译 GLFW3

GLFW 官网 下载源码,执行如下命令编译:

cd glfw
cmake -DCMAKE_OSX_ARCHITECTURES=arm64 ./
make -j4
sudo make install

2. 下载和配置 FFmpeg 源代码

下载 FFmpeg 源代码

使用 Git 下载 FFmpeg 源代码:

git clone http://source.ffmpeg.org/git/ffmpeg.git ffmpeg
cd ffmpeg

下载 ffmpeg-gl-transition

使用如下命令下载 ffmpeg-gl-transition 插件:

git clone https://github.com/transitive-bullshit/ffmpeg-gl-transition.git

3. 修改和调整代码

文档中提供的某些命令已经过时,因此需要手动调整。

修改 vf_gltransition.c

打开 ./ffmpeg-gl-transition/vf_gltransition.c 文件,找到这行代码:

.query_formats = query_formats,

将其替换为:

FILTER_QUERY_FUNC(query_formats),

注意不要漏掉任何标点符号。

修改 ffmpeg.diff

接着,打开 ./ffmpeg-gl-transition/ffmpeg.diff 文件,找到如下代码并删除:

diff --git a/libavfilter/allfilters.c b/libavfilter/allfilters.c
index 6eac828616..0570c1c2aa 100644
--- a/libavfilter/allfilters.c
+++ b/libavfilter/allfilters.c
@@ -357,6 +357,7 @@ extern AVFilter ff_vf_yadif;
 extern AVFilter ff_vf_zmq;
 extern AVFilter ff_vf_zoompan;
 extern AVFilter ff_vf_zscale;
+extern AVFilter ff_vf_gltransition;

 extern AVFilter ff_vsrc_allrgb;
 extern AVFilter ff_vsrc_allyuv;

添加 gltransition 过滤器

打开 libavfilter/allfilters.c,在 extern const AVFilter ff_vf_zscale; 后添加如下代码:

extern const AVFilter ff_vf_gltransition;

vf_gltransition.c 文件复制到 FFmpeg 中

执行如下命令将 vf_gltransition.c 复制到 FFmpeg 的 libavfilter 目录中,并应用补丁:

cp ./ffmpeg-gl-transition/vf_gltransition.c libavfilter/
git apply ./ffmpeg-gl-transition/ffmpeg.diff

4. 编译

配置并编译 FFmpeg,确保开启相关库和 gltransition 过滤器:

./configure --prefix=/opt/homebrew/Cellar --enable-gpl --enable-nonfree --enable-libass \
  --enable-libfdk-aac --enable-libfreetype --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 \
  --enable-libopus --enable-opengl --enable-filter=gltransition --extra-libs='-lGLEW -lglfw3'
make

5. 使用

编译完成后,运行如下命令检查 gltransition 是否成功编译:

./ffmpeg -v 0 -filters | grep gltransition

如果显示了 gltransition 过滤器,则表示成功。下面是使用该过滤器的两个示例:

示例 1:简单转场

./ffmpeg -i media/0.mp4 -i media/1.mp4 -filter_complex gltransition -y out.mp4

示例 2:使用自定义 GLSL 脚本

./ffmpeg -i media/0.mp4 -i media/1.mp4 -filter_complex "gltransition=duration=4:offset=1.5:source=crosswarp.glsl" -y out.mp4

参考资料

[1] GL Transitions: https://gl-transitions.com/

推荐文章

使用Rust进行跨平台GUI开发
2024-11-18 20:51:20 +0800 CST
Nginx 跨域处理配置
2024-11-18 16:51:51 +0800 CST
Shell 里给变量赋值为多行文本
2024-11-18 20:25:45 +0800 CST
Golang Sync.Once 使用与原理
2024-11-17 03:53:42 +0800 CST
使用Python实现邮件自动化
2024-11-18 20:18:14 +0800 CST
Golang实现的交互Shell
2024-11-19 04:05:20 +0800 CST
Vue3中如何处理路由和导航?
2024-11-18 16:56:14 +0800 CST
支付页面html收银台
2025-03-06 14:59:20 +0800 CST
联系我们
2024-11-19 02:17:12 +0800 CST
实用MySQL函数
2024-11-19 03:00:12 +0800 CST
JS 箭头函数
2024-11-17 19:09:58 +0800 CST
PHP 8.4 中的新数组函数
2024-11-19 08:33:52 +0800 CST
如何在Vue中处理动态路由?
2024-11-19 06:09:50 +0800 CST
filecmp,一个Python中非常有用的库
2024-11-19 03:23:11 +0800 CST
MySQL 日志详解
2024-11-19 02:17:30 +0800 CST
npm速度过慢的解决办法
2024-11-19 10:10:39 +0800 CST
PostgreSQL日常运维命令总结分享
2024-11-18 06:58:22 +0800 CST
随机分数html
2025-01-25 10:56:34 +0800 CST
mysql删除重复数据
2024-11-19 03:19:52 +0800 CST
前端如何优化资源加载
2024-11-18 13:35:45 +0800 CST
一个数字时钟的HTML
2024-11-19 07:46:53 +0800 CST
内网穿透技术详解与工具对比
2025-04-01 22:12:02 +0800 CST
html一份退出酒场的告知书
2024-11-18 18:14:45 +0800 CST
程序员茄子在线接单