You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

FFmpeg执行HLS转码命令报错'Unrecognized option 'var_stream_map''求助

解决FFmpeg中'Unrecognized option 'var_stream_map''错误的方案

你遇到的这个问题根源很清晰——你的FFmpeg版本(3.4.2)太老旧了,var_stream_mapFFmpeg 4.0及以上版本才正式引入的特性,3.x系列版本完全不支持这个选项。下面给你两种可行的解决思路:

方案一:升级FFmpeg到4.0+版本(推荐)

针对你使用的Ubuntu 16.04系统,可以通过第三方PPA源快速升级FFmpeg,操作步骤如下:

  1. 添加FFmpeg 4.x的PPA源:
sudo add-apt-repository ppa:jonathonf/ffmpeg-4
  1. 更新软件包列表并完成升级:
sudo apt update && sudo apt upgrade ffmpeg
  1. 验证升级结果:
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,提问作者陈永林

火山引擎 最新活动