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

FFmpeg录制RTMP流随机中断,如何实现自动无间隙续录?

解决方案

方法1:启用FFmpeg自动重连参数

针对RTMP流的间歇性中断,可通过FFmpeg内置的重连参数让程序自动尝试恢复连接,无需手动重启,同时减少录制间隙。修改后的命令如下:

ffmpeg -reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5 -i "rtmp://example.com/stream?id=12345" -vcodec copy -acodec copy "output.mp4"

各参数作用:

  • -reconnect 1:开启自动重连功能
  • -reconnect_streamed 1:针对RTMP这类流式协议启用重连逻辑
  • -reconnect_delay_max 5:设置最大重连等待间隔为5秒(避免长时间等待导致间隙过大)

如果流只是短暂中断,该参数能让FFmpeg自动重新接入流,继续录制到同一个文件中,无需生成多个片段。

方法2:循环录制独立片段+后期合并

若自动重连仍无法解决问题,可通过脚本循环执行录制命令,每次生成独立的片段文件,后续再合并为完整视频,彻底避免手动操作的间隙。

循环录制脚本(适用于Linux/macOS)

创建一个record_stream.sh脚本:

#!/bin/bash
STREAM_URL="rtmp://example.com/stream?id=12345"
COUNTER=1

# 无限循环录制
while true; do
    # 生成带序号的输出文件名
    OUTPUT_FILE="output_$(printf "%04d" $COUNTER).mp4"
    # 执行录制命令
    ffmpeg -hide_banner -loglevel error -i "$STREAM_URL" -vcodec copy -acodec copy "$OUTPUT_FILE"
    # 短暂延迟避免频繁连接服务器
    sleep 0.1
    # 计数器递增
    COUNTER=$((COUNTER + 1))
done

给脚本添加执行权限:chmod +x record_stream.sh,运行即可自动循环录制。

合并片段

录制完成后,创建一个filelist.txt,列出所有片段文件:

file 'output_0001.mp4'
file 'output_0002.mp4'
file 'output_0003.mp4'
...

执行合并命令:

ffmpeg -f concat -safe 0 -i filelist.txt -c copy merged_output.mp4

方法3:优化脚本过滤短片段

为避免生成大量1-2秒的无效片段,可在脚本中检查录制文件的时长,仅保留有效片段:

#!/bin/bash
STREAM_URL="rtmp://example.com/stream?id=12345"
COUNTER=1

while true; do
    OUTPUT_FILE="output_$(printf "%04d" $COUNTER).mp4"
    ffmpeg -hide_banner -loglevel error -i "$STREAM_URL" -vcodec copy -acodec copy "$OUTPUT_FILE"
    
    # 使用ffprobe获取文件时长
    DURATION=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$OUTPUT_FILE")
    
    # 过滤时长小于2秒的片段
    if (( $(echo "$DURATION < 2" | bc -l) )); then
        rm "$OUTPUT_FILE"
    else
        COUNTER=$((COUNTER + 1))
    fi
    
    sleep 0.1
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:40:41