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

FFmpeg分段录制MP3流时文件大小无法实时更新的问题求助

我来帮你解决这个FFmpeg录制MP3流时文件无法实时增长的问题!

你遇到的这个现象,本质是FFmpeg的MP3复用器(muxer)默认会使用一个256KB的输出缓存——只有当缓存被填满时,才会把数据一次性写入磁盘,所以你看到文件以固定数据包大小增长。虽然你已经加了-flush_packets 1,但这个参数主要控制数据包的刷新逻辑,对于MP3这种有特定帧结构的格式,还需要额外调整复用器的缓存设置。

针对你使用的Ubuntu 18.04和FFmpeg 3.4.6版本(这个版本虽不算新,但所需参数已支持),给你几个可行的解决方案:

方案1:直接添加-flush_size 0参数

这个参数会强制FFmpeg每处理完一帧音频就立刻写入磁盘,彻底绕过缓存等待。修改后的命令如下:

ffmpeg -i http://radiocentova.conectastm.com:8363/stream -y -acodec libmp3lame -b:a 16k -ac 1 -ar 11025 -vn -strftime 1 -f segment -segment_time 3600 -flush_packets 1 -flush_size 0 test_%Y%m%d%H%M%S+00.mp3

PS:我把文件名前的@去掉了——这个符号可能会让FFmpeg解析文件名出错,如果你是特意加的可以忽略这个修改哈。

方案2:通过segment格式选项指定flush参数

如果你想更明确地针对segment输出格式设置,可以用-segment_format_options传递flush参数:

ffmpeg -i http://radiocentova.conectastm.com:8363/stream -y -acodec libmp3lame -b:a 16k -ac 1 -ar 11025 -vn -strftime 1 -f segment -segment_time 3600 -flush_packets 1 -segment_format_options flush_size=0 test_%Y%m%d%H%M%S+00.mp3

额外优化(若上述方案仍有延迟)

如果调整后还是有启动延迟或者写入不及时,可以尝试减少FFmpeg对输入流的探测缓存,让它更快进入处理状态:

ffmpeg -probesize 32 -analyzeduration 0 -i http://radiocentova.conectastm.com:8363/stream -y -acodec libmp3lame -b:a 16k -ac 1 -ar 11025 -vn -strftime 1 -f segment -segment_time 3600 -flush_packets 1 -flush_size 0 test_%Y%m%d%H%M%S+00.mp3

另外,如果你之前的分段功能未生效,还可以尝试添加-segment_atclocktime 1参数,让FFmpeg严格按照系统时钟的整点生成新文件(比如每到00分00秒就切换分段),分段逻辑会更准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:45:12