video - 在 H.264 视频的每一帧上隐藏数据
问题描述
我发现了一些隐写术技术,可以将数据隐藏在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 的感知编码有时会衰减它们。
保持相同的失真(隐藏信号)几帧,然后移动到另一帧。
在隐藏的比特流上使用前向纠错码和大量冗余。在提取时,您正在大海捞针中寻找弯曲的针。
我从来没有这样做过,所以我猜测了一下。这是JPEG 隐写术的动画改编。
推荐阅读
- python - 如何将嵌套 JSON 的最低级别提取到 Python 中的 DataFrame 中?
- android-camera2 - 录制视频时camera2 api未触发onImageAvailable回调
- laravel - 为什么在 axios 请求期间 laravel cookie 没有被解密?
- mysql - MySQL 与 MariaDB “计算列不能基于计算列”
- mysql - 在 Laravel 中获取过去 7 天的分组和计数条目
- jenkins - 将选择参数传递给另一个作业
- google-chrome - 禁用“在新的 Chrome 配置文件中继续”弹出窗口
- python-3.x - vim 空符号影响字符串 ^@
- javascript - 如何设置加/减/范围值按钮的限制?
- svelte - Sevltekit 404 error when refreshing dynamic route