【问题标题】:FFmpeg check audio channels for silenceFFmpeg 检查音频通道是否静音
【发布时间】:2019-07-03 23:12:43
【问题描述】:

我有两个 .mp4 文件,都有 8 (7.1) 个音频通道。但事实上,有人告诉我,一个有 stereo 音频通道 + 2 SAP(通道 7-8 上的辅助音频),另一个有 6 (5.1) 音频通道 + 2 SAP(通道 7-8 )。所以基本上后者有一些 [真实] 音频通道,例如 Center 通道,而前者在立体声通道中不存在(虽然它有这些通道,但显然它们是静音/静音)。

我一直在尝试使用Mediainfo 查看一些有区别的元数据以以某种方式区分两者,但两者的元数据看起来完全相同。还尝试使用ffmpegffprobe 进行一些基本的元数据检索,但它们看起来都一样 - 不走运:

ffprobe -i 2ch.mp4 -show_streams -select_streams a:0

所以问题是:ffmpegffprobe 是否有任何快速区分这两者的方法?是否有任何音频过滤器可以检测特定音频通道是否静音?或者任何其他有区别的元数据?我宁愿通过一些元数据来区分这两者,而不是内容分析。

This是2通道mp4文件的样本,this是6通道mp4的样本。

【问题讨论】:

    标签: audio ffmpeg aac ffprobe mediainfo


    【解决方案1】:

    您的两个示例文件都有 4 个音频流或轨道。每个音轨有 2 个声道,布局为立体声。

    显然,音频编码器是恒定比特率的,因此元数据不能用于区分无声轨道和有声轨道。

    您需要解析每个可疑的音频流。

    ffmpeg -i file -map 0:a:1 -af astats -f null -
    

    在控制台日志的末尾,将打印音频流的统计信息,

    例如

    [Parsed_astats_0 @ 0000000003c3aec0] Channel: 1
    [Parsed_astats_0 @ 0000000003c3aec0] DC offset: 0.000000
    [Parsed_astats_0 @ 0000000003c3aec0] Min level: 0.000000
    [Parsed_astats_0 @ 0000000003c3aec0] Max level: 0.000000
    [Parsed_astats_0 @ 0000000003c3aec0] Min difference: 0.000000
    [Parsed_astats_0 @ 0000000003c3aec0] Max difference: 0.000000
    [Parsed_astats_0 @ 0000000003c3aec0] Mean difference: 0.000000
    [Parsed_astats_0 @ 0000000003c3aec0] RMS difference: 0.000000
    [Parsed_astats_0 @ 0000000003c3aec0] Peak level dB: -6153.053111
    [Parsed_astats_0 @ 0000000003c3aec0] RMS level dB: -inf
    [Parsed_astats_0 @ 0000000003c3aec0] RMS peak dB: -3076.526556
    [Parsed_astats_0 @ 0000000003c3aec0] RMS trough dB: -inf
    [Parsed_astats_0 @ 0000000003c3aec0] Crest factor: 1.000000
    [Parsed_astats_0 @ 0000000003c3aec0] Flat factor: -inf
    [Parsed_astats_0 @ 0000000003c3aec0] Peak count: 662528
    [Parsed_astats_0 @ 0000000003c3aec0] Bit depth: 0/0
    [Parsed_astats_0 @ 0000000003c3aec0] Dynamic range: -inf
    [Parsed_astats_0 @ 0000000003c3aec0] Zero crossings: 0
    [Parsed_astats_0 @ 0000000003c3aec0] Zero crossings rate: 0.000000
    [Parsed_astats_0 @ 0000000003c3aec0] Channel: 2
    [Parsed_astats_0 @ 0000000003c3aec0] DC offset: 0.000000
    [Parsed_astats_0 @ 0000000003c3aec0] Min level: 0.000000
    [Parsed_astats_0 @ 0000000003c3aec0] Max level: 0.000000
    [Parsed_astats_0 @ 0000000003c3aec0] Min difference: 0.000000
    [Parsed_astats_0 @ 0000000003c3aec0] Max difference: 0.000000
    [Parsed_astats_0 @ 0000000003c3aec0] Mean difference: 0.000000
    [Parsed_astats_0 @ 0000000003c3aec0] RMS difference: 0.000000
    [Parsed_astats_0 @ 0000000003c3aec0] Peak level dB: -6153.053111
    [Parsed_astats_0 @ 0000000003c3aec0] RMS level dB: -inf
    [Parsed_astats_0 @ 0000000003c3aec0] RMS peak dB: -3076.526556
    [Parsed_astats_0 @ 0000000003c3aec0] RMS trough dB: -inf
    [Parsed_astats_0 @ 0000000003c3aec0] Crest factor: 1.000000
    [Parsed_astats_0 @ 0000000003c3aec0] Flat factor: -inf
    [Parsed_astats_0 @ 0000000003c3aec0] Peak count: 662528
    [Parsed_astats_0 @ 0000000003c3aec0] Bit depth: 0/0
    [Parsed_astats_0 @ 0000000003c3aec0] Dynamic range: -inf
    [Parsed_astats_0 @ 0000000003c3aec0] Zero crossings: 0
    [Parsed_astats_0 @ 0000000003c3aec0] Zero crossings rate: 0.000000
    [Parsed_astats_0 @ 0000000003c3aec0] Overall
    [Parsed_astats_0 @ 0000000003c3aec0] DC offset: 0.000000
    [Parsed_astats_0 @ 0000000003c3aec0] Min level: 0.000000
    [Parsed_astats_0 @ 0000000003c3aec0] Max level: 0.000000
    [Parsed_astats_0 @ 0000000003c3aec0] Min difference: 0.000000
    [Parsed_astats_0 @ 0000000003c3aec0] Max difference: 0.000000
    [Parsed_astats_0 @ 0000000003c3aec0] Mean difference: 0.000000
    [Parsed_astats_0 @ 0000000003c3aec0] RMS difference: 0.000000
    [Parsed_astats_0 @ 0000000003c3aec0] Peak level dB: -6153.053111
    [Parsed_astats_0 @ 0000000003c3aec0] RMS level dB: -inf
    [Parsed_astats_0 @ 0000000003c3aec0] RMS peak dB: -3076.526556
    [Parsed_astats_0 @ 0000000003c3aec0] RMS trough dB: -inf
    [Parsed_astats_0 @ 0000000003c3aec0] Flat factor: -inf
    [Parsed_astats_0 @ 0000000003c3aec0] Peak count: 662528.000000
    [Parsed_astats_0 @ 0000000003c3aec0] Bit depth: 0/0
    [Parsed_astats_0 @ 0000000003c3aec0] Number of samples: 662528
    

    如果RMS level dB-inf,则该频道是静默的。

    【讨论】:

    • 感谢您的提示!是的,这也很快。看起来还有其他一些不同的领域,比如DC offset=0 用于沉默的领域。想知道您现在使用0:a:1 指定哪个频道?那是center 频道吗?
    • 0:a:1 指定第二个流,它有 2 个通道。每个通道的读数分别给出。由于每个轨道都被编码为立体声,因此原始通道分配会丢失。您将不得不猜测或使用其他方式来获取该信息。
    • 我明白了。所以0:a:1 物种第二流,频道 0。对吗?
    • 不,如果你选择一个流,它里面的所有频道都会被选中。流中的所有频道始终一起提供。
    • 哈哈。我认为0:a:1 中的第一个参数指定ch,最后一个参数是流号!
    猜你喜欢
    • 2019-07-06
    • 1970-01-01
    • 2021-04-13
    • 2022-01-19
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 2021-01-13
    相关资源
    最近更新 更多