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

如何用FFmpeg调整码率帧率后重新推流.m3u8直播流?

用FFmpeg转码并重新推流.m3u8直播流的方法

当然可以用FFmpeg实现这个需求!这正是FFmpeg擅长的直播流处理场景,下面我会直接给你可用的命令,再拆解关键参数,方便你理解和调整。

核心转码推流命令

把下面的命令里的源地址和目标地址换成你实际的地址,就能直接运行:

ffmpeg -i "http://your-source-720p-stream.m3u8" \
  -c:v libx264 -preset veryfast -crf 28 \
  -s 640x360 -r 60 \
  -b:v 1000k -maxrate 1100k -bufsize 2000k \
  -c:a aac -b:a 128k \
  -f hls -hls_time 2 -hls_list_size 10 -hls_flags delete_segments \
  "http://your-target-push-url.m3u8"

关键参数拆解

我把每个重要参数的作用给你讲清楚,你可以根据自己的服务器性能和直播需求微调:

视频相关参数

  • -i "http://your-source-720p-stream.m3u8":指定你要处理的720p源直播流URL,替换成实际地址就行
  • -c:v libx264:选用H.264编码,这是目前直播领域兼容性最好的视频编码格式,几乎所有平台都支持
  • -preset veryfast:编码速度预设,直播场景优先保证低延迟和实时性,veryfast是平衡速度和质量的最优选择;如果服务器性能够强,换成faster能提升一点画质;性能有限的话用ultrafast也能凑合用
  • -crf 28:恒定质量控制参数,数值越大画质越低,28这个值搭配1mbps码率,刚好能满足360p/60fps的直播清晰度需求
  • -s 640x360:强制输出分辨率为标准360p(宽640,高360)
  • -r 60:锁定输出帧率为60fps,和源流保持一致,避免掉帧或帧率波动
  • -b:v 1000k -maxrate 1100k -bufsize 2000k:设置视频平均码率为1000kbps(也就是1mbps),maxrate限制峰值码率不超过1100k,bufsize是编码缓冲区大小,能让码率更稳定,避免卡顿

音频相关参数

  • -c:a aac -b:a 128k:音频用AAC编码,128kbps的码率既能保证音质,又不会占用太多带宽,是直播音频的常规配置

输出格式与推流参数

  • -f hls:指定输出格式为HLS(也就是.m3u8格式),和源流格式一致
  • -hls_time 2:每个TS切片的时长设为2秒,切片越短,直播延迟越低
  • -hls_list_size 10:播放列表里只保留最近10个切片,避免生成太多旧文件占用存储空间
  • -hls_flags delete_segments:自动删除已经过期的TS切片,进一步节省磁盘空间

额外注意事项

  • 如果你的目标平台支持RTMP推流(比如大多数直播平台),可以把输出格式改成RTMP,命令里的-f hls换成-f flv,目标地址换成RTMP URL,比如rtmp://your-server/live/your-stream-key
  • 如果遇到延迟过高的问题,可以在输入参数后加-fflags nobuffer,减少FFmpeg的输入缓冲区,进一步降低直播延迟
  • 运行命令前确保你的服务器已经安装了FFmpeg,没有的话用包管理器安装就行(比如Ubuntu用sudo apt install ffmpeg,CentOS用sudo yum install ffmpeg)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:39:25