无需转码的部分视频编辑

Ari*_*yan 1 video video-editing video-codecs

是否可以在不转码的情况下对视频的每一帧进行部分编辑(例如添加徽标)?并以相同的格式保存视频?

我的意思是,每帧的像素位置是可计算的;那么是否有可能修改文件字节以导致框架上发生所需的更改(例如添加徽标)?

我知道在像 XviD 这样的格式中这是不可能的(至少很容易),但对于某种格式(例如 MPG 或原始 AVI),这是完全不可能的还是可能的?

slh*_*hck 5

这仅(实际上)适用于无损视频编码。

无损到无损

为无损编码的视频编解码器做您想做的事情非常简单。其中许多逐像素存储视频数据,主要在YUV 色彩空间中。此外,每个框架都是独立的。

编辑这样的视频非常容易,因为您知道每一帧的位置,以及字节流中每个像素位置的位置。您可以简单地覆盖部分字节流,而不会影响剩余的流。即使无损视频经过算术压缩,您也可以先将其解压缩、编辑,然后再次压缩并保存——这没有问题。

因此,例如,如果您在 AVI 容器中有一个原始 YUV 视频,您可以逐帧编辑它并再次将其保存到 AVI 中的 YUV。

保持有损编码

但是,如果您想在编辑步骤之后进行有损视频编码——或者保留原始的有损编码,这是不可能的。这有两个问题:编码过程本身,以及帧通常相互依赖的事实。

有损压缩试图通过去除人眼看不到的细节来尽可能多地去除冗余。这是分几个步骤完成的,但最重要的一步涉及将像素域转换为频域,通常使用离散余弦变换的变体。

这一步的作用是将一块 8×8 像素的像素块转换成一个频率系数块。从这个块中,某些系数被丢弃,这减少了信息量(从而压缩了大小),但也丢弃了视觉信息,这降低了视频的质量。丢弃哪些系数取决于编码器的质量设置。视频然后存储为像素,而是存储为频率系数。

当您想要编辑有损视频时,您首先必须再次将频率系数重建为逐像素表示(如上所述)。此时您可以编辑视频并插入徽标,但是一旦您想再次存储它,您就必须再次执行转换步骤——并丢弃信息。从本质上讲,这就是代损的主要原因。

另一个问题是,对于大多数有损视频,某些帧取决于其他帧中包含的信息。更具体地说,B 帧和 P 帧仅包含较早(或较晚)B/P 或 I 帧的偏移。如果您更改了 I 帧的内容,则所有其他相关帧在解码时都会更改,这通常不是您想要的。下面彼得·科德斯的回答强调了这一点。而事实上,他是对的,在原则上,您可以编辑有损I帧视频的地方,但它会实际上是很难做到的。

因此,非常简单地说,除非您可以无损地存储视频,否则您无法在不牺牲质量的情况下就地编辑视频。