首页 > 解决方案 > 使用 ffmpeg 进行流式传输时,仅当源文件/流没有音频时才插入音频

问题描述

无论我的源文件或源流是有音轨还是根本没有音轨,我都想使用相同的命令。然后,我希望 ffmpeg 对音频进行转码 - 仅在不存在源音轨时使用音频源(如果存在)或静音(我看到各种不同的 ffmpeg 音频过滤器可以生成)。

有人可以为此给出正确命令的示例或一些指示吗?map有什么方法可以用或类似的开关做到这一点?

请注意,我真正的意思是根本没有音轨,而不是说在源音轨中检测到静音。能够在一个命令中执行此操作而不是知道可以执行每个变体的两个谨慎命令是关键。

标签: ffmpegcommand-line-interface

解决方案


ffmpeg -i input.mp4 -f lavfi -i anullsrc=cl=mono -shortest output.mp4

这是可以使用默认流选择行为的示例。它将自动选择具有最多通道的音频流,如果它们相同,它将选择具有最低索引号的音频流。

  • 如果input.mp4没有音频,那么它将使用由anullsrc生成的无声音频。

  • 如果input.mp4确实有音频,那么它将使用来自input.mp4.

缺点是默认的流选择行为只会为每种流类型选择一个流。因此,如果input.mp4有多个视频流,则只会选择一个视频流。

在这种情况下,我建议使用ffprobe确定文件是否有音频,然后使用-map选择您想要的特定流

这可以通过简单的 shell 脚本自动适应Bash 示例 1Bash 示例 2之类的内容。


推荐阅读