原来FFmpeg这么有意思

栏目: IOS · Android · 发布时间: 5年前

内容简介:其实FFmpeg大家都耳熟能详的的一个东西了,知名的ijkplayer 就是有Bilibili开源出来的播放器也是基于FFmpeg做出来的。但是FFmpeg不仅仅止于音视频的播放裁剪功能,还能干些更有趣的事情,就比如说视频的画面拼接,对于一个Android开发者来说,一想到FFmpeg c/c++是跑不掉的。下载官方库,然后编译成不同平台的so,然后在通过jni集成到项目中,这一个开头就难倒了不少开发者。一个问题是如何编译出这个so。如何把编译好的文件集成到项目中。这个我之后的文章会详细说明,这里我只和大家

其实FFmpeg大家都耳熟能详的的一个东西了,知名的ijkplayer 就是有Bilibili开源出来的播放器也是基于FFmpeg做出来的。但是FFmpeg不仅仅止于音视频的播放裁剪功能,还能干些更有趣的事情,就比如说视频的画面拼接,对于一个Android开发者来说,一想到FFmpeg c/c++是跑不掉的。下载官方库,然后编译成不同平台的so,然后在通过jni集成到项目中,这一个开头就难倒了不少开发者。一个问题是如何编译出这个so。如何把编译好的文件集成到项目中。这个我之后的文章会详细说明,这里我只和大家说说有趣在哪里。

说道这里 我不得不说,现在各个大厂都在做统一前端的开发语言和框架,搞得开发者TMD头都大,其实不还是做得都是一些UI页面而已,通过不同的方式渲染而已,如果真的要做一些定制化的功能,还是离开不了原生。

Android FFmpeg视频画面拼接

通过标题大家可能还是不太明白啥意思,我就上几张我做的这个App的截图吧,顺便放几张动态图,可能大家能知道个大概功能。其实大家看了之后,可能感觉感觉市面上已经有做到了这种效果的App了,但是作为一个Android攻城狮,必须要知道他是怎么做出来的,在ios上做这种效果很容易,有原生的Api提供,但是苦逼的Android 那只能通过C/C++来实现,原生搞的话很难。

这个App大概有以下功能(目前并未开源, 项目地址

  • 视频画面拼接(主要的)
  • 视频宽高裁剪
  • 视频时长裁剪
  • 添加视频边框及修改边框颜色
  • 添加视频封面
  • 添加视频背景图片
  • 添加视频水印
  • 添加背景音乐

下面是两张视频转gif的图片

原来FFmpeg这么有意思
原来FFmpeg这么有意思

想看视频的 话点击下面的链接即可 三合一视频 二合一视频

这个app已有下面的页面,不过现在还没有开源,还有很多地方要改。功能是实现了。但是页面还有很多优化的地方,所以啊 FFmpeg真的很牛逼。接下来我会教大家自己怎么实现这个功能。那么来看看做出来的视频如何,某音好像没有这个功能哦,

原来FFmpeg这么有意思

如何实现这种效果

这一期,我只是教大家如何通过 shell 命令实现一个视频画面拼接。首先从最基础的功能来实现吧。然后在根据当前的功能进行扩展。至于FFmpeg库的编译,一时半会儿也说不完。参数配置也很麻烦,尤其是不同的平台坑很多。这里我就以最简单的方式交大家如何实现吧

第一步

既然要做功能,第一步当然是找相应的 工具 了,我们可以通过FFmpeg官网找到,对应自己平台的静态库,大家别下错了哈,static binary不要下载错了,下载成源文件了。因为官方已经给我们编译好了静态库,可以直接通过shell 脚本就可以简单的走起来。

FFmpeg官方网站库

打开链接,我这边选中的是mac os 可以看到底下提供了 static 库。我们可以直接下载下来就行了。Ubuntu 和windows 都是一样的 都有现成的库。可以下载下来。

原来FFmpeg这么有意思

下载下来就是一个这个东西。我这边大概71M。还挺大的,因为里面官方给我们把大部分基本的功能都给编译进去了。所以这么大,但是如果我们自己编译的话,会小很多。可以吧一下不需要的东西直接disable

原来FFmpeg这么有意思

第二步

那当然是打开我们的terminal,windows 直接win+R 然后cmd就ok,然后cd 到我们下载的ffmpeg静态库的文件路径,执行一下命令,不出意外的话,这时候你应该可以看到以下页面

./ffmpeg
复制代码

如果出现一下内容,说明这时候你的ffmpeg 已经ok了

原来FFmpeg这么有意思

如果说权限不足的话 ,cd到你的静态库路径下执行这个就可以了。加个sudo,然后在change mode 一下 赋予777权限

chmod +x  ffmpeg
chmod 777 ffmpeg
复制代码

这时候ffmpeg环境已经准备好了。接下来万事俱备只欠东风了。

第三步

视频拼接,那么如何视频拼接呢,不用担心 ffmpeg 已经给我们做好了相应的封装了。只要了解相应的命令就可以完成了最基础的视频拼接功能了。其实ffmpeg不仅仅如此啊,他的功能太强大了。

先简单的来几个命令看看,查看视频文件信息

./ffmpeg -i input.mp4
复制代码

这时候我们可以看到视频的具体信息fps,宽高啊,视频质量啊,等等很多信息

原来FFmpeg这么有意思

-i 的指令就是入参的,接下来我们直接看如何通过命令把一个视频合在一起,就比如上面两个视频合在一起的小姐姐,我们通过电脑简单的来合成一下。

./ffmpeg -i input2.mp4  -i input2.mp4  -filter_complex [0][1]vstack -y output.mp4 
复制代码

成功的话应该是以下页面

原来FFmpeg这么有意思

这一个MP4文件是同级目录下的文件,大家可以换成自己的文件名就可以,至于filter_complex吗?我这边就大白话讲了,就相当于我们 java 中的函数一样,你把输入给他 在这个方法体内,把相应的输出给你。 vstack 可以官网看到这样的介绍 Stack input videos vertically.就是垂直拼接视频的意思,同理如何想水平的话,只要把vstack 改成hstack就可以了,老铁们是不是很简单,很给力,

最主要的是自己通过命令行就可以完成一些视频的基本操作,什么ps,Photoshop,我命令行就ok了。哈哈哈哈哈哈哈哈

刚刚作出来的视频效果,截图给大家看看

原来FFmpeg这么有意思

说好的小姐姐呢,tmd 这是什么鬼很可怕,博主换了个视频 哈哈哈,但是这个效果的话产品看到会骂死人的,接下来的文章将会给大家讲解如何优化视频效果。

Ending

希望给老铁们带来的是知识的储备而不是时间的浪费。这一期就说到这里,最简单的方式实现视频画面的拼接,下一期将会给大家带来更多的内容。大家也可以在留言里说说更想了解哪一方面的内容。我会根据大家的意见来写,


以上所述就是小编给大家介绍的《原来FFmpeg这么有意思》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Beginning ASP.NET 4 in C# and Vb

Beginning ASP.NET 4 in C# and Vb

Imar Spaanjaars / Wrox / 2010-3-19 / GBP 29.99

This book is for anyone who wants to learn how to build rich and interactive web sites that run on the Microsoft platform. With the knowledge you gain from this book, you create a great foundation to ......一起来看看 《Beginning ASP.NET 4 in C# and Vb》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换