因此,我使用 FFMPEG 通过 stdin 接收音频并将其重定向到文件。音频是实时的,因此我使用-re
输入上的标志来告诉 FFMPEG 实时读取它。
我遇到的问题是音频有时会中断,因此不会将任何数据传输到标准输入。我怎样才能让 FFMPEG 用静音填充这段时间,以便它不会停止并重新启动?
我尝试aresample=async=1
在输出上使用过滤器,但我认为这仅适用于音频和视频同步。
我目前使用的命令是ffmpeg -hide_banner -f FORMAT -ac CHANNELS -ar SAMPLERATE -re -i pipe:0 -af aresample=async=1 -y output.mp3
,其中通道、格式和采样率是根据输入的格式设置的。
答案1
aresample=async=1
是正确的过滤器,但它依赖于接收到的音频的时间戳在时间位置上的准确性。您似乎正在接收没有时间戳的原始提要,因此 ffmpeg 会分配连续的时间戳,而不管何时收到音频数据包。因此 aresample 无需填补空白。
添加-use_wallclock_as_timestamps true
为输入选项。FFmpeg 将获取系统时间并在接收数据包时分配该时间。