1. 需求描述
Android手机拍摄的视频在PC上查看,视觉效果是被旋转了90度的;
于是我们想要使用ffmpeg对视频进行90度旋转,并要求保持视频的编码格式:AVC/AAC;
解决了这个问题后,还想用ffmpeg来进行更多的视频处理。
1.1 细化下来的需求点
- 视频旋转后大小不变
- 视频的编码格式和音频的编码格式不变
- 视频旋转后还可以继续在Chrome等HTML5浏览器中直接播放
1.2 视频的编码格式
1 | 视频流信息 |
这里要提下为什么使用这个格式,因为HTML 5支持的视频格式就是这几个,而其中最通用的就是上面这个:H.264/AAC
2. 最后有用的命令行是这个:
1 | # 视频转码成H.264,并旋转90度,音频格式保存不变 |
3. GPL的担忧和解决方案
使用命令行已经解决了我们的问题了,但是如果我们先使用ffmpeg作为库整合到我们的产品中会不会有开源协议上的风险呢?
我们使用的视频编码格式-vcodec 是h264,突然想到一个念头,如果我们的产品中使用了ffmpeg进行视频旋转,那么会不会导致我们的产品需要遵循GPL全部开源呢?因为好像H.264的开源协议是GPL的!
其实上面这句话是有问题的,因为没有区分清楚H.264和x264的关系:
H.264是一种编码规范,而x264是H.264的一种实现,x264使用GPL进行开源。
3.1 真正的担忧是:
如果我们使用了ffmpeg来处理我们的视频,我们是否会因为使用了x264而导致产品必须遵循GPL进行开源
3.2 ffmpeg如果不使用x264能支持H.264编解码吗?不行
ffmpeg的解码是LGPL的,编码是GPL的(x264)
The ffmpeg H.264 decoder is LGPL. Only the encoders are GPL, and x264 does not provide a decoder.
It also has the advantage over Framewave and IPP of actually being usable.
这一部分参考了下面的文章:
H264 Encoders other than ffmpeg x264
Does using H.264 with ffmpeg make my software GPL and if so are there workarounds?
Free/Open h.264 video decoding libraries? (Non-GPL)
3.3 如果视频格式使用H.264,又想对视频进行处理,应该怎么办?
3.3.1 服务端使用
服务端使用ffmpeg进行视频处理,由于没有分发,不受GPL的限制,可以自由使用。
3.3.2 终端使用
要对视频进行处理,就必然需要编码解码,而解码的话ffmpeg只能使用x264;
使用了x264的ffmpeg必须遵循GPL进行软件分发,这对商业软件来说是个很大的门槛;
3.3.3 综合下来的解决方案
方案一
客户端直接录制H.264视频,但不进行视频处理,视频处理交给服务端来做。
方案二
客户端入职视频采用非H.264格式,录制后本地就可以使用ffmpeg进行些简单的处理,上传到服务器后再进行H.264的转码,转码后再提供给HTML5播放。
方案三
客户端录制H.264视频,本地使用x264的商业授权进行分发。
方案四
客户端录制H.264视频,本地使用x264以外的其他视频库来编码视频。