タグ別アーカイブ: encoders

ffmpeg でグレースケールを扱う

フィルタでグレースケールを扱うには大まかに YUV の Y を取り出す方法と、グレーにフォーマット変換する方法の2通りがある。前者はリミテッドレンジになるので 16 から 235 の範囲に収まるが処理速度は速い。一方の後者はフォーマット変換を挟むので処理は遅いが 0 から 255 までのフルレンジを扱える。

extractplanes YUV の Y を取り出す(format=yuv)
-vf extractplanes=y

hue(format=yuv) で彩度を 0 にする方法
-vf hue=s=0

YUV の Y だけそのままに UV を 128 に変換する lutyuv(format=yuv)
-vf lutyuv=val:128:128

グレーにフォーマット変換する方法
-vf format=gray

グレースケール(format=gray)値を確認する
-vf datascope

グレースケール(format=gray)で動画出力するにはエンコーダに ffv1 を使う
ffmpeg -i input -vf format=gray -vcodec ffv1 output.mkv

個別チャンネルの値を映像の場所毎に確認できる datascope

関連記事
各映像チャンネルを分離する extractplanes
Windows の ffmpeg で生放送する方法 : lutyuv

qsv 対応の ffmpeg をつくる

ハードウェアエンコーダーの nvenc は次期バージョンの 2.6 から取り込まれる予定だが、Sandy Bridge 以降の intel 製の CPU を使っている多くの人に解放されている qsv(Quick Sync Video) も非公式ながら ffmpeg でも使えるのでその ffmpeg のつくり方の紹介。

hardware acceleration の Wiki:HWAccelIntro – FFmpeg
ffmpeg に nvenc(cuda) をインストールする

追記 2015年4月12日
2.6 バージョンで追加されたのはエンコーダーの方でデコーダーはまだ公式には取り込まれていないが、次期バージョンにはデコーダーも予定されている。

追記 2015年7月29日
デコーダーも追加された。他にも HEVC、H264 も追加されている。
avcodec: Add QSV MPEG-2 video decoder :: git.videolan.org Git – ffmpeg.git/commitdiff
avcodec: Add QSV VC-1 video decoder :: git.videolan.org Git – ffmpeg.git/commitdiff

無指定だとソフトウェアデコードになるので、入力の前にデコーダを指定
ffmpeg -vcodec h264_qsv -i input
hevc の場合
ffmpeg -vcodec hevc_qsv -i input

デコーダーは ffmpeg -decoders > decoders.txt 2>&1 で一覧をテキストで見ることが出来る。

今回追加されたデコーダー

  • h264_qsv
  • mpeg2_qsv
  • hevc_qsv
  • vc1_qsv

CPU をフル活用してエンコードする場合、デコードの CPU 負荷を減らしその分をエンコードに使うことで速度の向上が見込まれる。

デコーダーの部分についてコメントをいただいていたが、サーバのアカウント削除によりデータベースの保存が間に合わなかったのでコメントが消えてしまった。申し訳ない。

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

追記 2015年5月31日
Zeranoe build が ffmpeg-20150525-git-e48a9ac から対応した。
libmfx Added | Zeranoe FFmpeg

ffmpeg-20150610-git-913685f を最後に非対応になっているので必要な場合は直接保存する。理由は XP 対応 のため。
Zeranoe FFmpeg – Builds win32
Zeranoe FFmpeg – Builds win64

その後2016年3月1日より XP のサポートを終了し配布を再開した。
Windows XP Support And Intel QSV – Zeranoe FFmpeg
続きを読む qsv 対応の ffmpeg をつくる

ffmpeg に nvenc(cuda) をインストールする

ffmpeg 2.6 から使える nvenc をコンパイルする方法。別途ヘッダファイルが必要なので nvidia の公式サイトから最新の SDK をダウンロードして nvEncodeAPI.h を include ディレクトリにコピーしておく。ffmpeg 3.2 から nvEncodeAPI.h を include ディレクトリにコピーする必要がなくなった。

hardware acceleration の Wiki:HWAccelIntro – FFmpeg
qsv 対応の ffmpeg をつくる

追記 2015年1月11日
5.x バージョン対応のパッチが Master of the Dark Arts-ニコニコミュニティ のオーナーの Sada_Maru氏 により配布された。ダウンロードは掲示板の 298 より。5.x バージョンは SDK の容量が小さくダウンロードが手軽である。現在はパッチ適用は不要。

追記 2015年3月25日
master では 4.x バージョン以下ではビルドできなくなり、5.x バージョン以上必須になったので記事を直した。
avcodec/nvenc: Drop support for old nvenc api : git.videolan.org Git

追記 2016年3月5日
master では 5.x バージョン以下ではビルドできなくなり、6.x バージョン以上必須になった。
configure: NVENC API version 6 is now required : git.videolan.org Git

追記 2016年4月28日
master で --enable-nonfree が不要になり配布バイナリに含められるようになった。
configure: Don’t require nonfree for nvenc : git.videolan.org Git – ffmpeg.git/commitdiff

追記 2016年8月29日
master で API 7.x に対応し、ffmpeg に組み込まれたので nvEncodeAPI.h のコピーが不要になった。ffmpeg で NVENC を使うのに SDK をダウンロードする必要がなくなったが、SDK をダウンロードするにはアカウント作成が必要になった。API 7.x で rc-lookahead のオプションと、Pascal generation GPU(GTX 1060、GTX 1070、GTX 1080)から HEVC 10-bit エンコードが追加された。それ以外の新機能が ffmpeg に実装されているかは未確認。API 7.x の新機能は以下の通り。

  • HEVC 8K (8192 pixels x 8192 pixels) encoding *
  • HEVC 4:4:4 encoding *
  • HEVC 10-bit encoding *
  • HEVC lossless encoding *
  • HEVC Sample Adaptive Offset (SAO) *
  • HEVC Motion-Estimation-(ME)-only mode *
  • HEVC (up to 8K) decoding *
  • VP9 (up to 8K) decoding *
  • HEVC long term reference (LTR) frame support
  • Asynchronous H.264 Motion-Estimation-(ME)-only mode
  • Look-ahead
  • Improved H.264 spatial adaptive quantization
  • H.264 temporal adaptive quantization
  • Rate control and quality improvements

* は Pascal generation GPU(GTX 1060、GTX 1070、GTX 1080)からの新機能になる

avcodec/nvenc: include nvEncodeAPI v7 SDK header : git.videolan.org Git
avcodec/nvenc: added support for 10 bit HEVC encoding : git.videolan.org Git
avcodec/nvenc: added support for rate control lookahead : git.videolan.org Git
続きを読む ffmpeg に nvenc(cuda) をインストールする