我花了三天写了手机补帧神器

自从买了最新的iPad以后,我一直考虑移动办公的最大可能性。

目前可以实现远程桌面的方式访问Macbook,体验过TeamViewer,VNC Viewer,还有Google远程桌面。个人觉得Google的远程桌面做的最好。除了VNC Viewer走的VNC协议,其他两个都是通过录屏和TCP长连接实现的远程桌面的。Google远程桌面在触屏方面做的真的很好,但是不确定在国内是否可用。

不过因为我最近一直都在做短视频自媒体,并且对画质还有帧率要求非常高。在iPad上做视频剪辑非常方便,有个神器叫剪影,字节跳动公司开发的,免费使用。

但是这个App有两个我需求的痛点没有解决:

  1. 视频补帧问题。很多素材都是24 FPS,25 FPS或者 30 FPS,但是我希望能补帧到60FPS。自从入了60帧的坑,回头再也无法适应24帧的电影了。目前补帧的方法主要是光流法(optical flow),PC上专业的视频软件FCPX 或者 PR 安装一个叫 Twixtor的插件,就可以实现这个功能。但是这就太复杂了,我只想躺在床上用iPad 剪剪视频,然后补补帧,难道还要发到电脑上处理吗?
  2. 视频压缩问题。通俗来说,所有视频分享平台都有自己的二次压缩的标准,毕竟如果不对你视频进行二次压缩,那么服务器空间远远不够。这也是为什么你的视频做成4k,如果不压缩上传到微信公众号或者抖音,会变成渣渣像素。至于他们二次压缩的标准是什么,有的平台会公开,譬如B站,Youtube,有的不会公开。公开的话就非常好办,按照他们压缩标准来就行了,譬如b站的临界线就是视频的6000k 比特率,而抖音是不公开,需要自己摸索。我也是摸索好久。但是问题是,所有手机上的视频剪切App都不支持视频压缩,要么就是改比特率,但是不支持H264编码啊!众所周知,转码H264格式虽然慢但是效果真的好,目前我测试的视频,体积压缩到三分之一,视觉效果一点都不逊色!而你的视频越小,质量越好,就会小可能触发二次压缩,另外和你的账号本身也会有一定关系,这个就不多少了。

鉴于这两个痛点,我首先是搜索一下有没现有的App能支持其中任何一个痛点的,发现并没有。

其次我在思考解决方案,同时需要着手学习iOS App开发的知识。由于涉及到视频编码的问题,还是首要考虑原生开发。

在此之前我一直有想过学习Objective-c,虽然很多人说语言是相通的,尽管我写过很多语言Java,Python,Javascript,Golang,C,但是我依然还是习惯不了OC的语法,简直有点太难受。况且因为是工作后攒了钱才买的Mac,以前用黑苹果根本坚持不下去学OC,不然自己开发一个App自己用也是很酷的事情嘛。

直到2020的今天,我发现现在Swift 已经即将要替代这个丑陋的OC语言了,在海外社区iOS的开发者都是在用Swift5,我感觉我又可以入坑了。

在对比了SwiftUI 和 UIKit 这两个框架后,我打算入坑SwiftUI,目前苹果官网有非常良好的教程,上手写简陋的UI问题不大。

最后到了业务问题部分,怎么解决视频补帧和压缩部分。当然做过视频的同学当然都知道FFMpeg,所以我直接移植这个框架。但是之前在交叉编译的时候,老是蹦这个错

ld: unknown option: -target

虽然我重装了LLVM,brew reinstall llvm,依然还是不行。

xcode信息
报错信息
原因追踪

直到我反复检查环境,可能还是因为Python 3的环境问题。然后光速搭建重新搭建了环境。

经过三天不眠不休的编程和学习,我终于完成了这个粗糙的App,虽然丑吧,但是功能还是都有的。

运行截图如下:

App 截图

其实原理很简单,就是先加速视频,然后通过光流法让视频慢下来,这里可以看到针对原视频不同的FPS,应该选择不同的速率,然后点击Slow Motion的话就是补帧+压缩了。最后面为什么会有Add origin sound呢?因为光流法补帧后,会对音频音调产生一定影响,通过这个按钮可以直接把原视频的音频替换掉,解决掉这个问题。

当然,不想补帧的话,直接调节bit rate,直接压缩Compress就可以了。

至此,我可以好好的躺在床上剪视频,输出我想要的帧率和大小,再也不用担心视频平台对我的视频进行二次压缩了。舒服


你可能感兴趣的:(我花了三天写了手机补帧神器)