안녕하세요.
이번에는 VAAPI 트랜스코딩 관련하여 카비레이크 / 아폴로레이크이면 HEVC 10BIT 4K 60FPS / VP9 Profile0 8BIT 4K 60FPS 를 하드웨어로 인코딩 할 수 있을까 하는 테스트를 해 보았습니다.
실제로 CPU 빨로 절대로 인코딩이 불가능합니다. 라이젠 1800X 로도 트랜스코딩이 잘 안되는 영상들입니다.
결과. 정말 잘 됩니다.
카비레이크 아폴로레이크의 경우, 상기에 설명드린 영상을 하드웨어 디코딩 할 수 있는 능력이 있습니다. 그리고 그것을 H264 로 하드웨어 인코딩 하는 것입니다.
하드웨어 정보
Intel(R) Celeron(R) CPU 3865U @ 1.80GHz
DDR4 16GB
Integrated Graphic Memory 1GB
아폴로레이크 DXVA 정보
http://blog.djjproject.com/266
설치과정
설치과정은 제가 매우 간략하게 작성하겠습니다. 의존성 에러는 해결해 가면서 설치해 주시길 바랍니다.
그리고 처음 설치해 보아서 필요하지 않은 과정이 포함되었을 수 있습니다.
1. 백포트 커널 설치
apt-get install -t jessie-backports linux-base
apt-get install linux-image-4.9.0-0.bpo.5-amd64 linux-headers-4.9.0-0.bpo.5-amd64 -t jessie-backports
2. 인텔 CMRT 설치
git clone https://github.com/01org/cmrt
cd cmrt
./autogen.sh
make -j 4 && make install
3. 인텔 하이브리드 드라이버 설치
git clone https://github.com/01org/intel-vaapi-driver
cd intel-vaapi-driver
./autogen.sh
make -j 4 && make install
4. 인텔 vaapi 드라이버 설치
libva 버전 에러 발생시 5번 항목을 먼저 하고 4번을 하시면 됩니다.
git clone https://github.com/01org/intel-vaapi-driver
cd intel-vaapi-driver
./autogen.sh
make -j 4 && make install
5. libva 설치
git clone https://github.com/01org/libva
cd libva
./autogen.sh
make -j 4 && make install
6. ffmpeg 설치
git clone https://github.com/FFmpeg/FFmpeg.git
cd FFmpeg/
git checkout -b n3.3.6
./configure --prefix=/usr --enable-nonfree --enable-static --enable-vaapi --enable-gpl --enable-libfdk-aac --enable-libx264 --enable-libx265
make -j 4 && make install
7. vainfo 확인
재부팅 후에 확인을 진행합니다.
root@debian:~/FFmpeg# vainfo
error: XDG_RUNTIME_DIR not set in the environment.
error: can't connect to X server!
libva info: VA-API version 1.1.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/local/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_1
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.1 (libva 2.0.0)
vainfo: Driver version: Intel i965 driver for Intel(R) Kaby Lake - 2.1.1.pre1 (2.0.0-122-gd1453b5)
vainfo: Supported profile and entrypoints
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Simple : VAEntrypointEncSlice
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointEncSlice
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP
VAProfileH264Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointEncSlice
VAProfileH264Main : VAEntrypointEncSliceLP
VAProfileH264High : VAEntrypointVLD
VAProfileH264High : VAEntrypointEncSlice
VAProfileH264High : VAEntrypointEncSliceLP
VAProfileH264MultiviewHigh : VAEntrypointVLD
VAProfileH264MultiviewHigh : VAEntrypointEncSlice
VAProfileH264StereoHigh : VAEntrypointVLD
VAProfileH264StereoHigh : VAEntrypointEncSlice
VAProfileVC1Simple : VAEntrypointVLD
VAProfileVC1Main : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD
VAProfileNone : VAEntrypointVideoProc
VAProfileJPEGBaseline : VAEntrypointVLD
VAProfileJPEGBaseline : VAEntrypointEncPicture
VAProfileVP8Version0_3 : VAEntrypointVLD
VAProfileVP8Version0_3 : VAEntrypointEncSlice
VAProfileHEVCMain : VAEntrypointVLD
VAProfileHEVCMain : VAEntrypointEncSlice
VAProfileHEVCMain10 : VAEntrypointVLD
VAProfileHEVCMain10 : VAEntrypointEncSlice
VAProfileVP9Profile0 : VAEntrypointVLD
VAProfileVP9Profile0 : VAEntrypointEncSlice
VAProfileVP9Profile2 : VAEntrypointVLD
root@debian:~/FFmpeg#
8. 환경변수 에러 해결
드라이버 파일을 아래 경로에 복사합니다.
cp /usr/local/lib/dri/i965_drv_video.* /usr/lib/x86_64-linux-gnu/dri/
emby-server 에서 테스트 진행
emby-server 설치 및 설정
http://blog.djjproject.com/359
실제로 intel_gpu_top 명령은 5세대 까지 먹습니다. 그래서 운영체제 버전을 올려서 최신 패키지를 받거나 컴파일을 해야하는데요. 그냥 안보기로 했습니다. ㅎㅎ (귀차니즘)
root@debian:~/FFmpeg# intel_gpu_top
Test assertion failure function init_instdone_definitions, file ../../lib/instdone.c:591:
Failed assertion: IS_GEN2(devid)
트랜스코딩 로그
/usr/bin/ffmpeg -hwaccel vaapi -hwaccel_output_format vaapi -vaapi_device /dev/dri/renderD128 -i file:"/media/volume/[LG UHD 4K_60FPS] AOA (�먯씠�ㅼ뿉��) - Miniskirt (吏㏃� 移섎쭏)-pDtYVo4D-6k.mkv" -threads 0 -map 0:0 -map 0:1 -map -0:s -codec:v:0 h264_vaapi -vf "format=nv12|vaapi,hwupload,scale_vaapi=w=1278:h=718" -b:v 2808000 -maxrate 2808000 -bufsize 5616000 -profile:v 578 -level 41 -force_key_frames "expr:if(isnan(prev_forced_t),eq(t,t),gte(t,prev_forced_t+3))" -copyts -vsync -1 -codec:a:0 copy -f segment -max_delay 5000000 -avoid_negative_ts disabled -map_metadata -1 -map_chapters -1 -start_at_zero -segment_time 3 -individual_header_trailer 0 -segment_format mpegts -segment_list_type m3u8 -segment_start_number 0 -segment_list "/var/lib/emby-server/transcoding-temp/03e307ab84027558571d6b6a5dc45bf4.m3u8" -y "/var/lib/emby-server/transcoding-temp/03e307ab84027558571d6b6a5dc45bf4%d.ts"
ffmpeg version n3.3.6 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 4.9.2 (Debian 4.9.2-10)
configuration: --prefix=/usr --enable-nonfree --enable-static --enable-vaapi --enable-gpl --enable-libfdk-aac --enable-libx264 --enable-libx265
libavutil 55. 58.100 / 55. 58.100
libavcodec 57. 89.100 / 57. 89.100
libavformat 57. 71.100 / 57. 71.100
libavdevice 57. 6.100 / 57. 6.100
libavfilter 6. 82.100 / 6. 82.100
libswscale 4. 6.100 / 4. 6.100
libswresample 2. 7.100 / 2. 7.100
libpostproc 54. 5.100 / 54. 5.100
libva info: VA-API version 1.1.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/local/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_1
libva info: va_openDriver() returns 0
Input #0, matroska,webm, from 'file:/media/volume/[LG UHD 4K_60FPS] AOA (�먯씠�ㅼ뿉��) - Miniskirt (吏㏃� 移섎쭏)-pDtYVo4D-6k.mkv':
Metadata:
ENCODER : Lavf56.1.0
Duration: 00:03:09.96, start: 0.000000, bitrate: 25567 kb/s
Stream #0:0(eng): Video: vp9 (Profile 0), yuv420p(tv, bt709/unknown/unknown), 3840x2160, SAR 1:1 DAR 16:9, 59.94 fps, 59.94 tbr, 1k tbn, 1k tbc (default)
Stream #0:1(und): Audio: aac (LC), 44100 Hz, stereo, fltp (default)
Metadata:
CREATION_TIME : 2015-10-13 04:29:15
LANGUAGE : und
Stream mapping:
Stream #0:0 -> #0:0 (vp9 (native) -> h264 (h264_vaapi))
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[h264_vaapi @ 0x3d23f00] H.264 constrained baseline profile doesn't support encoding with B frames, disabling them.
[segment @ 0x3cce440] Opening '/var/lib/emby-server/transcoding-temp/03e307ab84027558571d6b6a5dc45bf40.ts' for writing
Output #0, segment, to '/var/lib/emby-server/transcoding-temp/03e307ab84027558571d6b6a5dc45bf4%d.ts':
Metadata:
encoder : Lavf57.71.100
Stream #0:0: Video: h264 (h264_vaapi) (Constrained Baseline), vaapi_vld, 1278x718 [SAR 1:1 DAR 639:359], q=0-31, 2808 kb/s, 59.94 fps, 90k tbn, 59.94 tbc (default)
Metadata:
encoder : Lavc57.89.100 h264_vaapi
Stream #0:1: Audio: aac (LC), 44100 Hz, stereo, fltp (default)
frame= 60 fps=0.0 q=-0.0 size=N/A time=00:00:00.99 bitrate=N/A speed=1.98x
frame= 111 fps=110 q=-0.0 size=N/A time=00:00:01.83 bitrate=N/A speed=1.82x
frame= 166 fps=110 q=-0.0 size=N/A time=00:00:02.78 bitrate=N/A speed=1.84x
[segment @ 0x3cce440] Opening '/var/lib/emby-server/transcoding-temp/03e307ab84027558571d6b6a5dc45bf4.m3u8.tmp' for writing
[segment @ 0x3cce440] Opening '/var/lib/emby-server/transcoding-temp/03e307ab84027558571d6b6a5dc45bf41.ts' for writing
frame= 220 fps=108 q=-0.0 size=N/A time=00:00:03.66 bitrate=N/A speed=1.81x
frame= 270 fps=107 q=-0.0 size=N/A time=00:00:04.52 bitrate=N/A speed=1.79x
frame= 330 fps=109 q=-0.0 size=N/A time=00:00:05.52 bitrate=N/A speed=1.82x
[segment @ 0x3cce440] Opening '/var/lib/emby-server/transcoding-temp/03e307ab84027558571d6b6a5dc45bf4.m3u8.tmp' for writing
[segment @ 0x3cce440] Opening '/var/lib/emby-server/transcoding-temp/03e307ab84027558571d6b6a5dc45bf42.ts' for writing
frame= 387 fps=109 q=-0.0 size=N/A time=00:00:06.47 bitrate=N/A speed=1.83x
frame= 443 fps=110 q=-0.0 size=N/A time=00:00:07.38 bitrate=N/A speed=1.83x
frame= 501 fps=110 q=-0.0 size=N/A time=00:00:08.38 bitrate=N/A speed=1.84x
잘 작동합니다.
주요 영상 트랜스코딩 테스트
1. HEVC 4K 60FPS 10BIT
2. VP9 Profile0 4K 60FPS 8BIT
결과는 영상으로!
하아.. 카비레이크 가야되나요...
'서버 > 리눅스 서버' 카테고리의 다른 글
아파치 웹서버 가상호스트 별, 속도 제한 적용하기 (0) | 2018.04.14 |
---|---|
데비안 / 우분투 PPTP VPN 서버 설치하기 (0) | 2018.03.28 |
emby-server 3.2.70 하드웨어 트랜스코딩 (VAAPI) (0) | 2018.01.24 |
리눅스에서 2TB 이상 하드디스크 포맷하기 (2) | 2018.01.13 |
데비안/우분투 Shadowsocks 프록시 서버 설치 및 활용하기 (2) | 2018.01.05 |
댓글