新しい映像の動きの評価 vmafmotion

2017年12月16日
vmafmotion, libvmafフィルタの意味をはき違えていたのでタイトルと本文を訂正、修正した。

Netflixが使っている品質評価動きの評価に使われている VMAF(Video Multimethod Assessment Fusion)のモーションスコアを計算する。シーンチェンジ検出のscdetフィルタと似た傾向になるのでシーンチェンジを調べるならscdetフィルタの方が速い。

VMAFを計算するフィルタは2つあり、このvmafmotion./configure --enable-libvmafでライブラリをインストールして使えるlibvmafフィルタがある。前者は1つの映像の vmafモーションスコア(映像の変化)を計算し数値が 0 に近いほど前フレームからの変化が少ないことを示す。後者は2つの映像を比較した vmafスコア(品質評価)を計算し、ssim、psnrフィルタよりも見た目の評価(主観的評価)に近しいものを目指している。

そのほかの動きを検出するフィルタ。
シーンチェンジの時間を調べるscdet
特定の映像フレームや音声サンプルを出力するselect, aselect

基本コマンド

vmafモーションスコアを計算しエンコードが終わると平均 vmafモーションスコアをコンソールに表示する
ffmpeg -i input -vf vmafmotion -an -f null -

さらにフレーム毎の vmafモーションスコアを log.txt のテキストファイルで出力する
ffmpeg -i input -vf vmafmotion=log.txt -an -f null -

再生しながらコンソールに表示する。
ffplay input -vf vmafmotion,metadata=print:key=lavfi.vmafmotion.score

drawtextフィルタで映像にスコアを描写する。
ffplay input -vf vmafmotion,drawtext=y=40:fontfile=C\\://WINDOWS/Fonts/arial.ttf:fontsize=20:fontcolor=white:box=1:boxcolor=black@0.4:text='"vmafmotion ("%{metadata\:lavfi.vmafmotion.score})'

文字を描写する drawtext

drawgraphフィルタで映像の下にスコアを描写する。sで入力した映像と同じ幅を指定する。
ffplay -i input -vf split[0],vmafmotion,drawgraph=lavfi.vmafmotion.score:min=0:max=30:s=1920x256[1];[0][1]vstack

メタデータを映像化する drawgraph, adrawgraph

ffprobeでログを出力する。
ffprobe -v error -f lavfi -i movie=input.mp4,vmafmotion -select_streams v:0 -show_entries packet=pts_time -show_entries packet_tags=lavfi.vmafmotion.score -of csv > vmafmotion.csv

side_dataの行が不要ならgrepで削る。
ffprobe -v error -f lavfi -i movie=input.mp4,vmafmotion -select_streams v:0 -show_entries packet=pts_time -show_entries packet_tags=lavfi.vmafmotion.score -of csv > vmafmotion.csv

ffprobe の使い方

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

オプション

  • stats_file[string]
    すべてのフレームの vmaf モーションスコアを表示したログファイルを指定したパスに出力する。で標準出力する
    既定値:無指定(何も出力しない)

2017年10月のニコ生統計

集計期間は週間のニコ生統計の1ヶ月分である。2015年の1月の2週目から取得漏れの R-18 放送を含めて Vita API で取得し始めたのでそれ以前と比べて取得放送数が増えている。2017年8月24日(34週目)からユーザー生放送の新配信での予約延長が無料になり総配信数が減っている。

Continue reading “2017年10月のニコ生統計”

2017年9月のニコ生統計

集計期間は週間のニコ生統計の1ヶ月分である。2015年の1月の2週目から取得漏れの R-18 放送を含めて Vita API で取得し始めたのでそれ以前と比べて取得放送数が増えている。2017年8月24日(34週目)からユーザー生放送の新配信での予約延長が無料になり総配信数が減っている。

Continue reading “2017年9月のニコ生統計”

ffmpeg 3.4 リリース

2018年2月12日に 3.4.2 がリリースされた。アップデート内容は修正ばかりで新しいフィルタは入ってない。このバージョンで libx264 の複数深度に対応した。

x264 一つのバイナリで複数のビット深度に対応

Changelog: update release version 3.4.2 – ffmpeg.git/commitdiff
git.videolan.org Git – ffmpeg.git/shortlog : n3.4.2

2017年12月11日に 3.4.1 がリリースされた。アップデート内容は修正ばかりで新しいフィルタは入ってない。

Changelog: update release version 3.4.1 – ffmpeg.git/commitdiff
git.videolan.org Git – ffmpeg.git/shortlog : n3.4.1

2017年10月16日、ffmpeg 3.4 Cantor(カントル)がリリースされた。3.4 は 3.3 からのメジャーアップデートでこれまでに取り込まれたコミットのすべてが入っている。

前回更新記事:ffmpeg 3.3 リリース

github.com – RELEASE_NOTES
git.videolan.org Git – ffmpeg.git/blob – Changelog

Continue reading “ffmpeg 3.4 リリース”

ニコ生の非低遅延モードについて

ユーザー生放送新配信HTML5版 非低遅延モードについて|ニコニコインフォ

用途概要

新配信番組は高画質かつ低遅延での視聴が可能となっております。そのためお使いの環境によっては負荷が高まり、映像が途切れる等の現象が起こる可能性がございます。

今回提供を開始いたしました非低遅延モードを選択すると遅延時間は延びてしまう一方で安定した視聴が可能となります。

慢性的に視聴が困難な場合一時的に回線状況が悪い際にご利用いただくことを推奨いたします。

具体的には各セグメント時間が通常の新配信では0.5秒になっているのが、非低遅延モードでは1.0秒になっている。マニフェストに記載してあるセグメント数はどちらも3つなので最低でも普通の新配信は0.5*3の1.5秒。非低遅延モードの新配信は1.0*3の3秒は遅延することになる。

関連記事
ffmpeg で Apple HTTP Live Streaming(HLS)を扱う

矩形部分の YUV, RGB の値を表示する pixscope

ffmpeg 3.4 から追加のフィルタ。矩形部分の YUV, RGB の平均値と最小値、最大値、RMS と矩形の拡大も表示されるpixscopeフィルタの使い方。

基本コマンド

映像中央の縦横7ピクセルを調べて、統計グラフを右下に表示する
ffmpeg -i input -vf pixscope=x=0.5:y=0.5:w=7:h=7:o=0.5:wx=-1:wy=-1 output
ffmpeg -i input -vf pixscope=0.5:0.5:7:7:0.5:-1:-1 output
ffplay -i input -vf pixscope=0.5:0.5:7:7:0.5:-1:-1

pixscope フィルタの表示例

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

Continue reading “矩形部分の YUV, RGB の値を表示する pixscope”

フリッカー(ちらつき) を低減する deflicker

ffmpeg 3.4 から追加のフィルタ。蛍光灯や昔の映像で数フレーム毎に明るくなったり暗くなったりするのを前後フレームから平均してちらつきを抑えるdeflickerフィルタの使い方。

基本コマンド

5フレーム前から輝度の平均が始まる
ffmpeg -i input -vf deflicker=s=5:m=0:bypass=0 output
ffplay -i input -vf deflicker=5:0:0

小数点以下3桁までで丸めるのでs=2:m=6を併用してsignalstatsフィルタの6桁よりログサイズを小さくするのにも使える。
ffprobe -v error -f lavfi -i movie=iput.mp4,deflicker=2:6:1,signalstats -select_streams v:0 -show_entries packet=pts_time -show_entries packet_tags=lavfi.deflicker.luminance,lavfi.signalstats.YAVG -of csv=print_section=0 > deflicker.luminance.csv

YUV のデータを数値で表示する signalstats

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

Continue reading “フリッカー(ちらつき) を低減する deflicker”

2017年8月のニコ生統計

集計期間は週間のニコ生統計の1ヶ月分である。2015年の1月の2週目から取得漏れの R-18 放送を含めて Vita API で取得し始めたのでそれ以前と比べて取得放送数が増えている。2017年8月24日(34週目)からユーザー生放送の新配信での予約延長が無料になり総配信数が減っている。

Continue reading “2017年8月のニコ生統計”

フィルタで手軽にリミッテッドレンジに出来る limiter

ffmpeg 3.4 から追加のフィルタ。各チャンネルの上限と下限を越えたらその上限と下限でカットするlimiterフィルタの使い方。今まではlutフィルタでも同様のことが出来たが、こちらのフィルタの方がコードの量も少なく直感的でわかりやすい。

SafeColorLimiter – Doom9’s Forum

Continue reading “フィルタで手軽にリミッテッドレンジに出来る limiter”