You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用FFmpeg将单个输入文件编码为带主播放列表的多HLS流

单输入文件生成多码率HLS流(带主播放列表)的FFmpeg实现方法

没问题,单输入场景下用FFmpeg配合libx264生成多码率HLS流+主播放列表其实非常直接——核心就是用-var_stream_map参数把同一个输入的音视频映射到不同的编码配置上,再搭配HLS相关参数自动生成主播放列表。

完整命令示例

这里以把一个MP4文件编码为360p和720p两个HLS流为例,同时生成主播放列表:

ffmpeg -i input.mp4 \
  # 第一个流:360p分辨率,低码率
  -c:v libx264 -crf 28 -preset medium -maxrate 1000k -bufsize 2000k -vf "scale=640:360" \
  -c:a aac -b:a 128k \
  -hls_segment_filename "360p_%03d.ts" 360p.m3u8 \
  # 第二个流:720p分辨率,高码率
  -c:v libx264 -crf 24 -preset medium -maxrate 2500k -bufsize 5000k -vf "scale=1280:720" \
  -c:a aac -b:a 192k \
  -hls_segment_filename "720p_%03d.ts" 720p.m3u8 \
  # 映射变体流,生成主播放列表
  -var_stream_map "v:0,a:0 v:1,a:1" \
  -master_pl_name master.m3u8 \
  -hls_time 10 \
  -f hls

关键参数拆解

  • -var_stream_map:这是实现多码率的核心。"v:0,a:0 v:1,a:1"表示把第一个输出流的视频(v:0)和音频(a:0)作为第一个变体,第二个输出流的视频(v:1)和音频(a:1)作为第二个变体,顺序必须和上面的输出流一一对应。
  • libx264编码参数:
    • -crf:控制视频质量,数值越小质量越高(18-28是点播场景常用范围)
    • -preset:平衡编码速度和压缩效率,medium是兼顾速度和质量的通用选择
    • -maxrate/-bufsize:限制码率峰值,避免网络传输时出现卡顿
    • -vf "scale=W:H":按需缩放视频到目标分辨率
  • HLS相关参数:
    • -hls_segment_filename:指定每个流的TS分片文件名格式,避免不同流的分片文件冲突
    • -master_pl_name:指定生成的主播放列表文件名,FFmpeg会自动把所有变体流的信息(分辨率、码率、地址)写入这个文件
    • -hls_time 10:设置每个TS分片的时长为10秒(默认2秒,10秒更适合HLS分发)

实用扩展技巧

  • 共用音频流:如果想让多个视频流共用同一条音频流(节省编码资源),只需调整var_stream_map为"v:0,a:0 v:1,a:0",这样两个视频流都复用第一个输出的音频流。
  • 添加更多码率流:只需复制一组编码参数,调整分辨率、码率等配置,然后在var_stream_map里追加对应的映射项(比如v:2,a:2)即可。
  • 兼容旧客户端:如果需要兼容不支持最新HLS标准的客户端,可以加上-hls_playlist_type vod(点播场景)或-hls_playlist_type event(直播场景)。

内容的提问来源于stack exchange,提问作者Dennis Mungai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:29:45