如何使用ffmpeg创建多质量视频流系统?

问题描述

我正在创建一个像 youtube 这样的流媒体应用程序,而我在创建它时我面临着与不同质量的视频转换相关的许多挑战。

我的问题是

我是否应该将原始视频文件转换为多个视频文件(如 240p、480p 和 720p)并存储它们?或者无论如何我可以创建一个视频文件,该文件可以以多种质量播放,例如 youtube。

解决方法

多个视频文件是要走的路。目前,自适应流媒体最常见的方法是MPEG-DASH。可以使用 ffmpegmp4box 生成不同的视频大小和 MPD 清单(类似于不同视频大小的播放列表)。许多视频播放器,例如Video.jsDash.js 支持带有 MPEG-DASH 的自适应流媒体。

生成视频文件:

ffmpeg -y -i movie.avi -an -c:v libx264 -x264opts 'keyint=24:min-keyint=24:no-scenecut' -b:v 1500k -maxrate 1500k -bufsize 3000k -vf "scale=-1:720" movie-720.mp4
ffmpeg -y -i movie.avi -an -c:v libx264 -x264opts 'keyint=24:min-keyint=24:no-scenecut' -b:v 800k -maxrate 800k -bufsize 1600k -vf "scale=-1:540" movie-540.mp4
ffmpeg -y -i movie.avi -an -c:v libx264 -x264opts 'keyint=24:min-keyint=24:no-scenecut' -b:v 400k -maxrate 400k -bufsize 800k -vf "scale=-1:360" movie-360.mp4
ffmpeg -y -i movie.avi -vn -c:a aac -b:a 128k movie.m4a

生成清单:

mp4box -dash-strict 2000 -rap -frag-rap -bs-switching no -profile "dashavc264:live" -out movie-dash.mpd movie-720.mp4 movie-720.mp4 movie-720.mp4 movie.m4a

原始来源:https://gist.github.com/andriika/8da427632cf6027a3e0036415cce5f54