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

Javascript 如何使用ffmpeg创建多质量视频流系统?,javascript,node.js,c,ffmpeg,ffmpeg-php,Javascript,Node.js,C,Ffmpeg,Ffmpeg Php,我正在创建一个像youtube这样的流媒体应用程序,而在创建它的同时,我面临着许多与不同质量视频转换相关的挑战 我的问题是 我应该将原始视频文件转换为多个视频文件(如240p、480p和720p)并存储它们吗?或者,我可以创建一个视频文件,它可以像youtube那样以多种质量播放。多个视频文件是最好的选择。目前,自适应流媒体最常用的方法是。不同的视频大小和MPD清单(类似于不同视频大小的播放列表)可以使用和生成。许多视频播放器,例如,或支持带有MPEG-DASH的自适应流媒体 生成视频文件: f

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

我的问题是


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

多个视频文件是最好的选择。目前,自适应流媒体最常用的方法是。不同的视频大小和MPD清单(类似于不同视频大小的播放列表)可以使用和生成。许多视频播放器,例如,或支持带有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

原始来源:

如果有这样的视频格式,那么使用它是没有意义的。服务器应仅向客户端发送一种质量的视频。如果我想通过观看140p来下载140p+4k视频文件,而我真正想要的视频文件只需要几小时,而不是几秒钟,那么把一个包含4k和140p的文件放在里面是没有意义的。Youtube也不会动态缩小规模,它们会预先计算不同的分辨率,其他任何东西都太慢。通常,你是否想要多个不同的分辨率取决于你实际想要提供的分辨率。没有人阻止你只提供最初上传的视频文件。如果你想要多个分辨率,你需要转换/缩小原始分辨率。如果你曾经上传过youtube,你知道你的视频可能需要很长时间才能以所有分辨率播放。这是因为他们首先转换它并存储不同的版本。