视频处理支持不同的网络播放器和质量

视频处理支持不同的网络播放器和质量

我正在尝试实现类似 YouTube 播放器的功能。我现在面临的最大问题是如何处理用户上传的视频文件。

例如,由于我想在 240p、360p、480p 和 720p 之间切换,我需要将每个上传的视频文件转换为 4 个不同的文件,每个分辨率都有不同的文件,而且由于并非所有浏览器都可以播放 .mp4,所以我需要 .ogg、.mp4、.webm,这样就有 12 个视频文件。如果处理 1h 的视频文件需要 10 分钟,那么处理该文件就需要大约 2h,这太疯狂了。我知道 YouTube 使用云服务器来处理每个视频文件,并且具有强大的处理能力,但我认为这一定有什么技巧。

所以我的问题是我能做些什么以及 YouTube 如何处理这个问题?

我的第二个问题是,FFmpeg 是否适合这种工作,如果适合,为什么这个命令需要很长时间才能完成?我在 720p 3 分钟长的视频文件上运行了这个命令,经过 15 分钟的处理后,我取消了该过程。

ffmpeg -i hd.webm a.mp4

另一方面,这个大约需要 7 分钟才能完成,但它从 25mb 文件中生成了 200mb 的视频文件:

ffmpeg -i hd.webm -c:v libx264 -preset ultrafast a.mp4

答案1

您只需要 4 个视频文件,用于不同的视频大小。但您实际上不需要这 3 个不同的媒体容器,而只需要一个可以由视频播放器处理的容器。仅使用一个编解码器(如 H.264)对视频进行编码。

现在你只是在处理视频,却不知道自己实际上在做什么。使用 FFmpeg 的默认设置,这就是你遇到这些结果的原因。libx264 的设置ultrafast编码相对较快,但会导致文件大小较大。阅读x264 编码指南有关 libx264 最重要的设置的更多信息。

如果您想将视频编码为 480p,这里有一个命令行示例:

ffmpeg -i hd.webm -s 854x480 -b:v 15M -b:a 128k -c:v libx264 -c:a libfdk_aac -preset veryfast output.mp4

此 YouTube 支持页面描述了 YouTube 喜欢如何接收视频。也许你也可以从中学到一些东西。

相关内容