Ubuntu 18.04 LTSのセットアップ6 - ffmpeg
インストール後のメモその6です。
ffmpegをビルドする。
この頃はハードウェアでのエンコーディングを知らなかったが、 その後、VAAPIを使うとCPUパワーをほとんど使わずにH.264にエンコーディングできるということを知った。
ffmpeg h264_vaapi encoding test on Linux https://t.co/tg82ylJPmg via @YouTube 今日の成果です。
— OHASHI Hideya (@ohac) 2017年7月8日
ということで以下からgit cloneする。
ビルドに必要なパッケージは以下である程度揃うはず。
sudo apt build-dep ffmpeg
./configure を実行。hwaccelsがEnabledになっていることを確認。
Enabled hwaccels: h263_vaapi mpeg1_xvmc vc1_vaapi h264_vaapi mpeg2_vaapi vc1_vdpau h264_vdpau mpeg2_vdpau vp8_vaapi hevc_vaapi mpeg2_xvmc vp9_vaapi hevc_vdpau mpeg4_vaapi wmv3_vaapi mjpeg_vaapi mpeg4_vdpau wmv3_vdpau mpeg1_vdpau
makeを実行。マルチコアなら-j8とか付けてもいい。
終わったら sudo make install し、/usr/local/binにインストール。
最後に動作確認。
$ which ffmpeg /usr/local/bin/ffmpeg $ ffmpeg -version|head -1 ffmpeg version 3.4.2-2 Copyright (c) 2000-2018 the FFmpeg developers $ ffmpeg -hwaccels 2>/dev/null Hardware acceleration methods: vdpau vaapi cuvid $ ffmpeg -encoders 2>/dev/null | grep vaapi V..... h264_vaapi H.264/AVC (VAAPI) (codec h264) V..... hevc_vaapi H.265/HEVC (VAAPI) (codec hevc) V..... mjpeg_vaapi MJPEG (VAAPI) (codec mjpeg) V..... mpeg2_vaapi MPEG-2 (VAAPI) (codec mpeg2video) V..... vp8_vaapi VP8 (VAAPI) (codec vp8) V..... vp9_vaapi VP9 (VAAPI) (codec vp9) $ ffmpeg -decoders 2>/dev/null | grep cuvid V..... h264_cuvid Nvidia CUVID H264 decoder (codec h264) V..... hevc_cuvid Nvidia CUVID HEVC decoder (codec hevc) V..... mjpeg_cuvid Nvidia CUVID MJPEG decoder (codec mjpeg) V..... mpeg1_cuvid Nvidia CUVID MPEG1VIDEO decoder (codec mpeg1video) V..... mpeg2_cuvid Nvidia CUVID MPEG2VIDEO decoder (codec mpeg2video) V..... mpeg4_cuvid Nvidia CUVID MPEG4 decoder (codec mpeg4) V..... vc1_cuvid Nvidia CUVID VC1 decoder (codec vc1) V..... vp8_cuvid Nvidia CUVID VP8 decoder (codec vp8) V..... vp9_cuvid Nvidia CUVID VP9 decoder (codec vp9) $ ffmpeg -decoders 2>/dev/null | grep vdpau V....D h264_vdpau H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (VDPAU acceleration) (codec h264) V....D mpeg1video_vdpau MPEG-1 video (VDPAU acceleration) (codec mpeg1video) V....D mpegvideo_vdpau MPEG-1/2 video (VDPAU acceleration) (codec mpeg2video) V....D mpeg4_vdpau MPEG-4 part 2 (VDPAU) (codec mpeg4) V....D vc1_vdpau SMPTE VC-1 VDPAU (codec vc1) V....D wmv3_vdpau Windows Media Video 9 VDPAU (codec wmv3)
webcamのキャプチャ確認。
$ man ffmpeg 2>/dev/null | grep video4 ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg ffmpeg -f alsa -ac 1 -i hw:1 -f video4linux2 -i /dev/video0 /tmp/out.mpg $ ffmpeg -f video4linux2 -i /dev/video0 /tmp/out.mpg
再生。vlcが最もCPU負荷が軽いようだ。
$ ffplay /tmp/out.mpg $ ffmpeg -re -i /tmp/out.mpg -f xv display $ vlc /tmp/out.mpg
$ ffmpeg -vaapi_device /dev/dri/renderD128 -hwaccel vaapi -hwaccel_output_format vaapi -f video4linux2 -i /dev/video0 -vf 'format=nv12|vaapi,hwupload' -c:v h264_vaapi -y /tmp/out.mkv
画面のキャプチャ例。
$ ffmpeg -vaapi_device /dev/dri/renderD128 -hwaccel vaapi -hwaccel_output_format vaapi -f x11grab -i :0.0+100,100 -video_size vga -framerate 30 -vf 'format=nv12|vaapi,hwupload' -c:v h264_vaapi -y /tmp/out.mkv
VDPAUを有効にして再生したが、効果はいまいち。vlcが一番よさそう。
sudo apt install vdpauinfo libvdpau-va-gl1 vdpau-va-driver VDPAU_DRIVER=va_gl vdpauinfo VDPAU_DRIVER=va_gl ffmpeg -hwaccel vdpau -re -i /tmp/out.mkv -pix_fmt yuv420p -f xv display