audio - 我怎么知道音频 channel 是否被篡改?

标签 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之间交替。

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

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

有没有人经历过并且可以确认/提供其他见解?

最佳答案

我想知道您的假设来自何处。特别是 float 数据包的大小表示音频帧的大小与视频帧的大小不一致,这表明您的假设可能是错误的。由于具有PCM音频,因此与视频帧对齐的音频的字节数始终相同。您可以设置一些包装器/打包器,以使音频数据包大小与视频数据包大小对齐。但这对您而言似乎并非如此。

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

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

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

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

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

关于audio - 我怎么知道音频 channel 是否被篡改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46977495/

相关文章:

audio - 如何编写脚本来使用应用程序

matlab - 在matlab中的wave文件末尾添加声音

c# - 如何以编程方式播放 16 位 PCM 数组

java - 特定 wav 文件无法加载,而其他文件加载没有错误

ffmpeg - 使用 ffmpeg 将 avi 转换为 3gp

ffmpeg - 使用 FFMPEG 转换 AVI 文件时出错

c# - 在 C# 中设置 Windows 混音器音量控制需要使用什么库?

c - 将libavcodec编码的视频保存为AVI文件格式

MATLAB:合并目录中的所有视频

c++ - #include <avifile.h>要求#include <stdlib.h>才能使构建成功