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

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

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/

推荐文章

一个简单的打字机效果的实现
2024-11-19 04:47:27 +0800 CST
html折叠登陆表单
2024-11-18 19:51:14 +0800 CST
php客服服务管理系统
2024-11-19 06:48:35 +0800 CST
js函数常见的写法以及调用方法
2024-11-19 08:55:17 +0800 CST
Vue3中如何处理状态管理?
2024-11-17 07:13:45 +0800 CST
Vue3中的事件处理方式有何变化?
2024-11-17 17:10:29 +0800 CST
Vue3中的响应式原理是什么?
2024-11-19 09:43:12 +0800 CST
MySQL设置和开启慢查询
2024-11-19 03:09:43 +0800 CST
Vue3 结合 Driver.js 实现新手指引
2024-11-18 19:30:14 +0800 CST
Go语言SQL操作实战
2024-11-18 19:30:51 +0800 CST
Vue3中的Slots有哪些变化?
2024-11-18 16:34:49 +0800 CST
浏览器自动播放策略
2024-11-19 08:54:41 +0800 CST
goctl 技术系列 - Go 模板入门
2024-11-19 04:12:13 +0800 CST
CentOS 镜像源配置
2024-11-18 11:28:06 +0800 CST
程序员茄子在线接单