FFmpeg2.8のQSV(H264)を拡張してみる

(FFmpeg3.0に対応した記事はこちら

少し前のgit版から正常に動作するようになっていたQSVのH264エンコードがStable版2.8でも動作するようになり、以前の記事のような処理は不要になりました。

Windows版のビルド(拡張なし)

Windowsでのビルド仕方は前回とほぼ同じで、mfx_dispatchさえあれば良いようです。
前回の使用した拙作のパッチも必要ありません。

必要なツールの準備 (MSYS + MinGW + GCC)

今回も XhmikosR’s さんのところのをそのまま使わせていただきました。
(使用したバージョンは MSYS_MinGW-w64_GCC_520_x86-x64_Full.7z 2015-09-10版)

msys – XhmikosR’s Builds

「MSYS」をCドライブのルートに展開して、「msys.bat」を実行。以降CLIでの操作。
(「home」以下にユーザー名のディレクトリが作成されるので、ファイルはWindows側でそこに展開)

mfx_dispatchのビルド

lu-zero/mfx_dispatch

mfx_dispatch-master.zipを「Download ZIP」からダウンロードして展開&ビルド。

$ cd ~/mfx_dispatch-master

$ autoreconf -fiv

$ PKG_CONFIG_PATH="/mingw/i686-w64-mingw32/lib/pkgconfig" \
./configure --prefix="/mingw/i686-w64-mingw32" \
--disable-shared \
--enable-static \
--enable-fast-install

$ make
$ make install

FFmpegのビルド

Download FFmpeg

FFmpegのソースを公式サイトからダウンロードして展開。

もしくはGitHubあたりからもってくる。(ディレクトリ名が微妙に違うけど)

Release n2.8 · FFmpeg/FFmpeg · GitHub
FFmpeg/FFmpeg at release/2.8 · GitHub

ビルド。

$ cd ~/ffmpeg-2.8

$ PKG_CONFIG_PATH="/mingw/i686-w64-mingw32/lib/pkgconfig" \
./configure --prefix="/mingw/i686-w64-mingw32" \
--enable-gpl \
--enable-version3 \
--enable-libmfx \
--enable-w32threads \
--disable-dxva2 \
--disable-debug \
--disable-doc \
--disable-ffplay \
--disable-ffprobe \
--pkg-config-flags="--static" \
--extra-ldflags="-static" \
--extra-libs="-lsupc++ -lstdc++"

$ make

一番下の行はなくてもビルドできたけど念の為・・・

QSVENC_H264の使い方

基本的な使い方は次の通り。

CBRの場合

ffmpeg -i input.ts -vcodec h264_qsv -b 2000k -maxrate 2000k output.mp4

VBRの場合

ffmpeg -i input.ts -vcodec h264_qsv -b 4000k output.mp4

CQPの場合

ffmpeg -i input.ts -vcodec h264_qsv -q 20 output.mp4

Haswell以降で使えるICQとかには対応してないようだが、私はIvyBridge使いなので気にしない。

QSVENC_H264の拡張

これで公式FFmpegでQSVでのH264高速エンコードが可能になったわけだが、悲しいことにQSVのCBRやVBRは画質的に評判がよろしくない。

rigaya氏のQSVEncでIフレーム、Pフレーム、BフレームのQP値を設定するCQPがよく使われているようで、非公式版のFFmpegQSVでも可能だった。

というわけで公式の2.8にこれを追加するパッチを作ってみた。

ffmpeg_qsv_patch

2.8用のパッチをffmpegのディレクトリ内で適用。

patch -p1 < ffmpeg-2.8_qsv.diff

これでlibmfxを有効にしたFFmpegをビルドしてあげれば

ffmpeg -i input.ts -vcodec h264_qsv -qpi 24 -qpp 26 -qpb 27 output.mp4

こんな感じでエンコードできるようになる、はず。

追記

2016/02/17

記事タイトルに「2.8」を追加。(別記事で3.0を書いたため)

2015/09/25

ビルドの仕方を追加。(前回とほぼ同じだけど)

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク

コメント

  1. […] そこで以下のページを参考に自前でビルドしました。 FFmpegのQSV(H264)を拡張してみる […]