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-transitio
n 有一定的门槛,这里可以体验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项目今天可以几乎“垄断”视音频编解码技术,很大一 ...
随机推荐
- [FAQ] JS 实现暂停(睡眠) Sleep 与 倒计时 ?
想要暂停/睡眠一秒,可以参考使用以下方式: async () => { await (new Promise((resolve) => setTimeout(resolve, 1000)) ...
- kubernetes-1.26安装
一.环境准备 k8s集群角色 IP 主机名 安装组件 配置 控制节点 192.168.10.10 master apiserver.controller-manager.scheduler.etcd. ...
- css的animate做一个信号动画
html <div class="jump flex-fs fadeAndScaleIn"> <span></span> <span> ...
- vue项目(cli-3)替换浏览器logo
思路: 根html文件的 <link rel="icon" href="<%= BASE_URL %>favicon.ico">是引入i ...
- CF522D Closest Equals 离线扫描 + 线段树
CF522D Closest Equals 题意:m 个询问,求 [l,r] 内相同元素的最小距离. 离线询问,按右端点排序. 对于每一个 a[i],如果 last[a[i]] 存在,将线段树 las ...
- 从SAP CRM上传设备到SAP ERP
文档<Step by step to download equipment from ERP with hierarchy>描述了从ERP复制设备到CRM的步骤.默认情况下,ERP中的设备 ...
- 用 Certbot-auto 在 letsencrypt.org申请免费 SSL 证书实现 HTTPS
参考帖子 https://www.cnblogs.com/lzpong/p/6433189.html https://www.cnblogs.com/756623607-zhang/p/1163850 ...
- Linux中文件的隐藏属性
在Linux系统中,可以使用chattr与lsattr来操作文件的隐藏属性.
- grads读取netcdf文件,报错SDF file has no discernable X coordinate解决办法
1.netcdf文件格式说明 netCDF数据格式在气象中有广泛的应用,这种格式有一定的复杂性.作为数据的使用者可以不用对数据格式了解得很详细,不过大致的了解还是有必要的.netCDF是自描述的二进制 ...
- selenium Webdriver版本和浏览器版本不匹配问题:ChromeDriver only supports Chrome version 119 Current browser version is 124.0.6367.202
问题描述 代码如下: from selenium import webdriver from selenium.webdriver.common.by import By def test01(): ...