音声をサラウンド変換する surround

ffmpeg 3.4から追加のフィルタ。入力したステレオなどの音声の周波数からフロントとリアなどの音声に分けてサラウンド(5.1ch など)に変換するsurroundフィルタの使い方。

Continue reading “音声をサラウンド変換する surround”

2017年5月のニコ生統計

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

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

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

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

設定内容は多くあるがほとんどの設定は何も変えず、ビットレートの設定と品質・速度のトレードオフで考える。VP9は処理が遅いとよく言われるが、-threadsを設定することで速くなる。libx264のように自動設定してくれないので一番下の方にある解像度に併せて設定する。

libvpx-1.7.0から 10、12ビット深度に対応した。
ハードウェアのデコード、エンコード対応表:wiki – SoCs Supporting VP8/VP9

Downloads – Opus Codec
VP9コーデックメモ – Qiita

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 リリース

github.com – 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オプションを使う。このオプションはループ回数を指定する。0を指定すると無限ループになる。

透過処理にバグがある。
#9334 (MP4 to APNG conversion incorrectly has transparent background) – FFmpeg

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

無限ループで出力フレーム数-frames:vを指定する
ffmpeg -ss 10 -i input.mp4 -plays 0 -frames:v 10 -vf setpts=PTS-STARTPTS -f apng output.png

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

読み込み時に無限ループして動画に出力。
ffmpeg -ignore_loop 0 -i input.png -t 10 -pix_fmt yuv420p output.mp4

ヘルプコマンド:ffmpeg -h muxer=apng

公式ドキュメント:ffmpeg Documentation : apng

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

リサイズする scale
映像に余白を追加する pad

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

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