ネット上で漫画を読めるサービスで画像のリンクを開いてみると、本来の映像の位置からバラバラに配置した画像が見られる。これを ffmpeg のswaprect
フィルタを使って映像をバラバラに配置して同じ効果を求めてみる。
映像をたくさん分割すればするほど組み合わせが複雑になるが、フィルタチェーンの文字数制限がある(-f lavfi -graph -iで入力すれば制限がなくなる)ので無制限に分割できるわけではない。バラバラに分割して暗号化された映像を元に戻すには同じフィルタチェーンを逆順に設定すれば元の映像に戻すことができる。swaprect
フィルタの他にもswapuv
で UV を入れ換えたり、hflip
で左右反転することでより難読化することができる。swaprect
フィルタを多用してもそれほど負荷は上がらないので気にする必要は無いが、映像が難読化され圧縮しにくい映像になり容量が増える。
FFmpeg Devices Documentation : lavfi
6×6 の暗号例その1
ffplay -i input -vf swaprect=w/6:h/6:2*w/3:h/3,swaprect=w/6:h/6:5*w/6:h/6,swaprect=w/6:h/6:5*w/6:5*h/6,swaprect=w/6:h/6:2*w/3:h/6,swaprect=w/6:h/6:w/6:h/6,swaprect=w/6:h/6:w/3:5*h/6,swaprect=w/6:h/6:w/2:h/2,swaprect=w/6:h/6:w/6:0,swaprect=w/6:h/6:w/3:h/6,swaprect=w/6:h/6:0:0,swaprect=w/6:h/6:2*w/3:2*h/3,swaprect=w/6:h/6:w/2:5*h/6,swaprect=w/6:h/6:5*w/6:h/3,swaprect=w/6:h/6:w/2:h/6,swaprect=w/6:h/6:0:5*h/6,swaprect=w/6:h/6:w/6:2*h/3,swaprect=w/6:h/6:2*w/3:h/2,swaprect=w/6:h/6:w/6:5*h/6,swaprect=w/6:h/6:5*w/6:2*h/3,swaprect=w/6:h/6:2*w/3:0,swaprect=w/6:h/6:5*w/6:0,swaprect=w/6:h/6:5*w/6:h/2,swaprect=w/6:h/6:0:h/6,swaprect=w/6:h/6:w/2:0,swaprect=w/6:h/6:w/3:h/3,swaprect=w/6:h/6:w/6:h/3,swaprect=w/6:h/6:w/6:h/2,swaprect=w/6:h/6:w/2:h/3,swaprect=w/6:h/6:w/3:0,swaprect=w/6:h/6:0:h/2,swaprect=w/6:h/6:w/3:h/2,swaprect=w/6:h/6:w/3:2*h/3,swaprect=w/6:h/6:w/2:2*h/3,swaprect=w/6:h/6:0:2*h/3,swaprect=w/6:h/6:2*w/3:5*h/6,swaprect=w/6:h/6:0:h/3
6×6 の復号例その1
ffplay -i input -vf swaprect=w/6:h/6:0:h/3,swaprect=w/6:h/6:2*w/3:5*h/6,swaprect=w/6:h/6:0:2*h/3,swaprect=w/6:h/6:w/2:2*h/3,swaprect=w/6:h/6:w/3:2*h/3,swaprect=w/6:h/6:w/3:h/2,swaprect=w/6:h/6:0:h/2,swaprect=w/6:h/6:w/3:0,swaprect=w/6:h/6:w/2:h/3,swaprect=w/6:h/6:w/6:h/2,swaprect=w/6:h/6:w/6:h/3,swaprect=w/6:h/6:w/3:h/3,swaprect=w/6:h/6:w/2:0,swaprect=w/6:h/6:0:h/6,swaprect=w/6:h/6:5*w/6:h/2,swaprect=w/6:h/6:5*w/6:0,swaprect=w/6:h/6:2*w/3:0,swaprect=w/6:h/6:5*w/6:2*h/3,swaprect=w/6:h/6:w/6:5*h/6,swaprect=w/6:h/6:2*w/3:h/2,swaprect=w/6:h/6:w/6:2*h/3,swaprect=w/6:h/6:0:5*h/6,swaprect=w/6:h/6:w/2:h/6,swaprect=w/6:h/6:5*w/6:h/3,swaprect=w/6:h/6:w/2:5*h/6,swaprect=w/6:h/6:2*w/3:2*h/3,swaprect=w/6:h/6:0:0,swaprect=w/6:h/6:w/3:h/6,swaprect=w/6:h/6:w/6:0,swaprect=w/6:h/6:w/2:h/2,swaprect=w/6:h/6:w/3:5*h/6,swaprect=w/6:h/6:w/6:h/6,swaprect=w/6:h/6:2*w/3:h/6,swaprect=w/6:h/6:5*w/6:5*h/6,swaprect=w/6:h/6:5*w/6:h/6,swaprect=w/6:h/6:2*w/3:h/3
6X6 の暗号例その2、10X6 と 16X9 の暗号例。
ffmpeg_swaprect_filter encrypt