问题描述
我发现了一些隐写技术,可以在 H.264 视频 (ref) 的编码帧上隐藏数据。但是,我想知道是否有可能在编码之前以某种方式将隐藏数据添加到每个帧,以便在视频解码后可以检索这些数据。
我知道H.264压缩是有损的,所以在编码过程中可能会丢失一些原始图像数据,但是由于压缩算法对一帧的不同区域有不同的影响,我想知道数据可以隐藏在不易变形的区域。
解决方法
H.264 图像在编码前被分成 16x16 宏块。如果您在每个宏块的内部插入小的亮度(亮度)失真,您可能能够从解码的宏块中提取它们。例如,假设这是一条跨越三个宏块、总共 48 个像素的扫描线。例如,x
像素是原始图像,#
是您的失真。
#
#xx#
# #x xxx
x xxxxx # xx#xx # xx x#x ##
xxxxxx# #xxx xxxx# #x##xxxxxxx
# # # xxxxx# #xx ##
#
111111111111111122222222222222223333333333333333
要记住的一些事情。
-
避免宏块边缘的失真,因为它们更有可能表现为块状。
-
避免高频失真,因为 H.264 的感知编码有时会衰减它们。
-
在几帧内保持相同的失真(隐藏信号),然后移动到另一帧。
-
在隐藏比特流上使用前向纠错码和大量冗余。在提取时,您正在大海捞针中寻找一根弯曲的针。
我从来没有这样做过,所以我有点猜测。这是moving-pictures adaptation of JPEG steganograpy。