ffmpeg で無限入力が可能に

今までは-loop 1で画像の無限入力はできていたが、これからは音声や映像も無限に入力できるようになった。

ループ回数を指定できる loop, aloop

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

FFMPEG: Why does the concat filter cause loss of a/v sync/lipsync? – Video Production Stack ExchangeFFmpeg concat video and audio out of sync – Stack Overflowより、-fflags +genptsを追加した。ループするファイルの入力オプションとして使う。1つの入力にフィルタでループなどして時間が長くなるなら出力オプションで使う。

Continue reading “ffmpeg で無限入力が可能に”

YUV RGB を比較計算する blend

2入力した映像の YUVA や RGBA を比較して結果を表示するblendの使い方。差分を調べて比較動画を作ったり、マスクした部分に別の映像を重ねたりいろいろな映像効果を作ることができる。

基本コマンド

比較動画として上に二つ並べて左下に差分(Y は 0 差分、UV は1入力)の動画を表示するコマンド例。
ffplay -f lavfi -i "movie=left.mp4,setpts=PTS-STARTPTS,split[a1][a2];movie=right.mp4,setpts=PTS-STARTPTS,split[b1][b2];[a1][b1]blend=c0_mode=difference,pad=2*iw:ih:0:0[blend];[a2][b2]hstack[tmp];[tmp][blend]vstack"
ffmpeg -i left.mp4 -i right.mp4 -filter_complex [0:v]setpts=PTS-STARTPTS,split[a1][a2];[1:v]setpts=PTS-STARTPTS,split[b1][b2];[a1][b1]blend=c0_mode=difference,pad=2*iw:ih:0:0[blend];[a2][b2]hstack[tmp];[tmp][blend]vstack -c:a copy output

比較動画として上に二つ並べて左下に差分(Y は 0 差分、UV は128)の動画を表示するコマンド例。
ffplay -f lavfi -i "movie=left.mp4,setpts=PTS-STARTPTS,split[a1][a2];movie=right.mp4,setpts=PTS-STARTPTS,split[b1][b2];[a1][b1]blend=c0_mode=difference,lutyuv=val:128:128,pad=2*iw:ih:0:0[blend];[a2][b2]hstack[tmp];[tmp][blend]vstack"
ffmpeg -i left.mp4 -i right.mp4 -filter_complex [0:v]setpts=PTS-STARTPTS,split[a1][a2];[1:v]setpts=PTS-STARTPTS,split[b1][b2];[a1][b1]blend=c0_mode=difference,lutyuv=val:128:128,pad=2*iw:ih:0:0[blend];[a2][b2]hstack[tmp];[tmp][blend]vstack -c:a copy output

さらに音声も再生するコマンド例(音声は left.mp4)。
ffplay -f lavfi -i "movie=left.mp4,setpts=PTS-STARTPTS,split[a1][a2];movie=right.mp4,setpts=PTS-STARTPTS,split[b1][b2];[a1][b1]blend=c0_mode=difference,lutyuv=val:128:128,pad=2*iw:ih:0:0[blend];[a2][b2]hstack[tmp];[tmp][blend]vstack[out0];amovie=left.mp4[out1]"

開始フレームが一致しない場合はsetptsフィルタの前にtrimフィルタを使う。以下は開始1フレームカットする例。
trim=start_frame=1

間違い探しを簡単に調べるコマンド(インターネット上の画像も入力できる)。
ffmpeg -i img1.jpg -i img2.jpg -filter_complex setsar=1/1[0a];[1]setsar=1/1,[0a]blend=c0_mode=grainextract,lutyuv=val:128:128 output.jpg

Continue reading “YUV RGB を比較計算する blend”

特定の時間だけフィルタを当てるタイムライン編集について

ffmpegのフィルタの中には効果を与えるのに期間(区間)、以上、未満、毎の時間の条件をつけることができるものがある。これらをつけられるのはffmpeg -filtersで調べたときにTと表示されるフィルタである。

ffmpeg -filters using Gyan ffmpeg

関連フィルタにsendcmd、asendcmdのコマンド対応がある。こちらは任意の時間の他にパラメータも任意に変更できる。
任意に時間や、効果を変えられるsendcmd、asendcmdフィルタの使い方

Continue reading “特定の時間だけフィルタを当てるタイムライン編集について”

Zライブラリを使ったリサイズフィルタ zscale

scaleフィルタと同じようにリサイズ出来るフィルタだが、それとは別にspline16, spline36などの高品質のリサイズやHDRに対応している。ただしspline16, spline36scaleフィルタで設定できるオプションと比べ処理が速くないのでリアルタイムエンコード、つまり配信用途なら処理が遅くても問題ない。2022年3月4日のコミットでスライススレッドに対応しscaleフィルタと同程度に速くなった。scaleフィルタと違ってインターレース保持のリサイズは出来ない。HDRからSDRに変換するときはtonemapフィルタでトーンマッピングする。

外部ライブラリなので別途インストールする。
配布先:sekrit-twc/zimg: Scaling, colorspace conversion, and dithering library
配布先:the-sekrit-twc / zimg — Bitbucket(こちらで更新している)

Continue reading “Zライブラリを使ったリサイズフィルタ zscale”

2015年9月のニコ生統計

集計期間は週間のニコ生統計の9月分である。2015年の1月の2週目から取得漏れの R-18 放送を含めて Vita API で取得し始めたのでそれ以前と比べて取得放送数が増えている。

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

トーンカーブで RGB の調整が出来る curves

RGBをトーンカーブで色調調整ができるcurvesフィルタの使い方。ペイントツールで同時に表示されるヒストグラムはhistogramフィルタで表示できるが、Photoshopのようなメリハリの付いたグラフではなくてGIMPに近い感じになる。またPhotoshopのトーンカーブプリセットファイルのACVが読み込める。

ffmpeg でヒストグラムを表示する

Continue reading “トーンカーブで RGB の調整が出来る curves”

RGB, CMYK を個別に調整できる selectivecolor

ffmpeg 3.0 から使えるフィルタ。RGB を個別に明るくしたり暗くしたりできるフィルタにcolorbalanceがあるが、このselectivecolorフィルタは RGB だけではなく CMYK にも対して明るくしたり、暗くしたり、他の色を混ぜたり出来る。ただし RGB を CMYK 形式に変換しての保存はできない。

Adobe Photoshop の 特定色域の選択ツールに似ていて、Photoshop の .asv が読み込める。具体的にどのようなことができるかは「photoshop 特定色域の選択(bing)」で検索するといろいろ見つかる。

Windows の ffmpeg で生放送する方法 : colorbalance

基本コマンド

色のオプションは4つまでスペースを挟んで指定でき、順番に CMYK(cyan, magenta, yellow, key plate)の色を混ぜることが出来る。出力カラーフォーマットは bgr0 になる。使い方は調整したい色を指定し、4つの引数で順番に CMYK の混ぜたい色の割合を指定する。

緑の部分にシアンを50%増して黄を33%減らし、青の部分にマジェンタを27%増す
ffplay input -vf "selectivecolor=greens=0.5 0 -0.33 0:blues=0 0.27"

MySelectiveColorPresets フォルダにある Misty.asv を読み込む
バイナリデータなのでテキストエディタでは編集できない。サンプルファイル
ffplay input -vf "selectivecolor=psfile=MySelectiveColorPresets/Misty.asv"

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

Continue reading “RGB, CMYK を個別に調整できる selectivecolor”

ツイキャスの高画質配信の録画方法

PCから高画質ゲーム配信(外部ツール配信)をするには – ツイキャス

高画質ゲーム配信ができるアカウント

高画質配信ができるアカウントは全て、高画質ゲーム配信ができます。
レベル24以上のユーザーは高画質(ゲーム)配信できます。
高画質配信へのお申込みはこちらです。(企業・団体さま・アーティストさま向け)
高画質配信ができるユーザーから招待を受けると、高画質(ゲーム配信)ができるようになります。

記事にあるように“高画質ゲーム配信“であり、高画質ウェブカメ雑談配信は対象になっていない。

配信はPCのブラウザからは RTMP のストリーミングで、iOS などのモバイル端末は HLS の再エンコード映像として配信されている。

配信の録画には RTMP ではまず以下にアクセスして
http://twitcasting.tv/streamserver.php?mode=view&appid=TCViewerFlash&rtmp=1&target=ユーザーID

以下のようなレスポンスが有り
edge101.moi.st/publisher/123456789-123456789012345.stream?is_publisher=0:1935:GET :ユーザーID:123456789

rtmpdump では以下のコマンドで録画できる
rtmpdump -r rtmp://edge101.moi.st/publisher/123456789-123456789012345.stream -y publisher/123456789-123456789012345.stream?is_publisher=0 -y ユーザーID -o output.flv

ffmpeg では
ffmpeg -i "rtmp://edge101.moi.st/publisher/123456789-123456789012345.stream app=publisher/123456789-123456789012345.stream?is_publisher=0 playpath=ユーザーID" -c copy output.flv

ffmpeg 2.8.1 リリース

ffmpeg 2.8.1 が2015年10月14日リリースされた。今回のアップデートは修正が主で最新gitで公開されている新規のフィルタは追加されていない。

Update for 2.8.1 : git.videolan.org Git – ffmpeg.git/blobdiff – Changelog

master で公開されているフィルタはこちらから
git.videolan.org Git – ffmpeg.git/blob – Changelog

extrastereo filter
ocr filter
alimiter filter
stereowiden filter
stereotools filter
rubberband filter
tremolo filter
agate filter
chromakey filter
maskedmerge filter
displace filter
selectivecolor filter

この中で既に書いているのが、
stereowidenWindows の ffmpeg で生放送する方法 : stereowiden(立体音響化)
rubberbandサンプリング周波数を変えずにテンポとピッチを変える rubberband
chromakeyffmpeg でクロマキー合成 その2
maskedmergeマスクして2入力を合わせる maskedmerge

別途ライブラリが必要な ocr は学習させないと日本語がほとんど読み取れないので日本語での実用性はかなり低い。selectivecolor は次回更新予定。

サンプリング周波数を変えずにテンポとピッチを変える rubberband

今まではテンポ(再生速度)を変えるにはatempoフィルタを、ピッチ(高低)を変えるにはasetrateフィルタを使っていたが、rubberbandフィルタはasetrateフィルタで変わる周波数を変えずにピッチとテンポを変えることができ、atempoフィルタよりも品質がよい場合がある

rubberbandフィルタは別途ライブラリをインストールしないと使えないのと、現在は 64bit に未対応である

標準フィルタを使う場合。
映像と音声の pts を扱う setpts, asetpts
ピッチを任意の周波数に変更するasetrate

Continue reading “サンプリング周波数を変えずにテンポとピッチを変える rubberband”