其实FFmpeg你们都耳熟能详的的一个东西了,知名的ijkplayer 就是有Bilibili开源出来的播放器也是基于FFmpeg作出来的。可是FFmpeg不只仅止于音视频的播放裁剪功能,还能干些更有趣的事情,就好比说视频的画面拼接,对于一个Android开发者来讲,一想到FFmpeg c/c++是跑不掉的。下载官方库,而后编译成不一样平台的so,而后在经过jni集成到项目中,这一个开头就难倒了很多开发者。一个问题是如何编译出这个so。如何把编译好的文件集成到项目中。这个我以后的文章会详细说明,这里我只和你们说说有趣在哪里。html
说道这里 我不得不说,如今各个大厂都在作统一前端的开发语言和框架,搞得开发者TMD头都大,其实不仍是作得都是一些UI页面而已,经过不一样的方式渲染而已,若是真的要作一些定制化的功能,仍是离开不了原生。前端
经过标题你们可能仍是不太明白啥意思,我就上几张我作的这个App的截图吧,顺便放几张动态图,可能你们能知道个大概功能。其实你们看了以后,可能感受感受市面上已经有作到了这种效果的App了,可是做为一个Android攻城狮,必需要知道他是怎么作出来的,在ios上作这种效果很容易,有原生的Api提供,可是苦逼的Android 那只能经过C/C++来实现,原生搞的话很难。java
这个App大概有如下功能(目前并未开源,项目地址)ios
下面是App作出来的两个视频转gif的图片c++
想看视频的 话点击下面的连接便可 三合一视频 二合一视频git
这个app已有下面的页面,不过如今尚未开源,还有不少地方要改。功能是实现了。可是页面还有不少优化的地方,因此啊 FFmpeg真的很牛逼。接下来我会教你们本身怎么实现这个功能。那么来看看作出来的视频如何,某音好像没有这个功能哦,github
这一期,我只是教你们如何经过shell 命令实现一个视频画面拼接。首先从最基础的功能来实现吧。而后在根据当前的功能进行扩展。至于FFmpeg库的编译,一时半会儿也说不完。参数配置也很麻烦,尤为是不一样的平台坑不少。这里我就以最简单的方式交你们如何实现吧shell
既然要作功能,第一步固然是找相应的工具了,咱们能够经过FFmpeg官网找到,对应本身平台的静态库,你们别下错了哈,static binary不要下载错了,下载成源文件了。由于官方已经给咱们编译好了静态库,能够直接经过shell 脚本就能够简单的走起来。windows
FFmpeg官方网站库bash
打开连接,我这边选中的是mac os 能够看到底下提供了 static 库。咱们能够直接下载下来就好了。Ubuntu 和windows 都是同样的 都有现成的库。能够下载下来。
下载下来就是一个这个东西。我这边大概71M。还挺大的,由于里面官方给咱们把大部分基本的功能都给编译进去了。因此这么大,可是若是咱们本身编译的话,会小不少。能够吧一下不须要的东西直接disable
那固然是打开咱们的terminal,windows 直接win+R 而后cmd就ok,而后cd 到咱们下载的ffmpeg静态库的文件路径,执行一下命令,不出意外的话,这时候你应该能够看到如下页面
./ffmpeg
复制代码
若是出现一下内容,说明这时候你的ffmpeg 已经ok了
若是说权限不足的话 ,cd到你的静态库路径下执行这个就能够了。加个sudo,而后在change mode 一下 赋予777权限
chmod +x ffmpeg
chmod 777 ffmpeg
复制代码
这时候ffmpeg环境已经准备好了。接下来万事俱备只欠东风了。
视频拼接,那么如何视频拼接呢,不用担忧 ffmpeg 已经给咱们作好了相应的封装了。只要了解相应的命令就能够完成了最基础的视频拼接功能了。其实ffmpeg不只仅如此啊,他的功能太强大了。
先简单的来几个命令看看,查看视频文件信息
./ffmpeg -i input.mp4
复制代码
这时候咱们能够看到视频的具体信息fps,宽高啊,视频质量啊,等等不少信息
-i 的指令就是入参的,接下来咱们直接看如何经过命令把一个视频合在一块儿,就好比上面两个视频合在一块儿的小姐姐,咱们经过电脑简单的来合成一下。
./ffmpeg -i input2.mp4 -i input2.mp4 -filter_complex [0][1]vstack -y output.mp4
复制代码
成功的话应该是如下页面
这一个MP4文件是同级目录下的文件,你们能够换成本身的文件名就能够,至于filter_complex吗?我这边就大白话讲了,就至关于咱们java 中的函数同样,你把输入给他 在这个方法体内,把相应的输出给你。 vstack 能够官网看到这样的介绍 Stack input videos vertically.就是垂直拼接视频的意思,同理如何想水平的话,只要把vstack 改为hstack就能够了,老铁们是否是很简单,很给力,
最主要的是本身经过命令行就能够完成一些视频的基本操做,什么ps,Photoshop,我命令行就ok了。哈哈哈哈哈哈哈哈
刚刚做出来的视频效果,截图给你们看看
说好的小姐姐呢,tmd 这是什么鬼很可怕,博主换了个视频 哈哈哈,可是这个效果的话产品看到会骂死人的,接下来的文章将会给你们讲解如何优化视频效果。
但愿给老铁们带来的是知识的储备而不是时间的浪费。这一期就说到这里,最简单的方式实现视频画面的拼接,下一期将会给你们带来更多的内容。你们也能够在留言里说说更想了解哪一方面的内容。我会根据你们的意见来写,