FFmpeg:使用filter_complex与movie滤镜修复帧率及多RTMP推流同步问题
多视频无限循环同步推流至多个RTMP端点的FFmpeg方案
经过@Gyan的协助,我整理出了这条可以同时处理4个视频、实现无限循环推流且保证音视频同步的FFmpeg命令,亲测有效:
ffmpeg \ -filter_complex \ "movie=01.mp4:loop=0[v1];[v1]setpts=N/FRAME_RATE/TB[v1]; \ amovie=01.mp4:loop=0[a1];[a1]asetpts=N/SR/TB[a1]; \ movie=02.mp4:loop=0[v2];[v2]setpts=N/FRAME_RATE/TB[v2]; \ amovie=02.mp4:loop=0[a2];[a2]asetpts=N/SR/TB[a2]; \ movie=03.mp4:loop=0[v3];[v3]setpts=N/FRAME_RATE/TB[v3]; \ amovie=03.mp4:loop=0[a3];[a3]asetpts=N/SR/TB[a3]; \ movie=04.mp4:loop=0[v4];[v4]setpts=N/FRAME_RATE/TB[v4]; \ amovie=04.mp4:loop=0[a4];[a4]asetpts=N/SR/TB[a4]" \ -map "[v1]" -map "[a1]" -f flv rtmp://endpoint1/live/stream1 \ -map "[v2]" -map "[a2]" -f flv rtmp://endpoint2/live/stream2 \ -map "[v3]" -map "[a3]" -f flv rtmp://endpoint3/live/stream3 \ -map "[v4]" -map "[a4]" -f flv rtmp://endpoint4/live/stream4
关键参数说明:
- 无限循环实现:每个
movie和amovie命令后加上loop=0,表示让媒体文件无限重复播放,无需额外脚本控制循环逻辑 - 音视频同步保障:
setpts=N/FRAME_RATE/TB:重置视频流的时间戳,基于当前帧率生成连续的时间线,避免循环时出现跳帧或时间偏移asetpts=N/SR/TB:对应重置音频流的时间戳,基于采样率生成连续时间线,确保和视频时间线完全对齐
- 多端点推流:通过多次
-map分别绑定每个视频流和对应的音频流,再指定不同的RTMP地址,实现一次命令完成4路独立推流
内容的提问来源于stack exchange,提问作者stevendesu
相关产品推荐
相关产品推荐

