月別アーカイブ: 2015年8月

ニコ生で使うデノイズフィルタの例

一般的に配信用途でのデノイズには hqdn3d フィルタだけが使われているが、個別のコンシューマゲームとして一番配信されている Splatoon を ffmpeg で配信するときに 384kbps の時間帯ではどうしても画質が維持できない。そこでもう一つデノイズフィルタを加えることで全体の画質を向上させてみた。

使うのは pp フィルタで随分前からブログで紹介していたが、配信向きではないと書いていたので使われることがなかった。しかし色々調べてみると見た目の画質は維持しながら 3D特有のテクスチャーを hqdn3d フィルタ以上にぼかすことが出来るので、複雑な部分をぼかしながら他の場所にビットレートを割ることで全体的に見栄えのよい映像にすることが出来る。

Windows の ffmpeg で生放送する方法 : pp
Windows の ffmpeg で生放送する方法 : 3次元デノイズフィルタ(hqdn3d)

そのほかの関連フィルタ:強力な2次元デノイザ sab
続きを読む ニコ生で使うデノイズフィルタの例

入力した2つの音声にクロスフェードをかける acrossfade の使い方

1入力の最後の音量を絞りながら2入力の音量を徐々に上げてつなげるフィルタ。単純に音声ファイルをつなげるのなら concat を使う。

【ffmpeg】動画・音声を連結する concat の使い方

基本コマンド

ffmpeg -i input1 -i input2 -filter_complex acrossfade output.wav

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

オプション

  • nb_samples, ns
    フェード部分のサンプリング周波数の指定。既定値:44100
  • duration, d
    前後それぞれのフェード時間。既定値は nb_samples だけ。つまり1入力の1秒分
  • overlap, o
    フェード部分を重ねるかどうか。既定値:1
  • curve1, c1
    1入力のフェードアウトの仕方の指定。
  • curve2, c2
    2入力のフェードインの仕方の指定。c1 と同様に afade の curve のオプションが使える
    FFmpeg Filters Documentation : afade

kakoroku で公式の長時間放送が全部保存できない原因について

コミュ掲示板の 7767 より、ホラー「監死カメラ」シリーズ48時間一挙放送/ホラー百物語 : lv228170627 の7番目以降の TS とコメントが保存できない理由と対処法について。

原因

48時間の一挙放送であるが、同じ内容の4回ループ放送で同じ内容の部分は同じデータを流しているために kakoroku が重複データとして扱い、2ループ目以降の TS やコメントが保存できない。

対処法

TS データは同じなので 7ファイル目以降を保存する必要は無いが、コメントファイルがこのままでは全部保存できないので別の方法を考える。

コメントを kakoroku 以外にコメビューで保存する方法と、自前にスクリプトを書いて過去コメントを保存して vpos に合わせてシフトと分割も一括する方法の2通りが考えられる。

コメントのシフトと分割については Win ユーザーなら NicomentXenoglossia を使う。

過去コメントはこの方法でも保存できる
アドレス入力でニコ生のコメントを表示する

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

基本コマンド

コンソールに統計データを表示する例
ffprobe -f lavfi movie=input,signalstats="stat=tout+vrep+brng" -show_frames

統計情報をプレビューする例
ffplay -i input -vf signalstats=out=1

drawgraph フィルタの併用で折れ線グラフを表示できる
ffplay -f lavfi -i "movie=input,signalstats,drawgraph=lavfi.signalstats.YAVG:min=0:max=255,drawgrid=0:0:0:32,format=yuv420p"
メタデータを映像化する drawgraph, adrawgraph

metadata フィルタの併用でコンソールにを表示できる
ffplay -f lavfi -i movie=input,signalstats,metadata=print:key=lavfi.signalstats.YDIF:value=0:function=expr:expr='between(VALUE1,0,1)'
メタデータをコンソールに表示する metadata, ametadata

YUV の値だけを改行してテキストに書き出す
trim=end_frame=1 を外すと全フレーム出力する
ffprobe -f lavfi -i "movie=input,signalstats,trim=end_frame=1" -show_entries frame_tags=lavfi.signalstats.YAVG,lavfi.signalstats.UAVG,lavfi.signalstats.VAVG -of default=noprint_wrappers=1:nokey=1 > yuv.txt
trim フィルタの使い方

他のアプリケーションに利用しやすい JSON形式に書き出す
ffprobe -f lavfi -i "movie=input,signalstats,trim=end_frame=1" -show_entries frame_tags=lavfi.signalstats.YAVG,lavfi.signalstats.UAVG,lavfi.signalstats.VAVG -of json > yuv.json

公式ドキュメント:FFmpeg Filters Documentation : signalstats
続きを読む YUV のデータを数値で表示する signalstats

ffmpeg で後ろから読み込みが可能に

通常読込時点の指定には -ss で最初からの経過秒を指定していたが、これからは最後からの秒を指定できるようになった。2015年7月30日のコミットなので最新のGit から利用する。

対象コミット:ffmpeg: Implement support for seeking relative to EOF :: git.videolan.org Git – ffmpeg.git/commitdiff

公式ドキュメント:ffmpeg Documentation :: Main options

使い方

-sseof でマイナス時間を指定する。書式は hh:mm:ss[.xxx], ss[.xxx]
既定値では最後から指定時間だけ出力される。
ffmpeg -sseof -<seconds> -i input output

-t も併用することで時間の調整も出来る。
ffmpeg -sseof -<seconds> -i input -t <seconds> output