集計期間は週間のニコ生統計の2月分である。2015年の1月の2週目から取得漏れの R-18 放送を含めて Vita API で取得し始めたのでそれ以前と比べて取得放送数が増えている。
テレシネ処理ができる telecine
テレシネしてフレーム数を増やすことができるtelecine
フィルタの使い方。日本で一般的なテレシネからヨーロッパ形式のテレシネまでいろいろなタイプを指定できる。
基本コマンド
インターレース具合がわかりやすいようにフレーム番号を振っている
ffplay -f lavfi -i color=black:r=24000/1001:d=10,drawtext=fontfile=C\\://WINDOWS/Fonts/msgothic.ttc:text='%{n}':fontcolor=yellow:x=(w-tw)/2:y=(h-th)/2:fontsize=64,telecine
インターレースの動画でfpsが2倍に読み込まれるときには-bsf:v h264_metadata=fixed_frame_rate_flag=1を指定する。
ffmpeg -i input -c:v libx264 -flags +global_header+ilme+ildct -weightp 0 -bsf:v h264_metadata=fixed_frame_rate_flag=1 output
ffmpegで29.97iの動画(m2ts)を生成して、TMPGenc Authoring Worksで取り込むと59.97iで認識されて困ってる…。VLCで開くと29.97だし、特に異常な点は見られない…。 https://x.com/nogisawa/status/1821485468481200220
— やむ/nogisawa (@nogisawa) August 8, 2024
インターレースを解除する bwdif
bwdif
(Bob Weaver Deinterlacing Filter)フィルタはyadif
フィルタとキュービック補間アルゴリズムが使われているw3fdif
フィルタを元とする動きに対応したインターレース解除フィルタである。
修正 2016年6月27日
deint オプションの初期値が最初のコミットからメジャーアップデートの 3.1 に変わるときに 0, all に変更。
インターレース解除フィルタ w3fdif
w3fdif
フィルタとは BBC R&D の Martin Weston氏を元とし、BBC R&D の Jim Easterbrook氏がインターレース解除の機能を実装した片フィールド補間のインターレース解除フィルタである。w3fdif とは “Weston 3 Field Deinterlacing Filter”。mode、parityがオプションの間に追加されたのでオプション名を指定してないと設定内容が以前と異なる。
関連記事
ffmpeg でインターレース解除
基本コマンド
ffplay input -vf w3fdif:filter=1:mode=1:parity=-1:deint=0
ffplay input -vf w3fdif=1:1:-1:0
公式ドキュメント:FFmpeg Filters Documentation : w3fdif
オプション
- filter[int]
インターレースの係数指定 - 0, simple:単純。低負荷
- 1, complex:複雑。高負荷。既定値
- mode[int]
インターレースの種類 - 0, frame:2枚のフィールドから1枚のフレームを作る
- 1, field:1枚のフィールドから1枚のフレームを作る。いわゆる片フィールド補間でフレーム数が2倍になる。既定値
- parity[int]
トップボトムどちらが先かを指定する - 0, tff:トップフィールドファースト
- 1, bff:ボトムフィールドファースト
- -1, auto:自動設定。既定値
- deint[int]
どのフレームを処理するか - 0, all:すべて。既定値
- 1, interlaced:インターレースフラグがあるのだけ
一番メジャーなインターレース解除フィルタ yadif
インターレース解除といえばとりあえずこのフィルタの名前が挙がるほど有名なフィルタ。yadifはyet another deinterlacing filterの略語。
手動でフィールド処理を行う fieldhint
フィールドオーダーが予め分かっている場合に、テキストファイルに正しいフィールドオーダーを記載することでどのインターレス解除フィルタよりも高速に逆テレシネ、プログレッシブ化できるfieldhint
フィルタの使い方。いわゆる逆テレシネフィルタである。
間引くフレームも分かるのでdecimate
フィルタではなくtrim
フィルタを使うことでより正確に処理ができる。フィールドを選択できるのがfieldhint
フィルタでフレームを選択するのがselect
フィルタ。固定周期なら一度の指定で済むが途中で周期が変わると ffmpeg だけでは場所の特定が難しい。weave
フィルタでフィールドをフレームに並べてshuffleframes
フィルタで一定周期のフレームを間引ける。
- ffmpeg でインターレース解除
- 指定フレーム毎に順番を入れ換える shuffleframes
- 2つの連続したフィールドを1つのフレームで出力する weave
- 特定の映像フレームや音声サンプルを出力する select, aselect
基本コマンド
単純なプログレッシブ化
ffmpeg -i input -vf fieldhint=hint.txt:relative output
ffmpeg -i input -vf fieldhint=hint.txt:1 output
ffplay -i input -vf fieldhint=hint.txt:1
ntsc 29.976 フレームレートの動画をtrim
フィルタを併用して5フレーム中2フレーム目を間引く例(n は 0 スタート)。trim
フィルタで間引く場合はfps
フィルタで正しいフレームレートを指定しないと再び重複フレームが作られる
ffmpeg -i input -vf fieldhint=hint.txt:relative,select='mod(n-1,5)',fps=24000/1001 output
ffmpeg – remove sequentially duplicate frames – Stack Overflowよりtrim
フィルタを使わずにmpdecimate, decimate
フィルタを代わりに使う。
ffmpeg -i input -vf decimate output
ffmpeg -i input -vf mpdecimate,setpts=N/FRAME_RATE/TB output
CIE 色度図を表示する ciescope
CIE色度図を表示するciescope
フィルタの使い方。出力ピクセルフォーマットはrgba64leなので余白部分をオーバーレイで透過できる。
基本コマンド
ffplay input -vf ciescope=system=7:cie=0:gamuts=0:s=512:i=0.001:contrast=.75:corrgamma=1:showwhite=0:gamma=2.6:fill=1
ffplay input -vf ciescope=7:0:0:512:.001:.75:1:0:2.6:1

オーバーレイする例。
ffplay input -vf split[v],ciescope,[v]overlay=x=0:y=0
- CIE色の見えモデル2002 : CIECAM02/jp – RawPedia : archive.org
- 2018/3/121視覚や色の規格化の最新動向:PDF
- CIE色の見えモデル(CIECAMO2)の概要とその応用:PDF
フィルタのベンチマークを調べることができる bench, abench
平均負荷と最大負荷、最小負荷を調べることができる。
基本コマンド
縦横半分にscale
でリサイズしたビデオフィルタのベンチマーク
ffmpeg -i input -vf bench=start,scale=iw/2:-1,bench=stop -an -f null -
ffplay -i input -vf bench=start,scale=iw/2:-1,bench=stop
オーディオフィルタcompand
のベンチマーク
ffmpeg -i input -af abench=start,compand,abench=stop -an -f null -
ffplay -i input -af abench=start,compand,abench=stop
Windows の ffmpeg で生放送する方法 : compand
ループ回数を指定できる loop, aloop
ffmpeg で無限入力が可能にで追加されていたが、フィルタを掛けて加工することはできなかった。今回はフィルタ内でループするのでループ回数やループした部分にもフィルタが当てられる。
基本コマンド
1回ループして2回読み込む
asetpts
を追加した。2017年10月4日
setpts
を追加した。2019年2月20日。これより。
ffmpeg -i input -filter_complex loop=1:32767:0,setpts=N/(FRAME_RATE*TB);aloop=1:2.14748e+009:0,asetpts=N/SR/TB
reverse
フィルタと併用したループ例。
ffmpeg -f lavfi -i testsrc2=d=5.5 -vf trim=start=3.5:end=5.5,setpts=0.5*PTS-STARTPTS,split[out0][out1];[out0]reverse[r];[out1][r]concat,loop=2:250,setpts=N/25/TB avm.gif
映像と音声を逆再生にエンコードする
Make Boomerang w/ single FFmpeg Command | by Salih Çağlar Ispirli | Apr, 2022 | Mediumから引用。
公式ドキュメント:FFmpeg Filters Documentation : loop
公式ドキュメント:FFmpeg Filters Documentation : aloop
オプション
- loop[int]
ループ回数。-1 で無限
既定値:0
範囲:0からINT_MAXまで - size[int64]
ループにどれだけバッファサイズを取るか
loop
ならフレーム数。aloop
ならサンプル数
既定値:0
範囲:0から32767まで:loop
範囲:0からINT_MAXまで:aloop
- start[int64]
ループするときにどの位置からループするか
loop
ならフレーム数。aloop
ならサンプル数
既定値:0
範囲:0からI64_MAXまで
メタデータをコンソールに表示する metadata, ametadata
特定のフィルタで出力されるメタデータを扱うことができるmetadata
フィルタの使い方。ametadata
フィルタも同じオプションで使うことができる。こちらはコンソールに出力するに対してdrawgraph
フィルタは映像にテキストやグラフで出力する。drawgraph
フィルタと比べて出力範囲を指定しなくても良いので使いやすい。functionを使うことでメタデータの内容を条件で使い分けることができる。
メタデータを映像化する drawgraph, adrawgraph
基本コマンド
signalstats
フィルタからYDIF
を表示している。
ffplay -i input -vf signalstats,metadata=print:key=lavfi.signalstats.YDIF:function=expr:expr='between(VALUE1\,0\,1)'
unsharp
フィルタのY差分をssim
で表示している。
ffplay -i input -vf split[a][b];[b]unsharp[B];[a][B]ssim,metadata=print:key=lavfi.ssim.Y
drawtext
フィルタで映像に書き込む。
ffplay -i input -vf split[a][b];[b]unsharp[B];[a][B]ssim,drawtext=fontfile=C\\://WINDOWS/Fonts/arial.ttf:text='"SSIM="%{metadata\:lavfi.ssim.all}'
ebur128
フィルタでM、S、Iを同時に表示するにはametadata
フィルタを3つ並べる。
ffplay -i input -af ebur128=metadata=1,ametadata=print:key=lavfi.r128.M,ametadata=print:key=lavfi.r128.S,ametadata=print:key=lavfi.r128.I
ffplay -f lavfi -i amovie=input,ebur128=metadata=1,ametadata=print:key=lavfi.r128.M,ametadata=print:key=lavfi.r128.S,ametadata=print:key=lavfi.r128.I[out0];amovie=input[out1]
黒が50%未満を出力せずに、その前のフレームをコピーして出力する。blackframe=0
で全フレームを対象に、metadata
フィルタで対象フレームを選ぶ。コピーした重複フレームではなく可変フレームで出力するには-vsync vfrにする。
ffmpeg -i input -vf blackframe=0,metadata=select:key=lavfi.blackframe.pblack:value=50:function=less -vsync cfr -c:a copy output
idet
フィルタのsingle.progressiveのログをテキストで出力する。
ffmpeg -i input -vf idet,metadata=print:key=lavfi.idet.single.progressive:file=single.progressive.txt -an -f null -
ffprobeでsiti
フィルタのlavfi.siti.si,lavfi.siti.tiをcsvで出力する。
ffprobe -v error -f lavfi -i movie=input.mp4,siti -show_entries packet=pts_time -show_entries packet_tags=lavfi.siti.si,lavfi.siti.ti -read_intervals "%1" -of csv > siti.csv
メタデータを標準出力する。
metadata=mode=print:file=-
metadata=mode=print:file='pipe\:4'
- ffmpeg で使える評価式
- ffmpeg でメタデータを加える
- 黒フレームを調べる blackframe
- 2つの映像の画質評価をする ssim
- ffmpeg でのフレームレート設定の違い
- YUV のデータを数値で表示する signalstats
- フレームがインターレースかどうかを調べる idet
- 適切な音量が調べられる ffmpeg の ebur128 の使い方
公式ドキュメント:FFmpeg Filters Documentation : metadata, ametadata
公式wiki:FilteringGuide – FFmpeg : Filter Metadata