ffmpeg编译gl-transitions(centos7环境为基础)

前言

ffmpeg本身是一款开源的编解码软件,在4.3版本后加入xfade的转场,在github上发现GRE大神使用WebGL编写的一些转场,效果十分酷炫,以及Travis Fischer大神写的将ffmpeg和gl-transitions链接到一起的文件,但网上教程基本都是基于Ubuntu系统,转到centos上还是有很多的坑存在,最后查找了很多资料,踩了很多坑整理出这篇文档,有问题的可以在评论区讨论。

本文已在docker上实践成功,基于Linux without EGL路线。

安装gl-transitions依赖

首先更新的package至软件源中的最新版,改成国内源下载快一点。

yum -y update

安装必要的package

yum -y install autoconf automake bzip2 bzip2-devel cmake freetype-devel gcc gcc-c++ git libtool make pkgconfig zlib-devel libxml2-devel mesa* freeglut*

可以创建一个ffmpeg_sources目录,下面所有的文件都安装在这个包下面

# 我这里是放在了/usr/local下面
mkdir /usr/local/ffmpeg_sources

centos7的安装cmake版本基本是2.8左右的,后续依赖的glfw需要升级cmake。

# 移除旧的cmake版本
yum remove cmake -y
wget https://cmake.org/files/v3.14/cmake-3.14.5.tar.gz
tar zxvf cmake-3.14.5.tar.gz
cd cmake-3.14.5
./configure
make && make install

然后安装OpenGL相关库(glew)

yum -y install glew glew-devel

安装glfw3

cd /usr/local/ffmpeg_sources
wget https://github.com/glfw/glfw/archive/refs/tags/3.3.4.tar.gz
tar -xzvf glfw-3.3.4.tar.gz
cd glfw-3.3.4
yum -y install libXrandr*
yum -y install libXcursor*
yum -y install libXi*
cmake .
make && make install

安装Xvfb

yum -y install Xvfb

安装ffmpeg

一般下载的ffmpeg都是官网编译好的,这次要下载源码自行编译

全版本地址:https://ffmpeg.org/releases/

选择合适的版本,本文选择的是linux下4.4版本(https://ffmpeg.org/releases/ffmpeg-4.4.tar.gz)。

在下载之前,我们先下好ffmepg的依赖。首先安装所需的汇编依赖。

安装nasm

cd /usr/local/ffmpeg_sources
curl -O -L https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-2.15.05.tar.bz2
tar xjvf nasm-2.15.05.tar.bz2
cd nasm-2.15.05
./autogen.sh
./configure
make
make install

安装yasm

cd /usr/local/ffmpeg_sources
curl -O -L https://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar xzvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure
make
make install

安装libx264

cd /usr/local/ffmpeg_sources
#下载不下来可以把https改为git
git clone --branch stable --depth 1 https://code.videolan.org/videolan/x264.git
cd x264
./configure --enable-static
make
make install

下载ffmpeg

cd /usr/local/ffmpeg_sources
wget https://ffmpeg.org/releases/ffmpeg-4.4.tar.gz
tar -xzvf ffmpeg-4.4.tar.gz

下载ffmpeg-gl-transition

cd /usr/local/ffmpeg_sources
git clone https://github.com/transitive-bullshit/ffmpeg-gl-transition.git
# 注意clone后进入ffmpeg4.4目录下
cd ffmpeg-4.4
# 拷贝vf_gltransition.c到libavfilter
cp /usr/local/ffmpeg_sources/ffmpeg-gl-transition/vf_gltransition.c libavfilter/

拷贝之后,ffmpeg-gl-transition还有个diff文件,其实就是在ffmpeg/libavfilter里加入要编译vf_gltransition.c这个文件。

所以我们进入libavfilter文件夹

# 在libavfilter/Makefile里加入
OBJS-$(CONFIG_GLTRANSITION_FILTER)           += vf_gltransition.o
# 在libavfilter/allfilters.c加入
extern AVFilter ff_vf_gltransition;

而后我们还需要修改我们刚刚复制进来的vf_gltransition.c,去掉宏定义,这里直接引用原作者的话

Linux without EGL

If you don’t want to use EGL, just comment out this line in vf_gltransition.c

#ifndef __APPLE__
# define GL_TRANSITION_USING_EGL // remove this line if you don't want to use EGL
#endif

在修改完成后,开始编译ffmpeg

cd /usr/local/ffmpeg_sources/ffmpeg-4.4
# 指定pkgconfig 避免找不到
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
# 执行configure
./configure --enable-nonfree --enable-cross-compile --enable-gpl --enable-libx264 --enable-opengl --enable-filter=gltransition --extra-libs='-lGLEW -lglfw3 -ldl -lX11'
# 执行make
make
# 建立软连接
ln ffmpeg /usr/bin/ffmpeg && ln ffprobe /usr/bin/ffprobe

完成后,需要启动Xvfb,直接守护进程启动

nohup Xvfb :1 -screen 0 1280x1024x16 >/dev/null 2>&1 &
# 设置环境变量
export DISPLAY=:1

最后可以执行命令测试下了

# 转场文件在https://github.com/gl-transitions/gl-transitions
ffmpeg -i media/0.mp4 -i media/1.mp4 -filter_complex "gltransition=duration=4:offset=1.5:source=crosswarp.glsl" -y out.mp4

本文仅提供参考,如有问题可留言,或在本文出现的所有链接中寻找答案,还有百度或谷歌。

推荐Asa_Ho博主写了很多魔改,地址ffmpeg 再编译使用 ffmpeg-gl-transition

参考链接

https://trac.ffmpeg.org/wiki/CompilationGuide/Centos

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

ffmpeg 再编译使用 ffmpeg-gl-transition

https://github.com/gl-transitions/gl-transitions

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐