Open jabbany opened 10 years ago
如果是那样的话,数据量非常大。 建议看看 Video Steganography with Perturbed Motion Estimation.pdf,一帧只能存几个字节。
现在的lvdo实现在100%还原的情况下数据量会增加3倍,已经不让我满意了。
我的目的不是让别人看不出来我在存东西,而是让视频过审核。
先close了。如果有异议你可以再open。
我觉得这样不好,没有隐写就没有意义了,完全可以生成一个基础key图片,然后把每一帧的颜色(HSV或者RGB)对Key的每一个像素做XOR,也能产生出抗压的乱码图片(压缩只干扰色彩还原)。视频审查完全可以见到这种类似乱码的视频立刻删掉。现在做DCT不是真正的加密,而是一种混乱化编码 (Obfuscation)。
不过要是能载到一个已有的视频上,让视频本身看起来好像没压缩好,那么被删可能性会大大降低。我认为既然说要做Steganography就好好做咯。。。Obfuscation真的不难。把视频切成小方框重新排列都可以让人看不出原来的内容╮(╯_╰)╭还是线性映射抗干扰很高。。。
有关数据量我觉得首先声音和视频并用,加上error checking和LSB校验应该很好,用DCT载主要的视频图像块(类似JPEG压缩可以不断清晰化的解码),然后通过LSB增加画面细节。二压的话LSB就没了,但是还能保证粗略低分辨率视频。
我想到一个兼容现有实现的方法。
LVDO 有两个参数:--qmin 和 --qmax。可以调整好这两个参数让 LVDO 只使用 DCT 中高频部分。低频部分使用别的画面。而解码器仍然可以直接解码。但是不太好绕过 me,只能自己指定 merange=0。这样的效果大概就和低质量 JPEG 差不多。
事实上音频的话,你不了解编码器对相位的处理。听说 MP3 也是使用 DCT的,AAC 和 OGG/Vorbis 是使用我不熟悉的小波变换。可以保证频率和振幅,不能保证相位。这样一样只能使用 FM 和 AM,不能使用 QAM,效率很低。所以在有限的码率下只用视频就够了。音频随便填点东西。
还有你把问题想得太简单了。LSB 会挂得很惨,尤其是走 H.264 一趟。重新排列会死在 me。
LVDO 还没有在 H.265 上测试,其中一个原因是我不熟悉的小波变换。战 YouTube 要考虑 VP9,VP9 是用 DCT + DST 的听说,会陨 LVDO 的相位。
你给我的音频加密的三种方式。
首先,LSB 编码相当于加上一个振幅为 1/65536,频率为 22050Hz 或其约数的高频正弦波。如此高的频率在压缩的时候丝毫不剩。
相位编码我上一帖已说了。你我都不了解编码器对相位的处理。
回音编码,在 OGG/Vorbis 上会挂得很惨,因为 Vorbis 的 pre-echo 效应。YouTube 的音频有 AAC-LC、OGG/Vorbis、OGG、OPUS 的。只要会挂就不是好方案。
而且,LVDO 有一个黑白模式,就是只使用 Y 通道,UV 全部填 0x80。当然可以有一个只使用 UV 的模式。这样 Y 通道填别的视频。
这是第一点。第二点是 LVDO 可以不使用低频部分(--qmin
),把低频让给别的视频用。由其是 DCT 的 0 号系数,是 8x8 格的亮度、色度平均值。即使是只使用这个系数,就可以让只看缩略图的审查者看不出破绽了。
但是,LVDO 的目的不是仅仅混淆视频,而是混淆任意数据。当然,媒体文件为主。正因为这样,吞吐量要非常大才可以。我目前的测试是,一个 480p 的视频至少要 720p 1Mbps 同等时长,才可以正确编码。大概编码后的文件大小是原来的 3~8 倍。所以和一般的隐写不同,LVDO 更追求吞吐量,所以不太有空间用来放一个明文的画面了。
总之,LVDO 也只是提供一个机制,而不是实现。LVDO 很多地方都没有优化,但是在目前的情况下来看,速度也够了。如果你有兴趣可以自己制作兼容或不兼容的、更快或更好的实现。
现在主要问题是没有底层的衬托视频就没意义了。反正都是产生乱码,把数据扔到MSB都可以。 DCT的意义不就是载到已有信号上,把隐藏的数据扔到噪音里同时让噪音可压缩。
所以,用-qmin
限制中高频就好了。
而且扔到MSB是没有那么高的吞吐量的。
填入别的视频要是也能通过一个stream流进去就可以了。。。我对C苦手没办法。希望LVDO能支持读取一个named pipe读入raw视频和文件一起压。
我是改不出的,但是那样作用会大很多。
我以前有一个叫HMShuffle的程序会把视频的每一帧切成20x20的方块,根据一个key重新排列,然后产生输出。也能耐压缩无非是压缩后还原就在格子边框有损伤。但是一直不能解的就是载到载体视频上。
我觉得LVDO的专注目标应该是利用DCT载到任意一个载体视频上,那样功用就比传统obfuscation大很多了。
我的意思是,让 LVDO 的这个实现变成一个 Reference Implementation 好了,保证 100% 正确,别的实现可以有优化,比如针对优酷和 YouTube 以及渣浪(是唯一可以自己压制的)的不同优化。
我在 #4 里提到说要在 LVDO Transport Layer 上建一个 Transmission Control Layer。
我是想再建立一个实现。把这些功能在那里完成。
我以前有一个叫HMShuffle的程序会把视频的每一帧切成20x20的方块,根据一个key重新排列,然后产生输出。也能耐压缩无非是压缩后还原就在格子边框有损伤。但是一直不能解的就是载到载体视频上。
格子边框损伤的原因是你切的是 20x20 而不是 16x16……哈哈哈哈哈
我是想再建立一个实现。把这些功能在那里完成。
也好。不过总觉得双输入的合并应该LVDO归这部分,协议主要保证数据损失恢复就好了。
格子边框损伤的原因是你切的是 20x20 而不是 16x16……哈哈哈哈哈
我写那个的时候差不多是写hmode那个文章之后不久。。。比较naive啦。。。不过好处是canvas也能很好的支持。。。就是不容易过审核。。。
协议还要管优酷水印的问题啊。说白了就是绕过水印的区域。
总之在短期内打算对现有的 LVDO 找 bug。保证 bitstream freeze 之后才开新的实现。 BBC 的 Dirac 编码器的 libschrodinger 也是在 libdirac 写好之后才开始的啦。
因为我和你那个 H-Mode 以及 HMShuffle 的出发点不同。你是加密模拟数据,我是加密数字数据。数字数据很容易受悬崖效应的影响。所以对于流量的控制要更复杂。但是更灵活,也很不错了。
话说你 C 语言苦手,那么你擅长什么语言呢?下一个实现要么换语言?(但是 FFT 库就没有现成的咯)
嘛我觉得现在这个实现也挺好。。。别的语言没有这么高的效率估计做不了流处理器。 上层协议的话用Python估计比C好对付。Python有对fftw3的接口。
我想到一个问题,如果 carrier data 用动态画面的话,可能会触发 x264 的 motion estimation。如果是自己压制还好,上传优酷的话就不好说了。
我的想法是用静态的,比如10秒一换的图片,配上音乐,设置合适的 --qmin 和 --qmax。让视频看起来是配乐图片幻灯一样。当然不能这么死板,在这么个架构的基础上可以发挥很大的想象空间。
有道理,换图的时候会不会触发运动检测?其实我都不知道那些网站是怎么处理的,不过据说有招数避免被二压?好像如果你视频本身就符合某个拟定帧率什么的。。。(不清楚
说不定可以用后黑技术之类的。。。
有道理,换图的时候会不会触发运动检测?其实我都不知道那些网站是怎么处理的,不过据说有招数避免被二压?好像如果你视频本身就符合某个拟定帧率什么的。。。(不清楚
说不定可以用后黑技术之类的。。。
我前几天查了相关资料。YouTube 一定 会二压,无法避免。优酷会加水印,怎么可能不二压? 而且视频网站的压制参数都很低。YouTube是 High@L2.2 虽然码率很高(高你妹,卡爆了)但是效率很低。这对lvdo要求就更高了。
换图的时候会不会触发运动检测
其实是只有换图的时候才没有运动检测。你对 H.264 了解太少。
而且 H.264 是基于频域的,所以什么 LSB MSB 这样基于时域的是会失败的。
你还在关注这个项目吗?最近这几天似乎很多外国人开始关注这个项目。
我是没有时间继续开发了。但是如果你想实现数据载体,给你一个提示(不需要使用 DCT 变换的,但是能达到比较“能用”的结果):
更好的方法是第一步用真正的 DCT 来替代取平均,这样你可以利用 [0, 0] 之外的数据。
隐写一般要有载体数据,一个看起来比较正当的含有杂质的数据流。现在LVDO仅仅是把文件DCT重排到了视频里面,下一步是不是要加入数据载体。
比如提供一个视频,然后把数据载在看似正当的视频上。