FFmpeg 提供了一些内置的转场效果(transition filters),主要通过 xfade、blend 和 colormix 等 filter 实现。
以下是常见的转场 filter:
1. xfade 系列(推荐)
xfade 是 FFmpeg 中功能最丰富的转场滤镜,支持多种过渡效果,例如:fade:淡入淡出slide/slideleft/slideright:滑动circleopen/circleclose:圆形展开/闭合wipe/wipeleft:擦除dissolve:溶解pixelize:像素化smoothleft/smoothright:平滑滑动更多效果可通过 ffmpeg -filters | grep xfade 查看。2. blend
支持多种混合模式(如叠加、溶解)的过渡效果。3. colormix
基于颜色混合的过渡。4. fade
独立的淡入淡出效果(需手动拼接输入流)。
翻书效果(Page Flip)不是 FFmpeg 的内置功能,但可以通过以下两种方式实现:方法 1:使用 gl-transition(基于 OpenGL 的过渡)
FFmpeg 支持通过 gltransition filter 加载外部的 GLSL 着色器实现自定义转场。步骤如下:1. 安装支持 OpenGL 的 FFmpeg
编译 FFmpeg 时启用 --enable-opengl 和 --enable-filter=gltransition。2. 获取翻书效果的 GLSL 代码
从社区库(如 gl-transitions)下载翻书效果的 GLSL 文件(例如 PageFlip.glsl)。3. 使用 gltransition 滤镜
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex \"[0][1]gltransition=duration=2:offset=1:source=PageFlip.glsl" \-y output.mp4duration:过渡时长source:指定 GLSL 文件路径。方法 2:自定义编写 Filter(高级)
若需完全自定义翻书逻辑,需通过 FFmpeg Filter API 开发 C 代码:1. 编写 Filter 代码
创建文件 vf_pageflip.c,定义滤镜逻辑(如几何变换和纹理映射)。参考 FFmpeg 示例:https://github.com/FFmpeg/FFmpeg/blob/master/libavfilter/vf_xfade.c2. 修改编译配置
在 libavfilter/Makefile 添加:makefileOBJS-$(CONFIG_PAGEFLIP_FILTER) += vf_pageflip.o
在 libavfilter/allfilters.c 注册:
extern AVFilter ff_vf_pageflip;
3. 重新编译 FFmpeg
./configure --enable-filter=pageflip
make && sudo make install
4. 使用自定义 Filter
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex \"[0][1]xfade=transition=pageflip:duration=2:offset=1" \output.mp4
网友回复