我对 ffmpeg 有以下疑问。请澄清。
1.我正在使用 ffmpeg 读取 mp4 文件,并在执行 av_read_frame 之后 我收到视频(stream_index = 0),音频(stream_index = 1)数据包 首先,视频/音频数据包的到来没有顺序。这是标准情况吗?
2.视频数据包的大小不同,从最小 14 到最大 21824。请指出视频数据包大小变化的原因,在哪里 写道,对于视频来说,一个数据包意味着一帧,因此如果对于视频 pkt->size = 14 也等于视频的一帧。(pkt 是 AVPacket 类型)。
3.如果我们在 Probe 函数中对传入的 mp4 流进行解复用,同时解析它并将信息存储在某个缓冲区中或调用 av_read_frame 将其解复用。
4. ffmpeg 是否可以对 mp4 文件进行解复用,然后在一个数据包流中分配 a/v,其中视频数据包的stream_index = 1,音频数据包 = 0。 或者它必须位于单独的流中。
5.ffmpeg处理传输流和mp4文件的区别。 如果两者都被解复用,则以相同的方式解码还是不同。
问候 玛雅克
最佳答案
媒体文件是从多个流创建的。流可以有多种类型。音频、视频、字幕、元数据等。但一个流不能有多种类型。
1) av_read_frame 将(通常)按照帧写入文件的顺序返回帧。如果创建文件的软件没有单调地混合它们,则您无法单调地读取它。
2) 这正是视频压缩的工作原理。编解码器仅存储帧之间的变化。如果运动非常少,则一帧可能与前一帧非常相似,因此增量非常小。
3) 这不是一个问题。
4) 没有。
5)很大程度上,不。但文件类型存在一些差异。 mp4 需要随机访问,而 TS 则不需要。
关于ffmpeg - av_read_frame 之后 ffmpeg 中的数据包大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21089814/