安装环境
- ubuntu22.04
- ffmpeg 4.4.4
apt-get update -y
#安装依赖
apt-get -y install gcc g++ make xorg-dev pkg-config \
libglew2.2 libglew-dev libglfw3-dev \
nasm yasm libx264-dev libx265-dev libvpx-dev libglu1-mesa-dev \
libmp3lame-dev libopus-dev libfdk-aac-dev
添加补丁
手动添加补丁,因为apply 报错,猜测是代码太老不兼容了
#下载
git clone https://github.com/transitive-bullshit/ffmpeg-gl-transition.git
git clone https://github.com/FFmpeg/FFmpeg.git -bn4.4.4
cd FFmpeg
#copy文件
cp ffmpeg-gl-transition/vf_gltransition.c libavfilter/
#修改文件
#在libavfilter/Makefile里加入
OBJS-$(CONFIG_GLTRANSITION_FILTER) += vf_gltransition.o
#在Libavfilter/aLLfiLters.c加入
extern AVFilter ff_vf_gltransition;
是否使用EGL
新的nvidia tool 已经支持egl,可以直接开启EGL编译
#禁用EGL
RUN grep -v "define GL_TRANSITION_USING_EGL" ffmpeg-gl-transition/vf_gltransition.c > ffmpeg/libavfilter/vf_gltransition.c
修改后安装
#开启EGL
./configure --prefix=/usr/local/ --enable-libx264 --enable-libx265 --enable-libvpx --enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-nonfree --enable-gpl --enable-opengl --enable-filter=gltransition --extra-libs='-lGLEW -lEGL -ldl'
#禁用EGL
./configure --prefix=/usr/local/ --enable-libx264 --enable-libx265 --enable-libvpx --enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-nonfree --enable-gpl --enable-opengl --enable-filter=gltransition --extra-libs='-lGLEW -lglfw -ldl'
#编译
make -j
make install
验证
ffmpeg -v 0 -filters|grep gltran
T.. gltransition VV->V OpenGL blend transitions
ffmpeg 6.1 编译
这种报错是在函数所在的c文件中定义了,但是没有在与之相关联的.h文件中声明,需要修改vf_gltransition.c
error: implicit declaration of function ‘ff_get_video_buffer’
添加 #include "video.h"
error: implicit declaration of function ‘ff_set_common_formats’ error: implicit declaration of function ‘ff_make_format_list’
添加 #include "formats.h
error: ‘AVFilter’ has no member named ‘query_formats’
.query_formats = query_formats, 替换为 FILTER_QUERY_FUNC(query_formats)
结论:就算编译正常跑的结果也不正常, 没人更新代码,导致和6.1不兼容
https://github.com/transitive-bullshit/ffmpeg-gl-transition/issues/75