ffmpeg+nvencでX倍速

  • 投稿日:
  • by
  • カテゴリ:

はえ~。

動画を1440x1080のMP4に変換するのにffmpeg使ってたんですが、うちの年代もののi7マシンでは、10~15fpsくらいの性能しか出ませんでした。QSVもない模様です。

frame=  238 fps= 12 q=31.0 size=    7466kB time=00:00:07.61 bitrate=8030.6kbits/
frame=  242 fps= 12 q=31.0 size=    7641kB time=00:00:07.74 bitrate=8083.2kbits/
frame=  250 fps= 12 q=28.0 size=    7995kB time=00:00:08.00 bitrate=8187.0kbits/
frame=  254 fps= 11 q=31.0 size=    8177kB time=00:00:08.12 bitrate=8241.6kbits/
frame=  260 fps= 11 q=31.0 size=    8510kB time=00:00:08.44 bitrate=8252.6kbits/
frame=  273 fps= 11 q=31.0 size=    8844kB time=00:00:08.81 bitrate=8222.6kbits/
frame=  286 fps= 12 q=31.0 size=    8996kB time=00:00:09.25 bitrate=7959.7kbits/

CPUコアを5つも6つも使って、です。

nvencありのffmpegを使うと、100fps超になりました。( preset default)

frame=15445 fps=117 q=0.0 size=  301703kB time=00:08:35.34 bitrate=4795.9kbits/s
frame=15506 fps=117 q=0.0 size=  302432kB time=00:08:37.38 bitrate=4788.6kbits/s
frame=15566 fps=117 q=0.0 size=  303031kB time=00:08:39.38 bitrate=4779.6kbits/s
frame=15624 fps=117 q=0.0 size=  305554kB time=00:08:41.32 bitrate=4801.5kbits/s
frame=15684 fps=117 q=0.0 size=  306496kB time=00:08:43.32 bitrate=4797.8kbits/s
frame=15743 fps=117 q=0.0 size=  307615kB time=00:08:45.29 bitrate=4797.3kbits/s
frame=15805 fps=117 q=0.0 size=  308133kB time=00:08:47.36 bitrate=4786.5kbits/s
frame=15866 fps=117 q=0.0 size=  308501kB time=00:08:49.39 bitrate=4773.8kbits/s
frame=15926 fps=117 q=0.0 size=  308820kB time=00:08:51.39 bitrate=4760.8kbits/s
frame=15989 fps=117 q=0.0 size=  309153kB time=00:08:53.49 bitrate=4747.1kbits/s

速度優先なら、100fps超になりました。( preset hp)

frame= 1377 fps=136 q=0.0 size=   56187kB time=00:00:45.94 bitrate=10017.9kbits/
frame= 1448 fps=137 q=0.0 size=   57501kB time=00:00:48.31 bitrate=9749.6kbits/s
frame= 1518 fps=137 q=0.0 size=   58410kB time=00:00:50.65 bitrate=9447.0kbits/s
frame= 1584 fps=136 q=0.0 size=   62489kB time=00:00:52.85 bitrate=9685.6kbits/s
frame= 1653 fps=136 q=0.0 size=   65375kB time=00:00:55.15 bitrate=9709.9kbits/s
frame= 1722 fps=136 q=0.0 size=   68180kB time=00:00:57.45 bitrate=9720.8kbits/s
frame= 1790 fps=136 q=0.0 size=   71759kB time=00:00:59.72 bitrate=9842.4kbits/s
frame= 1857 fps=136 q=0.0 size=   75201kB time=00:01:01.96 bitrate=9942.3kbits/s

なるほどこれならSHIELDタブレットも使い物になりますわな。

CPU負荷は20%弱なので、2枚刺し、3枚刺しも可能ですね。

 

さて、元画像のサイズは1440x1080なのですが、 960x720に縮小変換だと、80fps程度でした。

でまぁ、

-b:v 2500k

のようにビットレートを制限すると、H.264とは比べ物にならない低画質になったりします。

やっぱりストリーミング用なんですかね。

 

環境構築メモ:

・Ubuntu14.04の素の環境(12.04だといろいろ古すぎる)

・ffmpeg-windows-build-helpers

rdp-ffmpeg-windows-build-helpers · GitHub

$ raw.github.com/rdp/ffmpeg-windows-build-helpers/master/cross_compile_ffmpeg.sh –O cross_compile_ffmpeg.sh

$chmod u+x cross_compile_ffmpeg.sh

$ ./cross_compile_ffmpeg.sh

・できたffmpeg.exeが動くことを確認

・nvencSDKダウンロード

ffmpeg に nvenc(cuda) をインストールする  ニコラボ

SDK から \Samples\nvEncodeApp\inc\nvEncodeAPI.h を見つてコピー

・cross_compile_ffmpeg.sh を編集

build_ffmpeg() {
  local type=$1
  local shared=$2
  local git_url="https://github.com/FFmpeg/FFmpeg.git"
  local output_dir="ffmpeg_git"

  # FFmpeg + libav compatible options
#  local extra_configure_opts="--enable-libsoxr --enable-fontconfig --enable-libass --enable-libutvideo --enable-libbluray --en\
able-iconv --enable-libtwolame --extra-cflags=-DLIBTWOLAME_STATIC --enable-libzvbi --enable-libcaca --enable-libmodplug --extra\
-libs=-lstdc++ --extra-libs=-lpng --enable-libvidstab --enable-libx265 --enable-decklink --extra-libs=-loleaut32"
  local extra_configure_opts="--enable-nvenc --enable-nonfree --enable-libsoxr --enable-fontconfig --enable-libass --enable-lib\
utvideo --enable-libbluray --enable-iconv --enable-libtwolame --extra-cflags=-DLIBTWOLAME_STATIC --enable-libzvbi --enable-libc\
aca --enable-libmodplug --extra-libs=-lstdc++ --extra-libs=-lpng --enable-libvidstab --enable-libx265 --enable-decklink --extra\
-libs=-loleaut32"

・ffmpegもう1回ビルド

$ ./cross_compile_ffmpeg.sh

 

 

環境メモ:

・i7 860/ GTX750Ti

・ffmpeg-20150131-git-f5722ba-win64-static(ベース環境)

・上記ベースのffmpeg.exeをUbuntu上でクロスコンパイルしたものに差し替えて使用