上传到我的应用程序的视频转码设置有哪些?

What are good settings for transcoding videos uploaded to my app?

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

我一直在使用 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。我在想:

这是最好的了吗?

Is this as good as it gets?

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

如果机器有硬件编码器,例如某些英特尔 CPU 上的 QuickSync,或 Nvidia Gpus 上的 nvenc(或某些 Macs/iOS 上的 videotoolbox),您可以加快编码速度。但是文件大小会一样,甚至会大一点。