首页 > 解决方案 > 对上传到我的应用程序的视频进行转码有哪些好的设置?

问题描述

我正在开发一个允许用户分享视频的应用程序。问题是许多视频的比特率非常高。例如,来自旧 iPhone 的 4 分钟 H264 视频以 1080p 编码,运行速度约为 17,000 kb/s(约 500 兆字节)。以这种比特率/分辨率接受和分发此类视频对于社交应用程序来说是不切实际的。

我一直在使用 ffmpeg 将视频转码为更小尺寸和更高压缩率,但没有达到可接受的结果。例如:

ffmpeg \
    -i in.mov \
    -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 文件转码为 70MB。它将视频的较大尺寸缩放到 780 像素,并对视频进行了相当多的压缩。结果还可以,但文件仍然很大。

将较长的尺寸降低到 480 像素,文件减小到 40MB。仍然很大,现在显着退化。此外,转码仍然需要相当长的时间:在我 4 岁的 i7 Macbook Pro 和 16GB RAM 上大约需要 1-1.5 倍。

我不确定如何改进这一点。浏览器不支持 H265。我想知道:

这是最好的吗?

标签: videoffmpegvideo-processing

解决方案


Is this as good as it gets?

是的。视频编码中没有免费的午餐。

如果机器有硬件编码器,如某些英特尔 CPU 上的 QuickSync,或 Nvidia Gpus 上的 nvenc(或某些 Mac/iOS 上的 videotoolbox),您可以加快编码速度。但文件大小将相同,甚至更大。


推荐阅读