FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。在音视频开发过程中,经常需要使用 FFmpeg 将原先的一个单视频文件转换为多个HLS 流文件,用于视频直播和点播,当然我们视频直播点播平台EasyDSS也会使用FFmpeg作为能力程序,当需要将视频流转化为HLS 流时,我们就可以通过FFmpeg来进行转换。
通过互联网直播点播平台EasyDSS播放的单视频文件一般有多种格式,比如mp4、mkv等封装好的视频格式。HLS 流文件由 m3u8 文件和视频 TS 文件组成,如下图所示:
以下命令可以将 input.mp4 文件转换为 output.m3u8 格式的视频流文件。
ffmpeg.exe -fflags +genpts -hide_banner -i input.mp4 -vcodec libx264 -acodec copy -strict -2 -f hls -hls_time 8 -hls_list_size 0 output.m3u8
命令中-vcodec libx264 代表转码后的文件视频编码为 h264 编码,-acodec copy 代表转码后的文件音频编码直接采用 input.mp4 内部原有的音频编码。
如果计算机中存在英伟达显卡,对于以上参数还可以继续优化,将 libx264 修改为 h264_nvenc,即可加快转码速度。
ffmpeg.exe -fflags +genpts -hide_banner -i input.mp4 -vcodec h264_nvenc -acodec copy -strict -2 -f hls -hls_time 8 -hls_list_size 0 output.m3u8
libx264 参数为仅使用 cpu 的能力进行视频转码,h264_nvenc 调用了显卡的程序进行转码,速度更快。
如果输入的视频文件,本身的视频编码为 h264 编码,可以再次优化以上程序。使用以下程序可以查看 input.mp4 文件的视频和音频编码。
ffmpeg.exe -i input.mp4
以上第一个红色框中,代表视频编码为 h264 编码,可以使用以下代码转码,加快转码速度。
ffmpeg.exe -fflags +genpts -hide_banner -i input.mp4 -vcodec copy -acodec copy -strict -2 -f hls -hls_time 8 -hls_list_size 0 output.m3u8