FFmpeg执行HLS转码命令报错'Unrecognized option 'var_stream_map''求助
解决FFmpeg中'Unrecognized option 'var_stream_map''错误的方案
你遇到的这个问题根源很清晰——你的FFmpeg版本(3.4.2)太老旧了,var_stream_map是FFmpeg 4.0及以上版本才正式引入的特性,3.x系列版本完全不支持这个选项。下面给你两种可行的解决思路:
方案一:升级FFmpeg到4.0+版本(推荐)
针对你使用的Ubuntu 16.04系统,可以通过第三方PPA源快速升级FFmpeg,操作步骤如下:
- 添加FFmpeg 4.x的PPA源:
sudo add-apt-repository ppa:jonathonf/ffmpeg-4
- 更新软件包列表并完成升级:
sudo apt update && sudo apt upgrade ffmpeg
- 验证升级结果:
ffmpeg -version
升级完成后,你就能直接运行原来带var_stream_map的命令,不会再出现选项不识别的错误。
方案二:不升级,用老版本兼容的方式生成HLS多码率流
如果因为环境限制无法升级FFmpeg,你可以手动拆分转码流程,自行生成主播放列表(master.m3u8):
步骤1:分别转码生成不同码率的音视频流
单独生成低码率和高码率的HLS流:
- 低码率流(视频1000k + 音频32k):
ffmpeg -re -i ./2898654.mp4 -b:v 1000k -b:a 32k -hls_time 10 -hls_list_size 0 -f hls ./out_low.m3u8
- 高码率流(视频3000k + 音频64k):
ffmpeg -re -i ./2898654.mp4 -b:v 3000k -b:a 64k -hls_time 10 -hls_list_size 0 -f hls ./out_high.m3u8
说明:
-hls_time指定切片时长,-hls_list_size 0表示保留所有切片文件,避免自动删除旧切片。
步骤2:手动创建master.m3u8主播放列表
新建一个名为master.m3u8的文件,写入以下内容:
#EXTM3U #EXT-X-VERSION:3 #EXT-X-STREAM-INF:BANDWIDTH=1032000,RESOLUTION=1280x720,CODECS="avc1.4D401E,mp4a.40.2" out_low.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=3064000,RESOLUTION=1920x1080,CODECS="avc1.4D401F,mp4a.40.2" out_high.m3u8
补充:
BANDWIDTH的值是视频码率+音频码率的总和(比如1000k+32k=1032k,对应1032000);RESOLUTION可根据原视频分辨率调整;CODECS可通过ffprobe ./2898654.mp4查看原视频编码格式后替换。
这种方式生成的主播放列表,同样能实现多码率HLS流的切换功能,和var_stream_map的效果一致。
内容的提问来源于stack exchange,提问作者陈永林




