我正在开发一个允许用户共享视频的应用。问题在于许多视频的比特率很高。例如,来自旧iPhone的4分钟的H264视频以1080p编码,运行速度为17163 kb / s(约500兆字节)。以这种比特率/分辨率接收和分发此类视频对于社交应用而言并不现实。
我一直在用ffmpeg进行播放,以将视频转码为较小的尺寸和较高的压缩率,但未取得令人满意的结果。例如:
ffmpeg \
-i "$src" \
-vf scale=w='if(gt(iw\,ih)\,780\,-2)':h='if(gt(iw\,ih)\,-2\,780)' \
-c:v libx264 \
-crf 28 \
-preset medium \
-pix_fmt yuv420p \
-movflags +faststart \
out.mp4
此命令将上述500MB文件转码为67MB。它将视频的较大尺寸缩放到780像素,并相当压缩视频。结果还可以,但是文件仍然很大。
将较长的尺寸减小到480像素,文件减小到40MB。仍然很大,现在已大大退化。另外,转码仍需要相当长的时间:在我4岁的具有16GB RAM的i7 Macbook Pro上,约为1-1.5倍。
我不确定如何对此进行改进。浏览器不支持H265。我想知道:
这是否尽善尽美?
Is this as good as it gets?
是。没有免费的视频编码午餐。
如果机器在某些intel CPU上具有QuickSync或Nvidia Gpus上的nvenc这样的硬件编码器,则可以加快编码速度。但是文件大小将相同,甚至更大。