FFmpeg GL-transition转场的简单使用体验
写在前面
最近在处理视频,遇到两个视频之间的转场用原生的 xfade写起来很痛苦,实现成本高,难度大;我这里主要用的FFmpeg,就想找一个插件专门干转场这个事;搜索了一翻后找到 GL-transition这个转场神器;
GLTransitions 简介
GLTransitions(https://gl-transitions.com/) 是一款开源项目,主要提供了大量的视频转场动画效果。这些效果基于 GLSL ES 的 Fragment Shader 来实现,具有高度定制化和跨平台的特点。
下面是官网的例子:
https://www.bilibili.com/video/BV1Nh4y1h7EV/
https://www.bilibili.com/video/BV1jw411m7q7/
从上面例子来看,如果不用插件自己实现还是非常复杂的;FFmpeg整合后GLTransition的转场滤镜有76个,这是网友整理的效果:












































































这是76个滤镜的名称:
"Angular",
"BlurDirectional",
"BlurLinear",
"BlurZooming",
"Bounce",
"BowTieH",
"BowTieV",
"Burn",
"ButterflyWaveScrawler",
"Checker",
"Circle",
"CircleCrop",
"CircleOpen",
"ColorPhase",
"CrossHatch",
"CrossWarp",
"CrossZoom",
"Cube",
"Directional",
"DirectionalEasing",
"DirectionalPixelate",
"DirectionalRotate",
"DirectionalWarp",
"Dreamy",
"DreamyZoom",
"Fade",
"Fadecolor",
"FadeGrayScale",
"Flyeye",
"FractalNoise",
"GridFlip",
"Heart",
"Hexagonalize",
"InvertedPageCurl",
"Jaws",
"Kaleidoscope",
"LSD",
"LeftRight",
"LinearBlur",
"Luma",
"Mosaic",
"Morphology",
"Pinwheel",
"PolarFunction",
"PolkaDotsCurtain",
"RandomSquares",
"Ripple",
"Rotate",
"RotateScaleFade",
"SimpleZoom",
"SquaresWire",
"StereoViewer",
"Swap",
"Swirl",
"TangentialBlur",
"TileableRotate",
"UndulatingBurnOut",
"WaterDrop",
"Wind",
"WindowBlinds",
"WindowSlice",
"ZoomInCircles",
"barSwipe",
"colourDistance",
"crazyParametricFun",
"crosshatch",
"cubeSpinFade",
"displacementMap",
"doorway",
"fadeBlack",
"glitchMemories",
"invertedPageCurl",
"morph",
"perlin",
"radialBlur",
"squaresWire",
"swap",
"valentine",
"watercolour",
"windLeft"
自己实现
1、安装
正式编译安装
正式的安装无论是Linux还是Linux,还是都是需要重新编译FFmpeg,并把这个项目https://github.com/transitive-bullshit/ffmpeg-gl-transition 编译进去
./configure --prefix=/usr/local
...
--enable-filter=gltransition --extra-libs='-lGLEW -lglfw'
...
看到这个--enable-filter=gltransition启用了就行
后面就可以直接使用:
ffmpeg -i media/0.mp4 -i media/1.mp4 -filter_complex gltransition -y out.mp4
测试体验安装
由于编译安装ffmpeg-gl-transition 有一定的门槛,这里可以体验nodejs实现的版本:ffmpeg-concat
1、先确定安装好ffmpeg;
2、安装好node.js
3、安装ffmpeg-concat: npm install -g ffmpeg-concat (可能需要魔法上网,装不上的话记得自己配置npm的代理)
我暂时也是用这种方式体验的;
(ps:这种方式临时文件大)
使用测试
我准备好了两个视频:input2.mp4 input3.mp4
ffmpeg-concat -d 1000 -t cube -o cube1000.mp4 input2.mp4 input3.mp4
参数释义:
Usage: cli [options] <videos...>
Options:
-V, --version 输出版本
-o, --output 输出视频路径
-t, --transition-name gl-transition 转场名称
-d, --transition-duration 转场的时长毫秒(默认:500)
-T, --transitions 加载自定义转场的json文件路径
-f, --frame-format 临时帧图片的格式 (default: "raw")
-c, --concurrency 并发处理的视频数量 (default: 4)
-C, --no-cleanup-frames 不清空临时的帧图片
-v, --verbose ffmpeg调试模式verbose debug日志开启
-O, --temp-dir
临时帧图片的存储位置
-h, --help output usage information
由上可知,以上命令的含义是: 将input2/3.mp4 两个视频拼接起来,并且在中间使用"cube"这个转场衔接,转场持续1000ms;
自定义转场json文件方式
T.json
[{"name":"cube","duration":1000},{"name":"circleopen","duration":800}]
剩下的差不多
npx ffmpeg-concat -T T.json -o output.mp4 input4.mp4 input2.mp4 input3.mp4
总结
有此基本使用示例,那我们在通过变换参数的情况下,得到各种视频转场效果就显得轻而易举了;当然,看起来其实还可以通过加载json的方式实现自定义转场,时间有限,这个后面熟悉后再填坑。
今天先水这么多,收工!
引用
https://blog.csdn.net/w839687571/article/details/122013299
https://www.youtube.com/watch?v=PWp14WLzxDI
FFmpeg GL-transition转场的简单使用体验的更多相关文章
- FFmpeg的H.264解码器源代码简单分析:环路滤波(Loop Filter)部分
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
- FFmpeg的H.264解码器源代码简单分析:宏块解码(Decode)部分-帧间宏块(Inter)
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
- FFmpeg的H.264解码器源代码简单分析:熵解码(Entropy Decoding)部分
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
- FFmpeg的H.264解码器源代码简单分析:解码器主干部分
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
- FFmpeg的H.264解码器源代码简单分析:解析器(Parser)部分
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
- FFmpeg的HEVC解码器源码简单分析:解析器(Parser)部分
===================================================== HEVC源码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpeg ...
- FFmpeg的H.264解码器源代码简单分析:概述
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
- FFmpeg的HEVC解码器源码简单分析:概述
===================================================== HEVC源码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpeg ...
- FFmpeg的HEVC解码器源码简单分析:解码器主干部分
===================================================== HEVC源码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpeg ...
- FFmpeg的H.264解码器源代码简单分析
本文简单记录FFmpeg中libavcodec的H.264解码器(H.264 Decoder)的源代码.这个H.264解码器十分重要,可以说FFmpeg项目今天可以几乎“垄断”视音频编解码技术,很大一 ...
随机推荐
- [Go] 选择 Beego 的三个理由
1. 项目支持角度较其它框架考虑的多一些,比如:目录结构的简单约定,内置项目配置读取,内置bee脚手架,热重载特性 等. (实际这些 feature 都可以找到 golang 专精的组件引入起来,效果 ...
- OpenAI未至,Open-Sora再度升级!已支持生成16秒720p视频
Open-Sora 在开源社区悄悄更新了!现在支持长达 16 秒的视频生成,分辨率最高可达 720p,并且可以处理任何宽高比的文本到图像.文本到视频.图像到视频.视频到视频和无限长视频的生成需求.我们 ...
- 羽夏闲谈——解决 MSI 安装包指定账户已存在
序 前几天用VS2022,升级到17.1.0版本,发现模板用不了了,但能正常打开之前用它创建的项目.我重装试图修复该问题,解决雪上加霜,报错如下: 未能安装包"Microsoft.Vis ...
- Failed to download metadata for repo ‘PowerTools‘: Cannot prepare internal mirrorlist: No URLs in mi
Failed to download metadata for repo 'AppStream' [CentOS] - Techglimpsehttps://techglimpse.com/faile ...
- jeecg-boot中分页接口用自定义sql和list实现
1.controller中 @ApiOperation(value="分析仪工作状态和报警-3列-分页", notes="分析仪工作状态和报警状态-分页") @ ...
- ༺$Musique Collection 1$༻
~~头图~~ 自取捏 <\(Landslide\)>-\(Oh\,Wonder\) I know it hurts sometimes but You'll get over it You ...
- 网络安全—部署CA证书服务器
文章目录 网络拓扑 安装步骤 安装证书系统 安装从属证书服务器 申请与颁发 申请证书 CA颁发证书 使用windows Server 2003环境 网络拓扑 两台服务器在同一网段即可,即能够互相pin ...
- 80x86汇编—分支循环程序设计
文章目录 查表法: 实现16进制数转ASCII码显示 计算AX的绝对值 判断有无实根 地址表形成多分支 从100,99,...,2,1倒序累加 输入一个字符,然后输出它的二进制数 大小写转换 大写转小 ...
- pageoffice 6 实现word文件添加水印
在很多场景下,Word文档正式发文之前,或者说形成最终文档之前,常常需要往Word文件中添加水印,并且会根据文件类型或内容的不同,需要添加的水印也不一样. 添加水印是Word软件里的一个简单功能,直接 ...
- pageOffice控件实现在线编辑Word 只能加批注的功能
OA办公中,业务需要编辑打开word文档后 文档的正文不能改变,只能对文档进行加批注的操作 怎么实现编辑打开word文档后 文档的正文不能改变,只能对文档进行加批注的操作呢? # 1.实现方法 通过p ...