如何用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
相关产品推荐
相关产品推荐

