Audio 如何知道音频通道是否被篡改?

Audio 如何知道音频通道是否被篡改?,audio,avi,Audio,Avi,我得到了一个AVI文件,其中包括两个流:视频和音频。 音频使用PCM签名进行编码 在特定的时间间隔内,音频将静音。 我试图了解音频是使用软件故意静音还是由于信号丢失 通过ffprobe我发现在静音时间间隔内,数据包都是零 以下是该时间间隔及其相邻数据包(包括声音)的一般示例: [数据包] 编解码器类型=音频 ... (为清晰起见进行了修剪) 尺寸=1152 flags=K 资料= 00000000: ... (为清晰起见进行了修剪) 00000470: [PACKET] [数据包] 编解码器

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

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

通过
ffprobe
我发现在静音时间间隔内,数据包都是零

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

[数据包]
编解码器类型=音频
... (为清晰起见进行了修剪)
尺寸=1152
flags=K
资料=
00000000: 
... (为清晰起见进行了修剪)
00000470: 
[PACKET]
[数据包]
编解码器类型=音频
... (为清晰起见进行了修剪)
尺寸=2048
flags=K
资料=
00000000: 0000 0000 0000 0000 0000 0000 0000 0000  ................
... 与上面的行类似(数据为零),唯一的区别是数据偏移量
000007f0:0000 0000。。。。。。。。。。。。。。。。
[PACKET]
[数据包]
编解码器类型=音频
... (为清晰起见进行了修剪)
尺寸=2048
flags=K
资料=
00000000: 
... (为清晰起见进行了修剪)
00000470: 
[PACKET]
数据包的大小在1152和2048之间交替变化

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

我还假设音频编辑程序会通过分组来屏蔽音频,这意味着它不会试图在数据包中间消除数据字节,但是它会试图使数据包的所有数据字节无效。


是否有人对此有经验并能证实/提供更多的见解?

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

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

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

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

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

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

[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]