问题描述
我正在创建一个像 youtube 这样的流媒体应用程序,而我在创建它时我面临着与不同质量的视频转换相关的许多挑战。
我的问题是
我是否应该将原始视频文件转换为多个视频文件(如 240p、480p 和 720p)并存储它们?或者无论如何我可以创建一个视频文件,该文件可以以多种质量播放,例如 youtube。
解决方法
多个视频文件是要走的路。目前,自适应流媒体最常见的方法是MPEG-DASH。可以使用 ffmpeg 和 mp4box 生成不同的视频大小和 MPD 清单(类似于不同视频大小的播放列表)。许多视频播放器,例如Video.js 或 Dash.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