如何让 ffmpeg 在输入停止时写入静音?

如何让 ffmpeg 在输入停止时写入静音?

因此,我设置了一个 ffmpeg 命令,用于转换通过 stdin 管道输入的音频。但是,输入的音频并不是持续管道输入的,有时会停止几秒钟,然后再恢复。

我怎样才能让 ffmpeg 在输出中用静音填充这些暂停部分?由于输出正在流式传输到 Icecast,我需要它持续运行,而不是对文件运行某种形式的后期处理。

这可能吗?如果可以,我该怎么做?如果有人能建议我使用不同的工具来实现这一点,我将不胜感激!

编辑:我用来传输音频的命令是。当我运行此命令时,它可以完美地将输入从 stdin 转换为 icecast。但是,当输入暂停时,ffmpeg 会在输入再次启动时停止写入,并出现以下错误:ffmpeg -hide_banner -ac 2 -f s32le -i pipe:0 -ar 48000 -ac 2 -compression_level 10 -c:a libmp3lame -f mp3 -content_type audio/mpeg -vn icecast://source:[email protected]/mount.mp3

Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, s32le, from 'pipe:0':
  Duration: N/A, bitrate: 2822 kb/s
    Stream #0:0: Audio: pcm_s32le, 44100 Hz, stereo, s32, 2822 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (pcm_s32le (native) -> mp3 (libmp3lame))
Output #0, mp3, to 'icecast://source:[email protected]:mount.mp3':
  Metadata:
    TSSE            : Lavf58.20.100
    Stream #0:0: Audio: mp3 (libmp3lame), 48000 Hz, stereo, s32p
    Metadata:
      encoder         : Lavc58.35.100 libmp3lame
av_interleaved_write_frame(): Broken pipe 128.2kbits/s speed=0.583x    
Error writing trailer of icecast://source:[email protected]:mount.mp3: Broken pipe
size=     286kB time=00:00:18.31 bitrate= 128.0kbits/s speed=0.378x    
video:0kB audio:286kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
Conversion failed!

答案1

如果您遇到这样的问题,很可能是您的 Icecastsource_timeout设置得太低了。尝试将其设置为不合理的高值或设置为-1,它根本不会超时。

这将确保 ffmpeg 永不超时并且连接将保持打开状态,从而无需发送静默来模拟首先发送的数据。

相关内容