【问题标题】:How do I know if audio channel has been tampered?如何知道音频通道是否被篡改?
【发布时间】:2018-04-09 04:53:52
【问题描述】:

我收到了一个 AVI 文件,其中包括两个流:视频和音频。
音频使用 PCM 签名进行编码。

在特定的时间间隔内,音频被静音。
我试图了解音频是使用软件故意静音还是由于信号丢失。

ffprobe发现在静音时间间隔内,数据包全为零。

这是该时间间隔及其相邻数据包(包括声音)的一般示例:

[PACKET]
codec_type=audio
... (trimmed for clarity)
size=1152
flags=K
data=
00000000: <arbitrary NON-zero data>
... (trimmed for clarity)
00000470: <arbitrary NON-zero data>
[/PACKET]

[PACKET]
codec_type=audio
... (trimmed for clarity)
size=2048
flags=K
data=
00000000: 0000 0000 0000 0000 0000 0000 0000 0000  ................
... Similar rows as above (data is zero), only difference is with the data offset
000007f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
[/PACKET]

<More packets with data equal to zero>

[PACKET]
codec_type=audio
... (trimmed for clarity)
size=2048
flags=K
data=
00000000: <arbitrary NON-zero data>
... (trimmed for clarity)
00000470: <arbitrary NON-zero data>
[/PACKET]

数据包的大小在 1152 和 2048 之间交替。

我假设如果静音是由于信号丢失引起的,那么零字节应该在任何地方在静音开始的第一个数据包中开始,不一定在数据包的开头。

我还假设音频编辑器程序会通过数据包使音频静音,这意味着它不会尝试使数据包中间的数据字节无效,但它会尝试使所有数据字节无效数据包的数据字节。

有没有人体验过它并且可以确认/提供额外的见解?

【问题讨论】:

    标签: audio avi


    【解决方案1】:

    我想知道你的假设是从哪里来的。特别是浮动数据包大小表明音频帧大小与视频帧大小不一致,这表明您的假设可能是错误的。由于您拥有 PCM 音频,因此与视频帧对齐的音频字节数始终相同。您可以设置一些包装器/打包器以将音频包大小与视频包大小对齐。但对你来说似乎不是这样。

    以下内容很大程度上取决于您的环境,但可能会给您一些想法:

    如果编辑程序是 Premiere Pro 或 FCP X 等典型的视频编辑器,它会在内部对齐音频和视频帧,并且不允许编辑器只更改一帧的部分内容。这意味着,如果有一些故意的静音,它将完全匹配单个视频帧持续时间的倍数。

    在“信号丢失”的情况下,我想知道为什么你实际上有无效的音频数据包而不是丢失的数据包,但我假设你的信号接收器只是以某种方式创建它们。

    无论如何,我的建议是计算所有接收到的音频字节,看看静音开始是否与视频帧开始完全匹配。例如。如果您有 48kHz 单声道和 25fps,则信号损失应匹配 1920 (48000/25) 的倍数,否则,您可能会处理信号损失。

    最后,这里有许多未知的环境变量:什么是信号链,数据包会在哪里丢失,什么是接收流和生成填充数据包?您正在使用哪些编解码器和格式?您是否一定要使用 ffprobe 而不是例如ffmpeg 和静音检测等...

    【讨论】:

      猜你喜欢
      • 2018-01-15
      • 1970-01-01
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多