2017年5月のニコ生統計

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

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

VP9(libvpx-vp9) のエンコード設定について

次世代エンコーダ VP9 のエンコード設定について ffmpeg で使ったときの設定をまとめた。libvpx-vp9 は外部ライブラリなので別途インストールする必要がある。さらに音声のエンコーダで使われる libopus も外部ライブラリなのでこれもインストールする必要がある。

設定内容は多くあるがほとんどの設定は何も変えず、ビットレートの設定と品質・速度のトレードオフの設定を変える。VP9 で処理が遅いとよく言われるが、これは仕様上、現在ではどうにもならないので2つ3つ同時にエンコードして1つにつなげる方法をとれば処理は速くなる。それでも threads を設定することで早くなる。libx264 のように自動設定しないので一番下の方にある解像度に併せて設定する。

webmproject/libvpx: github.com
Downloads – Opus Codec

Continue reading “VP9(libvpx-vp9) のエンコード設定について”

ffmpeg 3.3 リリース

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

Changelog: update release version 3.3.4 – ffmpeg.git/commitdiff

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

Changelog: update release version 3.3.3 – ffmpeg.git/commitdiff

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

Changelog: update release version 3.3.2 – ffmpeg.git/commitdiff

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

Changelog: update release version 3.3.1 – ffmpeg.git/commitdiff

2017年4月13日、ffmpeg 3.3 Hilbert(ヒルベルト)がリリースされた。3.3 は 3.2 からのメジャーアップデートでこれまでに取り込まれたコミットのすべてが入っている。

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

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

Continue reading “ffmpeg 3.3 リリース”

2017年4月のニコ生統計

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

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

APNG をループ出力する

Using ffmpeg to create looping apng – Stack Overflow より、アニメGIF なら loop でループできるのに APNG ではこのオプションではループできないので plays オプションを使う。このオプションはループ回数を指定する。ただし -1 を指定して無限ループは出来ないので大きい値を指定する。

ss で開始秒、t で動画時間を指定する
ffmpeg -ss 10 -i input.mp4 -plays 10 -t 1 -vf setpts=PTS-STARTPTS output.apng

ちなみにフレームレートを変えるなら fps フィルタを使う。
ffmpeg -ss 10 -i input.mp4 -plays 10 -t 1 -vf fps=10,setpts=PTS-STARTPTS output.apng

【APNG】ブロマガのサムネイルを動かす方法
ffmpeg で アニメーションWebP(Animated WebP)を作る
ffmpeg で 256色を最適化する

4:3を16:9に、16:9を4:3に余白と透過をつける

前回記事は余白だけをつけたが今回はその余白の部分だけ透過させる。映像の部分的に透過させるには geq フィルタを使う。アルファチャンネルをプレビューするには alphaextract フィルタを使う。

640×360の16:9映像を上下に白枠と透過を付けて4:3にする。出力解像度は 640×480
ffplay -f lavfi -i color=s=640x360 -vf format=yuva420p,pad=iw:iw*3/4:0:(oh-ih)/2:white,geq='p(X,Y):a=(between(X,0,W)*between(Y,H/8,7*H/8))*255'
640×480の4:3映像を左右に白枠と透過を付けて16:9にする。出力解像度は 852×480
ffplay -f lavfi -i color=s=640x480 -vf format=yuva420p,pad=ih*16/9:ih:(ow-iw)/2:0:white,geq='p(X,Y):a=(between(X,W/8,7*W/8)*between(Y,0,H))*255'

4:3を16:9に、16:9を4:3に余白をつける

ffmpeg に pad フィルタがあるのでこれを使って4:3を16:9に、16:9を4:3に余白をつける。コマンド例は黒映像に余白は白を足している。

640×360の16:9映像を上下に白枠を付けて4:3にする。出力解像度は 640×480
ffplay -f lavfi -i color=s=640x360 -vf pad=iw:iw*3/4:0:(oh-ih)/2:white
640×480の4:3映像を左右に白枠を付けて16:9にする。出力解像度は 852×480
ffplay -f lavfi -i color=s=640x480 -vf pad=ih*16/9:ih:(ow-iw)/2:0:white

新配信(β)で4:3映像に余白をつけて800×450配信にする

元映像が4:3なら丁度よい解像度にリサイズし余白をつけて推奨解像度の800×450にする。余白の色の既定値は黒で適宜指定できる。配信映像がドット絵なら neighbor を指定し、それ以外は lanczosbicubic(無指定ならこれ) を指定する。
scale=576:432:flags=neighbor,fifo,pad=800:450:112:9:black

余白の色の指定方法
FFmpeg Utilities Documentation : Color

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

生放送をNLEなどの外部ツールで高画質配信する | ニコニコヘルプ

ビットレートが高く配信が途切れる場合は TCPRelay を使う
Windows の ffmpeg で生放送する方法 : TCPRelayの使い方

ffmpeg で先頭と後ろを一度にカットする

Cut video with ffmpeg. – Stack Overflow より、再エンコードなしに1行のコマンドで先頭と後ろをカットする方法。

開始10秒と後ろ10秒をカットしてその間をコピー出力する
ffmpeg -ss 10 -i video.mp4 -ss 20 -i video.mp4 -c copy -map 1:0 -map 0 -shortest -f nut - | ffmpeg -f nut -i - -map 0 -map -0:0 -c copy out.mp4

  • このコマンドの挙動の理解には shortest, map, nut を知る必要がある
  • -shortest は2入力以上に対応していないので、1入力のトラックの中から一番短いファイル時間でカットされる
  • 1番目の -ss で動画の先頭時間の指定、2番目の -ss と1番目の -ss の差し引きが後ろをカットする時間になる
  • -map 1:0 -map 0 を使ってそれらを1入力扱いにして、そのトラックに中から -shortest で一番時間の短いところで出力時間が決まる
  • なぜ -map 1:0 を先にするかというと、この映像はカットするための時間を決める動画で最終出力には不要になりかつ、トラックを除外しやすい -map 0:0 でパイプ入力するため
  • -f nut はいろいろなコーデックをパイプ入出力できるので便利
  • パイプ入力で -map 0 しているのは映像と音声、または字幕などのすべてのデータを元に -shortest で後ろをカットするから
  • -map 0:0 で不要なトラックを除外して出力している