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
网友回复
为啥所有的照片分辨率提升工具都会修改照片上的图案细节?
js如何在浏览器中将webm视频的声音分离为单独音频?
微信小程序如何播放第三方域名url的mp4视频?
ai多模态大模型能实时识别视频中的手语为文字吗?
如何远程调试别人的chrome浏览器获取调试信息?
为啥js打开新网页window.open设置窗口宽高无效?
浏览器中js的navigator.mediaDevices.getDisplayMedia屏幕录像无法录制SpeechSynthesisUtterance产生的说话声音?
js中mediaRecorder如何录制window.speechSynthesis声音音频并下载?
python如何直接获取抖音短视频的音频文件url?
js在浏览器中如何使用MediaStream与MediaRecorder实现声音音频多轨道混流?