映像の場所を入れ換えて暗号化する

ネット上で漫画を読めるサービスで画像のリンクを開いてみると、本来の映像の位置からバラバラに配置されている画像を見られる。これを ffmpeg の swaprect フィルタを使って映像をバラバラに配置して同じ効果が得られる。

映像の2カ所を入れ替える swaprect

映像をたくさん分割すればするほど組み合わせが複雑になるが、フィルタチェーンの文字数制限があるので無制限に分割できるわけではない。バラバラに分割して暗号化された映像を元に戻すには同じフィルタチェーンを逆順に設定すれば元の映像に戻すことができる。swaprect フィルタの他にも swapuv で UV を入れ換えたり、hflip で左右反転することでより難読化することができる。swaprect フィルタを多用してもそれほど負荷は上がらないので気にする必要は無いが、映像が難読化され圧縮しにくい映像になり容量が増える。
続きを読む 映像の場所を入れ換えて暗号化する

音声のダイナミックレンジを広げる crystalizer

ffmpeg 3.2 でリリース予定のオーディオフィルタ。単純なアルゴリズムで音声のダイナミックレンジを広げる crystalizer フィルタの使い方。

基本コマンド

既定値のオプションを当てる
ffmpeg -i input -af crystalizer=i=2:c=1 output
ffmpeg -i input -af crystalizer=2:1 output
ffplay -i input -af crystalizer=2:1

公式ドキュメント:FFmpeg Filters Documentation : crystalizer
続きを読む 音声のダイナミックレンジを広げる crystalizer

平均ブラー avgblur

ffmpeg 3.2 でリリース予定のビデオフィルタ。隣り合うピクセルを平均化してぼかす avgblur フィルタの使い方。

基本コマンド

既定値のオプションを当てる
ffmpeg -i input -vf avgblur=sizeX=1:planes=15:sizeY=0 output
ffmpeg -i input -vf avgblur=1:15:0 output
ffplay -i input -vf avgblur=1:15:0

公式ドキュメント:FFmpeg Filters Documentation : avgblur
続きを読む 平均ブラー avgblur

ガウシアンブラー gblur

ffmpeg 3.2 でリリース予定のビデオフィルタ。ガウシアンカーネルを使ってしてぼかす gblur フィルタの使い方。カーネルについては convolution フィルタでも使えるが、具体的な内容は省略。

基本コマンド

既定値のオプションを当てる
ffmpeg -i input -vf gblur=sigma=0.5:steps=1:planes=15:sigmaV=-1 output
ffmpeg -i input -vf gblur=.5:1:15:-1 output
ffplay -i input -vf gblur=.5:1:15:-1

公式ドキュメント:FFmpeg Filters Documentation : gblur
続きを読む ガウシアンブラー gblur

エッジ検出フィルタ sobel, prewitt

ffmpeg 3.2 でリリース予定のビデオフィルタ。エッジ検出フィルタに単体では edgedetectfrei0rsobel があり、カーネルを指定する convolution でもエッジ検出ができるが、今回のこれらのフィルタは手軽でエッジ部分の線が太いのでマスクするのにも便利。sobelprewitt はカーネルが少し異なるがオプションは同じである。

ffmpeg でエッジ検出をする edgedetect
ffmpeg で使える frei0r フィルタの使い方
先鋭化やぼかし、エンボス処理などができる convolution
ffmpeg でエッジマスク

基本コマンド

既定値のオプションを当てる
ffmpeg -i input -vf sobel=planes=15:scale=1:delta=0 output
ffmpeg -i input -vf sobel=15:1:0 output
ffplay -i input -vf sobel=15:1:0

公式ドキュメント:FFmpeg Filters Documentation : sobel
公式ドキュメント:FFmpeg Filters Documentation : prewitt
続きを読む エッジ検出フィルタ sobel, prewitt

2つの連続したフィールドを1つのフレームで出力する weave

ffmpeg 3.2 でリリース予定のビデオフィルタ。フィールドを合わせてフレームにする weave フィルタの使い方。縦解像度が2倍になり、フレームレートとフレーム数は2分の1になる。

基本コマンド

separatefields でフィールド分解したのをフレームに戻す。つまり何も変わらない
ffmpeg -i input -vf separatefields,weave output
ffplay -i input -vf separatefields,weave

tinterlace フィルタの tinterlace=0 と同じことができる

公式ドキュメント:FFmpeg Filters Documentation : weave
続きを読む 2つの連続したフィールドを1つのフレームで出力する weave

複数の映像を1つの映像に交互に挟む interleave

2以上の映像を交互に1つの連続した映像で出力する interleave フィルタの使い方。出力フレーム数は1入力のフレーム数が上限になるので複数映像を交互に挟んで出力する場合はあらかじめフレーム数を減らしておく必要がある。

基本コマンド

偶数と奇数フレームに分けて合わせている。適宜 null フィルタを変更。このコマンドでは何も変化しない
ffmpeg -i input -vf "split[0][1];[0]select=(mod(n-1\,2)),null[0a];[1]select=(mod(n\,2)),null[1a];[0a][1a]interleave=2" output
ffplay -i input -vf "split[0][1];[0]select=(mod(n-1\,2)),null[0a];[1]select=(mod(n\,2)),null[1a];[0a][1a]interleave"

公式ドキュメント:FFmpeg Filters Documentation : interleave, ainterleave
続きを読む 複数の映像を1つの映像に交互に挟む interleave

ウェーブレットデノイザ vaguedenoiser

ffmpeg 3.2 でリリース予定のビデオフィルタ。Cohen-Daubechies-Feauveau(CDF) 9/7 のウェーブレットデノイザ。フィルタを当てるチャンネルを指定できる。

基本コマンド

ffmpeg -i input -vf vaguedenoiser=threshold=2:method=2:nsteps=6:percent=85:planes=15 output
ffmpeg -i input -vf vaguedenoiser=2:2:6:85:15 output
ffplay -i input -vf vaguedenoiser=2:2:6:85:15

公式ドキュメント:FFmpeg Filters Documentation : vaguedenoiser
続きを読む ウェーブレットデノイザ vaguedenoiser

ffmpeg でフレーム補間する minterpolate

ffmpeg 3.2 でリリース予定のビデオフィルタ。前後フレームから中間フレームを作り出す minterpolate フィルタの使い方。無料でフレーム補完する方法には AviSynth+MvTools が一般的だが、もっと手軽に1コマンドでフレーム補完した動画を作ることができる。

基本コマンド

かなり負荷が高く、シングルスレッドしか働かないので出力解像度を小さくしないと ffplay ではプレビューがまともに動かない。

30fps の動画を 60fps にフレーム補完する
ffmpeg -i input -vf minterpolate=fps=60:mi_mode=mci:mc_mode=obmc:me_mode=bilat:me=epzs:mb_size=16:search_param=32:vsbmc=0:scd=fdiff:scd_threshold=5 output
ffmpeg -i input -vf minterpolate=60:2:0:1:8:16:32:0:1:5 output

公式ドキュメント:FFmpeg Filters Documentation : minterpolate
続きを読む ffmpeg でフレーム補間する minterpolate