我怎么知道音频通道是否被篡改过?

时间:2017-10-27 14:32:29

标签: audio avi

我收到了一个包含两个视频和音频的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之间交替。

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

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

有没有人有过这方面的经验,可以确认/提供额外的见解?

1 个答案:

答案 0 :(得分:1)

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

以下内容取决于您的环境,但它可能会给您一些想法:

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

如果&#34;信号丢失&#34;,我想知道为什么你实际上有无效的音频数据包而不是丢失数据包但我认为你的信号接收器只是以某种方式创建它们。

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

最后,这里有许多未知变量是特定于环境的:信号链是什么,数据包丢失在哪里,接收流的是什么以及生成填充数据包?您正在使用哪些编解码器和格式?您是否必须使用ffprobe而不是ffmpeg和沉默检测等...