失真视频制作原理

失真视频制作原理

Scroll Down

example

不经意间看到了这个小视频,我很好奇这是怎么做到的,

的确是不怎么流行的东西,谷歌、维基、reddit翻了好久才找到。

这是几年前国外论坛里曾经讨论的压缩失真(compression artifacts)艺术或者叫做视频故障艺术( Video Glitch Art)。

是通过人为的产生视频压缩故障,图中产生的效果就是在视频中人为破坏掉I-frames产生的。


Video Glitch Art

通常在网络情况很差的情况下,看流媒体偶尔就会出现声音、视频的卡顿,图像碎片化,像素滞留等问题,我们叫它失真。但这种情况的发生都是不可预料的。

Video Glitch Art就是通过非正常的手段使视频被破坏,从而产生或是唯美、或是恐怖、或是神秘或是怪诞的作品。

视频故障也有很多种,I帧破坏、P帧复制、数据交换、3D移动等,你可以通过剪辑软件,转码工具,HEX编辑器,ffmpeg甚至vim来做出这些效果。

下面这两幅图是分别通过I帧破坏和P帧复制做出来的。

jmenyrN
p-frame

原理解析:

大家都知道视频是一帧一帧的图片组成的,但是这样的原始视频文件是非常大的。连续的视频中有大量的相似图片,这样的文件通常大部分都是冗余信息。使用压缩算法可以极大的压缩体积。

当在给视频编码时,里面的图像就分为I帧[I-Frame]和P/B[P/B-Frame]。

I帧也被称作关键帧,它就像是JPEG图像,其中包含了完整的一帧的图像。压缩算法在一定的时间或者画面变化达到阈值就会储存一个关键帧。而B帧和P帧是允许压缩算法的,里面仅仅储存了当前帧与前一帧的差异。

P帧是预测帧。它们本身实际上并不包含太多图像数据,但是代表帧之间的帧块内像素的抽象运动。本质上,您可以将它们视为跟踪像素精确移动的位置。

B帧是双向预测帧。它们基本上和P帧差不多,只是效率更高一点。我们不会过多的使用P帧做故障,使用你几乎可以忽略它们。

当I帧丢失时,P/B帧的前一帧就会是上一个I帧变化后的图像,于是就产生了序言中的神奇效果。

当然你也可以破坏I帧,或者用其他的帧代替来产生其他效果。

P帧复制是另一种方法,你可以在同一位置多次复制P帧,以获得令人迷幻的“花开”效果,图像失真并且变得非常彩色。P帧复制移动的数据会保留自身的运动特性,即,它沿着给定的方向前进并不断前进。发生这种情况的原因是,当你使用相同的P帧并一遍又一遍地复制时,P帧的运动侦测会在下一帧的像素上重复运行,从而导致递归效果。还有就是,P帧复制会使图像变得更加多彩。这可能是因为P帧每次重复都会改变P帧的颜色信息使下一帧的颜色发生变化(变浅)。

知道了故障产生的原理,你就可以不拘泥与一种方法或是一个软件来制造视频故障艺术。

如何做?

通常你可以使用HEX编辑器来实现些效果,HEX编辑器可以实现很低级的操作,它可以避免任何限制,同时也是最难操作的方法。

首先,你需要合适的原始视频,XViD或者DIVX的MPEG4格式就很好

然后你需要将它另存为avi格式,用HEX编辑器打开。AVI文件中每个帧都将以00dc开头,你可以在文件中搜索它们。其中I框架的多少取决你的视频质量(你也可以通过ffmpeg判断)。然后通过十六进制字符串00 01 b0 01的特征找到他们。你可以破坏I帧,也可以用其他的内容填充。

你也可以尝试任意交换一些数据来得到奇特的效果。

如果没有足够的了解编码器、解码器、文件格式、压缩算法等相关知识,这种改变是不可预料的。

使用十六进编辑器一定要遵守以下规则:

  1. 不要试图破坏头部,因为文件头部的数据决定着文件的类型。破坏了文件头部数据,文件可能无法打开,因为播放器不知道该如何解析。如果你不知道头部的含义,不要改。
  2. 不要试图改变文件的总大小,大多数播放器会在单个帧的尺寸发生变化时拒绝播放。请使用填充和替换来修改文件
  3. 不要破坏太多信息,如果修改了过多的信息,图像会变得过于破碎而没有意义,甚至不能打开,最好保持更改的总量小于文件总大小的东5%。

你也可以使用別人写好的工具:

我正在尝试完全使用ffmpeg制作。

一些国外大神的作品展示:

ecstasy - Ras Alhague

x4j81mlnnnl61

@polygon1993 on instagram

qgtey1a49am61

本文参考:

https://forum.glitchet.com/t/tutorial-make-video-glitch-art-how-to-datamosh-in-plain-english/36

https://www.reddit.com/r/brokenanimegifs/wiki/tutorial

http://rosa-menkman.blogspot.com/2009/02/how-to-datamoshing-create-compression.html