当前位置: 首页 > article >正文

ffmpeg翻页转场动效的安装及使用

文章目录

  • 前言
  • 一、背景
  • 二、选型分析
    • 2.1 ffmpeg自带的xfade滤镜
    • 2.2 ffmpeg使用GL Transition库
    • 2.3 xfade-easing项目
  • 三、安装
    • 3.1、安装依赖([参考](https://trac.ffmpeg.org/wiki/CompilationGuide/macOS#InstallingdependencieswithHomebrew))
    • 3.2、获取ffmpeg源码
    • 3.3、融合xfade-easing文件
    • 3.3、编译&安装
    • 3.4、验证
  • 四、使用
    • 4.1 xfade滤镜简易动效
    • 4.2 GL库翻书动效
  • 5、Todo
  • 总结


前言

  • FFmpeg 是一个开源的多媒体处理工具,可以用于录制、转换、编辑和播放音频、视频,以及其他多媒体文件和流。它是基于命令行的工具,支持多种平台(Windows、macOS、Linux)。

  • xfade 是 FFmpeg 中的一个滤镜,用于创建 转场效果(crossfade)。它可以在两段视频或两张图片之间生成平滑的过渡效果,例如淡入淡出、擦除、滑动等。

  • gl-transition 是一个使用 OpenGL 实现的动态转场效果库,广泛用于视频编辑和动态转场生成。它允许在视频或图片之间添加基于 GPU 的高性能视觉效果,比如渐变、模糊、溶解、翻转、波浪、像素化等特效。可搭配 FFmpeg 或其他工具,在命令行环境中批量生成带有特效的视频。


一、背景

最近玩了几个月AI绘画,画了几千张图了,目前希望能自动将一组图片拼接成视频,图片切换时使用转场动效。其中希望使用翻书的动画效果。
简易横划效果示例:
在这里插入图片描述

复杂书本翻页效果示例:
在这里插入图片描述

二、选型分析

2.1 ffmpeg自带的xfade滤镜

ffmpegv4.4以上自带xfade滤镜,官方文档地址:https://trac.ffmpeg.org/wiki/Xfade#Gallery
xfade支持常规的转场效果,如下:
在这里插入图片描述
但xfade不支持复杂转场效果,如书本翻页,而我想要的就是“书本翻页”。

2.2 ffmpeg使用GL Transition库

GL Transition支持一些更复杂酷炫的转场效果,官方示例:https://gl-transitions.com/gallery
在这里插入图片描述
ffmpeg使用gl-transition网上大多数文章提到的都是此项目:

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

但该项目已多年未维护,本人尝试使用最新的ffmpegV7.1编译,遇到很多问题。从issue和最后更新时间看,应该使用ffmpegV4.x版本会顺利些。但有点老没再考虑。

2.3 xfade-easing项目

从ffmpeg-gl-transition的issue中发现有人提到此项目:

https://github.com/scriptituk/xfade-easing

本文写作时此项目最新更新时间为2周前,很新的项目。从Readme文件中了解到支持2.1、2.2提到的所有动效,且原理性的说明也非常详细。于是按此方案实现。

三、安装

以mac电脑为例
我们参考ffpemg的官方安装指引xfade-easing的Readme文件中的说明即可

https://trac.ffmpeg.org/wiki/CompilationGuide/macOS
https://github.com/scriptituk/xfade-easing?tab=readme-ov-file#building-ffmpeg

文档内容不太清晰,结合两部分的文档整理如下:

3.1、安装依赖(参考)

brew install automake fdk-aac git lame libass libtool libvorbis libvpx \
opus sdl shtool texi2html theora wget x264 x265 xvid nasm \
glew glfw

其中前两行是ffmpeg官方文档提到的依赖,第三行glew、glfw是xfade文档提到的依赖

3.2、获取ffmpeg源码

可以github或官网下载压缩包,或直接克隆(本文编写时最新版本v7.1)

git clone http://source.ffmpeg.org/git/ffmpeg.git

cd ffmpeg

./configure  --prefix=/usr/local --enable-gpl --enable-nonfree --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libopus

3.3、融合xfade-easing文件

# 下载patch到ffmpeg根目录下,并执行
wget https://github.com/scriptituk/xfade-easing/raw/refs/heads/main/src/vf_xfade.patch

patch -b -p0 -i vf_xfade.patch

# 下载xfade-easing.h 并移动到 libavfilter/
wget https://github.com/scriptituk/xfade-easing/raw/refs/heads/main/src/xfade-easing.h
mv xfade-easing.h libavfilter/

3.3、编译&安装

./configure  --prefix=/usr/local --enable-gpl --enable-nonfree --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libopus

make ECFLAGS=-Wno-declaration-after-statement

make install

3.4、验证

ffmpeg -hide_banner --help filter=xfade |grep 'xfade AVOptions'

执行上述命令,返回结果有xfade AVOptions关键字即成功

四、使用

以文章开头的两个gif图demo为例,假设我们有两张尺寸一样的图片test1.jpegtest2.jpeg

4.1 xfade滤镜简易动效

在这里插入图片描述

 ffmpeg -loop 1 -t 3 -i test1.jpeg  -loop 1 -t 3 -i test2.jpeg -filter_complex "
 xfade=duration=1:offset=1:transition=revealleft
 " output.mp4

4.2 GL库翻书动效

在这里插入图片描述

ffmpeg -loop 1 -t 4 -i test1.jpeg  -loop 1 -t 1 -i test2.jpeg -filter_complex "
    xfade=duration=3:offset=1:easing=quartic-out:transition=gl_InvertedPageCurl
    " -y output.mp4

更多使用方式可以参阅文档,或留言交流

5、Todo

以下内容有空会更新,欢迎大家关注:

  • 添加背景音乐
  • 添加字幕
  • 开发stable diffusion / comfyUI 插件一键生成视频影集

总结

使用ffmpeg配合xfade滤镜、GL库可以实现各式各样的转场效果。本文提供了从0到1的使用教程,希望对大家有帮助。

欢迎大家点赞、关注博主~!


http://www.kler.cn/a/446319.html

相关文章:

  • 安全算法基础(一)
  • 南城云趣:智能云平台,杜绝电动车充电安全隐患
  • Unity 圆形循环复用滚动列表
  • redis数据类型:list
  • C++ 引用的基本用法
  • 大数据-254 离线数仓 - Airflow 任务调度 核心交易调度任务集成
  • xlua中自定义lua文件加载的一种方式
  • 金融信息系统多活技术-应用策略
  • 实现Python将csv数据导入到Neo4j
  • 第2节-Test Case如何调用Object Repository中的请求并关联参数
  • ECharts热力图-笛卡尔坐标系上的热力图,附视频讲解与代码下载
  • pymssql-2.1.4.dev5-cp37-cp37m-win_amd64.whl 安装
  • 12月第十九讲:Redis应用Redis相关解决方案
  • 基于“2+1 链动模式商城小程序”的微商服务营销策略探究
  • Go语言zero框架中配置文件config加载与执行不同环境配置
  • 麒麟操作系统服务架构保姆级教程(二)sersync、lsync备份和NFS持久化存储
  • Java爬虫️ 使用Jsoup库进行API请求有什么优势?
  • 基于单片机的智能婴儿床监护系统多功能婴儿床摇篮系统
  • Android Studio创建新项目并引入第三方so外部aar库驱动NFC读写器读写IC卡
  • CentOS 7 上自动安装 Python 3.9 脚本
  • java全栈day20--Web后端实战(Mybatis基础2)
  • 汽车气候控制传感器
  • CMake的INSTALL FILES和INSTALL DIRECTORY有什么区别
  • Glide 自定义圆角、铺满FitXY
  • MFC/C++学习系列之简单记录9——简单加法
  • ARP具体过程