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

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

ffmpeg のフィルタの中には区間、以上、未満、毎の時間の条件をつけることができるものがある。これらをつけられるのは filters で調べたときに T と表示されるフィルタである。記事の下で紹介。

続きを読む 特定の区間だけフィルタを当てるタイムライン編集について

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

scale と同じようにリサイズ出来るフィルタだが、それとは別のリサイズ方法 point, spline16, spline36 が使える。ただし spline16, spline36scale で設定できるオプションと比べ処理が速くないのでリアルタイムエンコード、つまり配信用途なら処理が遅くても問題ない。scale と違ってインターレース保持のリサイズは出来ない。3.0 以降で使える。

ffmpeg の scale で使えるリサイズ方法:FFmpeg Scaler Documentation :: Scaler Options
続きを読む Zライブラリを使ったリサイズフィルタ zscale

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

個別の RGB でも RGB すべてでもトーンカーブで色の調整ができる curves フィルタは Adobe Photoshop や Gimp などのペイントツールによくある機能でこれが ffmpeg でも使える。ペイントツールで同時に表示されるヒストグラムは histogram フィルタで表示できるが、Photoshop のようなメリハリの付いたグラフではなくて Gimp に近い感じになる。また Photoshop のトーンカーブプリセット .acv が読み込める。

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

基本コマンド

青の中央値を少し明るくする
ffplay input -vf "curves=blue='0|0 0.5|0.58 1|1'"

ビンテージプリセットを指定する
ffplay input -vf curves=vintage

Photoshop カーブプリセットを指定して緑も調整する
ffplay input -vf "curves=psfile='MyCurvesPresets/purple.acv':green='0|0 0.45|0.53 1|1'"

gnuplot に渡す
ffmpeg -f lavfi -i color -vf curves=cross_process:plot=/tmp/curves.plt -frames:v 1 -f null -
gnuplot -p /tmp/curves.plt

公式ドキュメント:FFmpeg Filters Documentation : curves
続きを読む トーンカーブで RGB の調整が出来る curves

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

現時点では 3.0 以降から使える。

RGB を個別に明るくしたり暗くしたりできるフィルタに colorbalance があるが、このフィルタは RGB だけではなく CMYK に対しても明るくしたり、暗くしたり、他の色を混ぜたり出来る。ただし RGB の値の中から CMY の部分を編集するのにとどまる。

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

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

基本コマンド

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

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

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

公式ドキュメント:FFmpeg Filters Documentation : selectivecolor
続きを読む 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

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

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

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

今まではテンポ(再生速度)を変えるには atempo を、ピッチ(高低)を変えるには asetrate を使っていたが、rubberbandasetrate で変わる周波数を変えずにピッチとテンポを変えることができる。

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

基本コマンド

2倍速再生にする(映像は2倍速にはならない)
ffplay input -af rubberband=tempo=2

映像も2倍速再生にする
ffplay input -vf setpts=1/2*PTS -af rubberband=tempo=2
ffplay input -vf setpts=1/2*PTS -af atempo=2

公式ドキュメント:FFmpeg Filters Documentation : rubberband
続きを読む サンプリング周波数を変えずにテンポとピッチを変える rubberband

マスクして2入力を合わせる maskedmerge

3入力目をマスクにして、1入力目の映像と2入力目の映像をマスクに合わせて出力する。マスクをどの程度指定するかで1入力目と2入力目の割合を指定できる。バージョンは3.0 以降から使える。アルファチャンネルを追加する alphamerge と負荷は変わらない。

別ファイルの情報から元映像を透過させる alphamerge

マスクの各チャンネル(YUVA, RGBA など)の値から1,2入力に対応したチャンネルがブレンド、またはスルーされる。0 ならば1入力目を、255(8bit)ならば2入力目を反映させる。既定値は1, 2入力がブレンドされる。アルファチャンネルは 0 が完全透過になる。出力フォーマットは1入力と同じになる。マスクをフルレンジに対応させるには1入力がフルレンジ(yuvj420p, gray など)に対応しておかなければならない。途中フルレンジで出力がリミテッドレンジならば最後に format=yuv420p をつけてレンジを直す。

マスクの指定には別ファイルを使う方法と、フィルタを当てて各コンポーネントを調整する方法とがある。各コンポーネントを調整には lut が使いやすい。別ファイルを使う場合にはモノクロ映像を使うことでその部分にだけフィルタを当てるのが手軽になる。

Windows の ffmpeg で生放送する方法 : LUT(ルックアップテーブル)

基本コマンド

ffmpeg -f lavfi -i color,format=rgba,split=3[0][1][2];[0]lutrgb=255:255:255:255[0a];[1]lutrgb=0:0:0:0[1a];[2]lutrgb=255:200:150:100[2a];[0a][1a][2a]maskedmerge=0x0 output

公式ドキュメント:FFmpeg Filters Documentation : maskedmerge
続きを読む マスクして2入力を合わせる maskedmerge

ffmpeg でクロマキー合成 その2

chromakey は出力フォーマットが YUVA になるので動画にクロマキー処理をした動画をオーバーレイするのに使う。バージョンは3.0 以降から使える。

RGBA で処理する colorkey はこちら:ffmpeg でクロマキー合成

基本コマンド

colorkey と基本的には同じ。
ffmpeg -i input1 -i input2 -filter_complex [1:0]chromakey=red:.03:.1[1a];[0:0][a1]overlay output
ffmpeg -i input1 -i input2 -filter_complex [1:0]chromakey=0xff0000:.03:.1[1a];[0:0][a1]overlay output

公式ドキュメント:FFmpeg Filters Documentation : chromakey
続きを読む ffmpeg でクロマキー合成 その2