2018年6月のニコ生統計

集計期間は週間のニコ生統計の1ヶ月分である。2018年からカテゴリタグの割合は今までと変わらないが、1枠30分の割合が少なくなったので来場者数とコメント数の6000以上を除かないすべての放送を対象にした。それに伴い平均値は除外した。来場者数はTS視聴可能時間が来れば増え、TS来場者数を含まずに計算することは困難な仕様なので、翌日(当日)の朝に前日の6時から当日の6時までを取得している。

全放送を対象にしたので改めて以前の放送のデータを使って調べ直している。

Continue reading “2018年6月のニコ生統計”

3次元周波数領域デノイズフィルタ fftdnoiz

3次元周波数領域デノイズフィルタ fftdnoiz の使い方。ただし既定値では3次元はなく2次元設定になっている。他の3次元デノイズフィルタに hqdn3d がある。

基本コマンド

ffmpeg -i input -vf fftdnoiz=sigma=1:amount=1:block=4:overlap=0.5:prev=0:next=0:planes=7 output
ffplay -i input -vf fftdnoiz=1:1:4:0.5:0:0:7

3次元デノイズにするには prev, next を有効にする
ffplay -i input -vf fftdnoiz=1:1:4:0.5:1:1:7

公式ドキュメント:FFmpeg Filters Documentation : fftdnoiz

Continue reading “3次元周波数領域デノイズフィルタ fftdnoiz”

ブロッキングアーティファクトを除去する deblock

不可逆圧縮したときに生じる圧縮アーティファクトを除去する deblock フィルタの使い方。

圧縮アーティファクト – Wikipedia

基本コマンド

ffmpeg -i input -vf deblock=filter=1:block=8:alpha=0.098:beta=0.05:gamma=0.05:delta=0.05:planes=15 output
ffplay -i input -vf deblock=1:8:0.098:0.05:0.05:0.05:15

ブロックサイズ4ピクセルの弱いフィルタ
ffplay -i input -vf deblock=filter=weak:block=4
ブロックサイズ4ピクセルの強いフィルタにエッジのでブロックを強化
ffplay -i input -vf deblock=filter=strong:block=4:alpha=0.12:beta=0.07:gamma=0.06:delta=0.05
上と似ているが最初のチャンネルしか効果がない
ffplay -i input -vf deblock=filter=strong:block=4:alpha=0.12:beta=0.07:gamma=0.06:delta=0.05:planes=1

公式ドキュメント:FFmpeg Filters Documentation : deblock

Continue reading “ブロッキングアーティファクトを除去する deblock”

2つの映像の画質評価をする PSNR

2入力した映像を比較して PNSR(Peak Signal to Noise Ratio) の値を計算する。MSE(mean squared error) は PSNR を計算するのに使われる。

関連フィルタ
2つの映像の画質評価をする SSIM
新しい映像の品質評価 libvmaf

基本コマンド

最終結果だけを表示。1入力がオリジナルの動画で、2入力が PSNR を計算する動画
ffmpeg -i input1 -i input2 -filter_complex psnr -an -f null -

ログファイルを出力する。
ffmpeg -i input1 -i input2 -filter_complex psnr=stats.txt -an -f null -

metadata フィルタでフレーム単位でコンソールに表示する方法。ここでは unsharp フィルタの psnr_avg を表示している。
ffplay -i input -vf split[a][b];[b]unsharp[B];[a][B]psnr,metadata=print:key=lavfi.psnr.psnr_avg

映像に焼き付けて再生する。
ffplay -f lavfi -i movie=input1.mp4[a];movie=input2.mp4[b];[a][b]psnr,drawtext=fontfile="c\://Windows/Fonts/arial.ttf":fontsize=20:fontcolor=white:box=1:boxcolor=black@0.4:text='"PSNR="%{metadata\:lavfi.psnr.psnr_avg}'

lavfi.psnr.X 形式で X に代入できるのは、mse_avg, psnr_avg である。

framesync の設定にも対応している
2ファイル入力するフィルタの挙動設定 framesync

Continue reading “2つの映像の画質評価をする PSNR”

2018年5月のニコ生統計

集計期間は週間のニコ生統計の1ヶ月分である。2018年からカテゴリタグの割合は今までと変わらないが、1枠30分の割合が少なくなったので来場者数とコメント数の6000以上を除かないすべての放送を対象にした。それに伴い平均値は除外した。来場者数はTS視聴可能時間が来れば増え、TS来場者数を含まずに計算することは困難な仕様なので、翌日(当日)の朝に前日の6時から当日の6時までを取得している。

全放送を対象にしたので改めて以前の放送のデータを使って調べ直している。

Continue reading “2018年5月のニコ生統計”

特定の映像フレームや音声サンプルを出力する select, aselect

特定のフレーム間隔での出力なら trim. atrim フィルタでもよいが、select フィルタはピクチャータイプやインターレースタイプの指定でも出力できる。難点はものすごく処理が遅い。

trim フィルタの使い方

基本コマンド

select フィルタを使いながら音声も同期しつつ出力するのは難しいので音声は無効化 -an している。

0(最初)から100フレーム目までの合計101フレームを出力する。
ffmpeg -i input -vf select="between(n\,0\,100)",setpts=PTS-STARTPTS -vsync 0 -an output
同じ出力結果を trim フィルタで行う。こちらの方が処理が速い。
ffmpeg -i input -vf trim=start_frame=0:end_frame=101,setpts=PTS-STARTPTS -vsync 0 -an output

Continue reading “特定の映像フレームや音声サンプルを出力する select, aselect”

2018年4月のニコ生統計

集計期間は週間のニコ生統計の1ヶ月分である。2018年からカテゴリタグの割合は今までと変わらないが、1枠30分の割合が少なくなったので来場者数とコメント数の6000以上を除かないすべての放送を対象にした。それに伴い平均値は除外した。来場者数はTS視聴可能時間が来れば増え、TS来場者数を含まずに計算することは困難な仕様なので、翌日(当日)の朝に前日の6時から当日の6時までを取得している。

全放送を対象にしたので改めて以前の放送のデータを使って調べ直している。

Continue reading “2018年4月のニコ生統計”

各フィールドをフレームに変換する separatefields

分離フィールドを交互に挟んだフレームにする separatefields フィルタ。フレーム数とフレームレートを2倍に、出力映像の縦解像度を半分にする。トップ、ボトムどちらのフィールドを先に出力するかは動画情報による。もし間違っているのなら setfield フィルタを先に指定する。

基本コマンド

ffmpeg -i input -vf separatefields output
ffplay -i input -vf separatefields

分離フィールドを元の映像に戻すには weave フィルタを使う。
ffmpeg -i input -vf separatefields,weave output
ffplay -i input -vf separatefields,weave

公式ドキュメント:FFmpeg Filters Documentation : separatefields

フィールドタイプのフラグを建てる setfield

インターレースの映像でトップとボトムのどちらが最初なのかを指定する setfield フィルタ。フィールドタイプが間違っているときに修正する。

基本コマンド

ffmpeg -i input -vf setfield=mode=auto output
ffplay -i input -vf setfield

公式ドキュメント:FFmpeg Filters Documentation : setfield

オプション

mode[int]
フィールドモードの指定

  • -1, auto
    入力と同じ。既定値
  • 0, bff
    ボトムフィールドファースト
  • 1, tff
    トップフィールドファースト
  • 2, prog
    プログレッシブ

簡易的なフレーム補間をする framerate

本格的なフレーム補間は minterpolate フィルタがあるが、framerate は前後フレームを平均化してフレーム補間を行う。

公式ドキュメント:FFmpeg Filters Documentation : framerate

基本コマンド

ffmpeg -i input -vf framerate=fps=50:interp_start=15:interp_end=240:scene=8.2:flags=scd output
ffplay -i input -vf framerate=50:15:240:8.2:scd

オプション

  • fps[int]
    出力フレームレート数の指定
    既定値:50
  • interp_start[int]
    線形補間される範囲の最初の値
    既定値:15
    範囲:0 から 255 まで
  • interp_end[int]
    線形補間される範囲の最後の値
    既定値:240
    範囲:0 から 255 まで
  • scene[double]
    シーンチェンジが検出されるレベルの指定。低い値だと補完しにくくなり、高い値だと補完しやすくなる
  • flags[flags]
    フラグの指定
    scene_change_detect, scd
    scene を使う。既定値