android平台短视频技术之 视频编辑的经验分享.

提示一: 各位看官,这里分享的是视频编辑,即剪切/拼接/分离/合并/涂鸦/标记/叠加/滤镜等对视频的编辑操作.不是流媒体网络播放等功能,请注意.

提示二: 这些文字90%的为普及知识,10%为宣传我们的SDK,因为分享别人,有利自已,才是良性循环,才可以让我们持续分享,毕竟只分享,不有益很难持续下去.要养家糊口啊^_^.

提示三:我们是android视频编辑的专业团队,以下分享的文字,完全实际经验总结,每一个知识点您都可以在我们的SDK或开源的工程中验证.
我们的SDK:https://github.com/LanSoSdk/LanSoEditor_common(收费的,但写了30个详细注释,适合初学者学习,可以用来练手)
开源的工程:https://github.com/WritingMinds/ffmpeg-android(免费的,需要自己编译,需懂linux和ndk)
这两个工程您都可以测试,学习后, 然后再决定采用何种方式对您的项目最有利。

正文

1, 做 android 上的视频编辑,一定要从编辑ffmpeg开始吗? 

完全不是。需求是最重要的,android从4.1开始提供了MediaCodec类,你要做视频提取图片,用mediacodec或mediaextractor就可以;你做视频裁剪,用MediaCodec也可以;你要做视频缩放,用MediaCodec+ Opengl是最好的选择;完全不一定用ffmepg来做。

2,那么为什么很多用ffmpeg来完成?
因为ffmpeg封装了很多的格式,使用起来比较灵活,简单,兼容性好,他的命令行可以帮你节省大量的时间,比如视频裁剪 ffmpeg -ss 10 -t 20 -i INPUT -acodec copy -vcodec copy OUTPUT;这样就完成了,不再需要您自己去编写大量的代码。
3,ffmpeg可以帮我完成大部分的视频编辑功能吗?
没有优化的ffmpeg在功能可以,但性能不行。由于手机CPU的性能的限制,有些命令处理起来比较慢,比如overlay命令,colorchannelmixer命令 eq命令,libx264编码功能,这样你功能上虽然实现了,但处理一个10秒的视频,要花费2分钟,这样的功能,估计很难在APP里使用。我们的SDK针对这样的情况,做了硬解码器和硬编码器,完全加速ffmpeg的执行,这个也是我们SDK的核心所在。
4,ffmpeg我怎么开始做呢?
    如果您是初学者,建议不要一上来就编译ffmpeg,因为网上github上编译好的工程太多了,你的目的是学习使用到你项目中。再说了,如果你要用ffmpeg实现一些复杂的运算,即使你花费一周时间编译好了,结果发现功能可以满足,但处理起来太慢了,根本无法使用,事倍功半,也是没意义的。建议用上面推荐的两个链接,先学习了再说,即使收费的版本,但ffmpeg的命令代码是公开的,运行是不变的,只是有时间和其他限制而已,学习ffmepg是没有阻碍的。建议先学习起来再说,毕竟熟悉了,才可以灵活的使用。
5,ffmpeg哪些功能执行较快,并且免费工程里也可以实现?
         像普通的音视频剪切,分离,合成,拼接,封装,格式转换这些是可以的。因为没有用到视频数据解码和编码操作,执行起来很快;比如秒拍中音乐那个功能,他用到的命令有: 音频裁剪,把视频中的音频分离,然后把新的音频在和视频合并;用到音量调节,也可以用ffmpeg的amixer来实现;再比如秒拍中的视频截取,其实就是用ffmpeg的截取命令来实现的;再比如你直接把MediaCodec编码好的H264裸码流保存成文件,你想封装成mp4格式,让别的播放器也可以播放,则用ffmpeg的封装命令就可以实现,不需要自己去封装。如果您的项目中只用到这些,则免费版本就可以满足,完全不需要收费的SDK。
6,普通的ffmpeg哪些功能较慢,不适合使用?
         在一些需要用到操作视频画面像素的场合,比如用overlay做叠加,colorchannelmixer或eq做滤镜,用scale缩放,用到视频解码-->处理-->再编码的场合。
         这些功能的大概工作流程是:
         第一步解码,如果采用硬件解码,则会快很多,如果用软解码,即使经过NEON批处理优化,处理速度还是不够理想;
         第二步处理,假如您用到的是colorchannelmixer这个命令,他的工作原理是事先把255个像素值根据您的设置全部放到一个表里,在处理一个像素时,利用查表法来得到处理后的值,虽然快一些,但和用opengl比较起来还是很慢,毕竟这个是一个像素一个像素的去做,而opengl则采用矢量并行处理,速度上完全不能比;
         第三步:视频编码,ffmpeg本身不带H264视频编码器,需要使用外部的,比如libx264,libopenh264这些,但也是软编码。
         你的视频每帧都需要经过这三步来做,解码,处理,再编码。这样下来,假如20秒的视频,每秒25帧,则是500帧,如果不用硬件加速来做,速度上估计很难完成。
         我们的SDK针对这样的情况,做了硬解码和硬编码,加速ffmpeg的执行,让它跑快一些,这个也是我们SDK的核心所在。
 7,有没有好的办法,又想实现功能,又想用免费版本的?
      有。 用MediaCodec+ OpenGL的形式来做,把ffmpeg一些处理慢的操作,统统用MediaCodec+OpenGL来实现,比如滤镜,比如叠加,比如缩放等,我们高级版本中的大部分操作也是用opengl来做的,我们做了大量的工作,让你像操作一个ArrayList类一样,增加一个媒体,删除一个媒体,简单易用。
      
 8,如果我们自己做,需要懂得哪些知识:
     首先你要从战略上轻视它^_^,毕竟又不是让你去搞科研,去搞高精尖,去获得诺贝尔奖。这是一项技术,一项已经很成熟的技术,类似学习android的UI,学习java的编程一样的一项技术,需要的是在这方面知识的积累和花时间去做的事情。如果你是初学者,那需要花很长的时间去学习,去摸索的事情,然后精通的过程。
     再者你就要从战术上重视它^_^, 涉及到的知识点有:
      8.1 linux基本操作,在这里强烈不推荐在windows下用cygwin来搞,第一很难行通,第二事倍功半。
      8.2 ndk和jni,gcc的知识,因为你要做的最终要封装成java的一个类和方法,让做UI的工程师调用,并需要懂得一些java的编程,这样你调试起来会快一些。
      8.3 视频的知识。这个必不可少,也不用多说,毕竟做的是视频编辑,像视频格式,音频,pcm,h264的基本知识,视频码率,分辨率,帧率,ffmpeg的常用命令等等。
      8.4 懂得视频知识后,强烈推荐完全精通MediaCodec和视频播放原理,因为这个可以帮你节省大量的时间去实现一个功能。

总结:不要一上来就编译,学以致用才重要,用免费的版本消耗的是人力成本和时间成本,用我们的SDK可以加速您项目的开发,再说我们的SDK的费用远远小于您人力成本和时间成本的费用^_^。

时间: 2024-08-14 14:37:49

android平台短视频技术之 视频编辑的经验分享.的相关文章

关于Android在线支付Alipay(支付宝)开发的经验分享

在近期,公司需要开发一个关于在线支付的模块,所以需要用到第三方支付平台 转载请注明出处:http://blog.csdn.net/ht_android/article/details/45307165 经过一周多的时间对这两种支付平台的研究,完成功能后将经验分享给大家,希望能帮助到有需求的朋友. 首先是支付宝的开发资料方面: 接口申请url https://b.alipay.com/order/productDetail.htm?productId=2014110308141993 API开发文

Unity技术支持团队性能优化经验分享

https://mp.weixin.qq.com/s?__biz=MzU5MjQ1NTEwOA==&mid=2247490321&idx=1&sn=f9f34407ee5c5d0d1edb478981299108&chksm=fe1e2fbac969a6acee4eddb865d161fe09400c9147794c777ea4087e59f1e5fc3ccca5d1d0dd&scene=21#wechat_redirect 在10月26日的Unity独立游戏日上,

浅析:android的apk文件上线前加密和签名经验分享

第一步加密: 1.加密的意义 如果不对其软件进行加密很容易被人家反编译导致源代码的泄漏,查出服务器的地址而间接的收到攻击,等一系列问题. 2.加密的方法 可以使用爱加密网址:  http://www.ijiami.cn/     对apk进行加密,这是第三方提供的安全可靠!,详情可以参考:http://jingyan.baidu.com/album/925f8cb8151347c0dde0563d.html 第二部签名 第二部签名: 1.签名的意义 为了保证每个应用程序开发商合法ID,防止部分开

音视频技术开发周刊 93期

『音视频技术开发周刊』由LiveVideoStack团队出品,专注在音视频技术领域,纵览相关技术领域的干货和新闻投稿,每周一期.点击『阅读原文』,浏览第93期内容,祝您阅读愉快. 架构 Nodejs+socket.io搭建WebRTC信令服务器 本文介绍了 Nodejs 的工作原理.Nodejs的安装与布署,以及如何使用 要sokcet.io 构建 WebRTC 信令消息服务器.socket.io 由于有房间的概念所以与WebRTC非常匹配,用它开发WebRTC信令服务器非常方便. 蔡锐涛:CG

Android平台 视频编辑的高级版本

基本覆盖了秒拍,美拍,快手等视频编辑的大部分功能. 增加了44种滤镜,基本覆盖市面上大部分APP中的滤镜效果. 可以实现视频和视频, 视频和图片,视频和您的UI界面叠加. 在叠加的过程中:支持任意时间点的加入,隐藏,显示,退出.支持同时获取媒体来任意叠加,支持叠加过程中的各种调节,支持实时保存. 可以实现 图片和图片的叠加,来实现多张图片合并成影集的效果. 可以实现当视频播放中,手指滑动画面,即出现一个箭头,来实时的标注.后期我们会举例涂鸦的功能. 支持声音混合,音量调节. 我们完全以API的形

本人讲课时录制的Android应用开发技术教学视频

网盘地址:http://yun.baidu.com/pcloud/album/info?query_uk=1963923831&album_id=3523786484935252365 本人讲课时录制的视频,采用webex录制,视频文件内容相对较小30-50兆左右,1个视频文件平均大概有1个小时左右的时间,每个例子基本上从建立项目开始边做边讲. 由于讲课范围是Android应用开发技术,视频没涉及搭建环境,基础控件的使用等基础内容. 主要内容包括: 后台服务. 服务的绑定.服务和线程.远程服务和

Android中直播视频技术探究之---视频直播服务端环境搭建(Nginx+RTMP)

一.前言 前面介绍了Android中视频直播中的一个重要类ByteBuffer,不了解的同学可以 点击查看 到这里开始,我们开始动手开发了,因为我们后续肯定是需要直播视频功能,然后把视频推流到服务端,本地在进行拉流播放的流程.所以这个过程中,我们需要首先来把服务端这个中间环节的工作搞定,后续再弄推流和拉流功能.现在推流大部分都是使用RTMP/HLS协议的,关于这两个协议的区别: 所以我们服务端搭建就需要用这两个协议,不过本文放心了,不会去手动的编写一套协议代码的,谁叫这个世界属于开源呢? 需要的

android 安卓平台 H264编码 解码 手机视频监控源代码 vfw驱动

系统框架 如图 原理描述: 采用分布式网络系统的方式,在手机端安装视频客户端软件,在远程服务器端安装camera服务器软件,采集摄像头实时视频,进行H264编码,并以自定义TCP服务器形式发布,手机端则通过客户端的软件,输入服务器的IP地址,连接和观看实时视频. 功能介绍: 目前学习版支持采集320*240视频,服务器端支持开机自启动和3322动态域名,为adsl拨号的朋友提供动态域名服务器,免去变动的ip的影响.且每帧发送的H264编码包大小可在界面实时显示.手机端,暂不提供人机界面输入功能,

Android平台下通过JNI快速实现音视频通信

音视频通信 作为独立开发者或想缩短音视频开发周期的公司来说,想要在Android平台下实现音视频通信,最快捷的方法是寻找开源项目或调用其他公司API.之所以这么说是因为音视频通信技术涉及到底层音视频采集.解码. FFmpeg(音视频处理解决方案).媒体流传输协议等太多太多相关技术知识点.试了几个开源项目,视频差强人意,语音与视频不同步等不稳定因素.因此我把目光放到其他公司的API上(AnyChat音视频即时通讯解决方案),demo程序API提供了一系列纯Java语言的调用接口,通过JNI即可调用