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

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

提示三:我们是android视频编辑的专业团队,以下分享的文字,完全实际经验总结,每一个知识点您都可以在我们的SDK或开源的工程中验证.

[size=13.3333px]我们的SDK:https://github.com/LanSoSdk/LanSoEditor_common(收费的,但写了30个详细注释,适合初学者学习,可以用来练手)
开源的工程:https://github.com/WritingMinds/ffmpeg-android(免费的,需要自己编译,需懂linux和ndk)
这两个工程您都可以测试,学习后, 然后再决定采用何种方式对您的项目最有利。

正文:

[size=13.3333px]1, 做 android 上的视频编辑,一定要从编辑ffmpeg开始吗?

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

[size=13.3333px]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的费用远远小于您人力成本和时间成本的费用^_^。

转载自:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=922749#lastpost

android平台短视频技术之视频编辑的经验分享相关推荐

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

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

  2. android 评测软件,Android平台五款主流在线视频软件横向评测

    Android软件中的在线流媒体视频已经出了不少了,本篇评测就是针对目前主流的5款Android在线视频播放软件进行一个横向评测,让您全面了解其个特性. 参评游戏: 评测项目 多款Android视频播 ...

  3. 音视频技术:视频质量评价方法简介

    视频质量评估(VQA)一直是个很活跃的研究领域,原因其一是业内一直缺少一种统一且准确的评估标准,其二是影响视频质量的因素过多,且包含很多主观因素,难以客观.定量地评价.经过这么多年的研究,已经诞生了非 ...

  4. 音视频技术:视频质量评价方法简介 1

    视频质量评估(VQA)一直是个很活跃的研究领域,原因其一是业内一直缺少一种统一且准确的评估标准,其二是影响视频质量的因素过多,且包含很多主观因素,难以客观.定量地评价.经过这么多年的研究,已经诞生了非 ...

  5. GB/T28181-2016传输要求和Android平台设备接入技术实现

    相关协议规范 GB/T28181-2016公共安全视频监控联网系统 信息传输.交换.控制技术要求相关的传输要求如下: 5.1 网络传输协议要求 联网系统网络层应支持IP协议,传输层应支持 TCP和 U ...

  6. 高德车载导航Android平台DR回放技术方案

    导读 DR:(英文为Dead Reckoning,航迹推算).用于推算的传感器大致有:陀螺仪.四轮速.车速脉冲.3D加速度计等.在车载导航中,航位推算是使用先前确定的位置,通过测量移动的距离和方位,计 ...

  7. 【音视频技术】视频质量评价 MSU VQMT Netflix vmaf

    视频质量评价工具实验文档 实验工具采用全参考的两个工具: MSU VQMT NetFlix vmaf 因为普遍使用psnr来做视频质量评价指标,本实验主要进行测试及对比,故只使用psnr作为两个工具的 ...

  8. 计算机自动化技术要学什么,【经验分享】PLC学习的5个阶段,自动化工程师看看你属于哪个阶段?...

    原标题:[经验分享]PLC学习的5个阶段,自动化工程师看看你属于哪个阶段? 正文 PLC可编程控制器在学习的时候是需要经过5个阶段的,每个知识的学习都是要经过一定的应用积累.PLC可编程控制器在学习的 ...

  9. 南师大教育技术学初试复试调剂经验分享

    南师大教育技术学考研经验分享 1 概述... 1 2 初试准备经验... 2 2.1 政治部分... 2 2.2 英语部分... 2 2.3 c语言和web部分... 2 2.4 数据结构部分... ...

  10. 阿里技术专家:日活5亿的淘宝技术发展历程和架构经验分享!18页ppt详解

    点击"技术领导力"关注∆  每天早上8:30推送 作者| Mr.K   编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 本文整理自,阿里高级技术专家 王 ...

最新文章

  1. java获取response数据_Java中实现Http请求并获取响应数据
  2. Linux Shell脚本_较少Swap使用
  3. 因不满被拒,研究员公开 IBM 企业安全软件中的4个 0day
  4. peterson算法p0流程图_Dekker算法与Peterson算法
  5. 「面试必背」多线程面试题(快收藏)
  6. R语言非度量多维标尺排序NMDS及一般加性模型GAM映射教程
  7. linux设置开机自启动网络,linux设置开机自启动
  8. 服装电商APP软件开发平台作用
  9. javaIO流之缓冲流
  10. 分频电路的实现:奇数分频、偶数分频和小数分频
  11. 开心网辅助程序开发手记
  12. python常用的表达式有关系表达式_数学关系式 表示成正确的 Python表达式为_________。_学小易找答案...
  13. 数据结构之广义表(C语言)
  14. 损失函数(Loss)
  15. libusb使用指南
  16. Docker:overlay2浅析
  17. 【CVPR2020】【逆推】Image Processing Using Multi-Code GAN Prior
  18. IList和List解惑
  19. 达梦DM7_dmdbchk使用
  20. 《引爆用户增长》学习笔记

热门文章

  1. ZOJ3775 ?(_o)!
  2. c语言二进制转换算法栈,用C语言顺序栈实现十进制和二进制的转换
  3. CSDN产品公告第1期:APP新增大厂在线刷题功能、博主排名规则更新、MD编辑器优化
  4. css3有趣的transform形变
  5. 5分钟弄懂:语音识别技术原理
  6. 内存数据库eXtremeDB介绍(1)
  7. html图片消失代码,HTML图片代码
  8. 别再问如何用Python提取PDF内容了!
  9. 这是关于“树先生“的故事
  10. 简述关系数据库的数据完整性规则_什么是数据库关系的完整性?