Jump to content

GPU Transcoding (Intel QuickSync and nVidia NVENC)


witteschnitte

Recommended Posts

The driver management in Linux and Windows is very different. On Linux a driver must be re-compiled against the headers of Linux image installed on the system, and there are dozens of different Linux images installed in the world. Usually a Linux user is not aware of this problem since this compilation is performed by the Linux distros mantainers. But the big problem here is not the recompilation, but the fact the Intel Linux distribution is available only for few Linux Kernel versions. This is what is stated in the last SDK release notes:

 

 

Intel Media Server Studio 2015 R6 Driver,
SDK for Linux enabled support of 5th Generation Intel Core
processors and targets different set of operating systems than
previous releases
. CentOS 7.0, Ubuntu* 12.04 LTS and SUSE* Linux (*)
Enterprise Server 11 support has been discontinued.
For this release only CentOS 7.1 and SUSE Linux Enterprise Server 12 are supported configurations.
For more information please see:
https://software.intel.com/en-us/intel-mediasdk-supported-versions-server
(*) Starting from next major release support of SUSE Linux Enterprise Server 12 will be
discontinued

 

Linux CentOS 7.1 is using Linux Kernel 3.10.0, while SUSE LES12 is using kernel version 3.12.43. Intel has also released generic patches for the Linux Kernel 3.14.5. We are speaking about quite old releases (not supporting the latest hardware drivers). To give you an idea the most updated distros available today are using Linux kernel 4.0 and above. In summary it's impossible relesase a ffmpeg version working for every Linux kernel image with GPU encoding support. Till we are speaking about CPU only optimizations there is not problem, but the Intel SDK for GPU encoding require kernel specific drivers and hooks that are not standard in the current Linux distros.

 

So it's impossible distribute a "generic" ffmpeg with QSV support like has been done for Windows (that since is not open source has a different approach regarding the drivers). Intel Linux SDK targets only specific Linux Enterprise wide versions for commercial reasons. The SDK is mainly for companies that want to build Media Servers able to stream content to a lot of clients. For personal/domestic (*) use a ffmpeg version that use only the CPU is enough. For curiosity I have performed some tests both in Linux and Windows comparing CPU encoding speed (libx264, preset ultrafast) versus GPU encoding (QSV, NVENC) and I can confirm that the speeds are comparable, so I don't see the point to spend to much time on this problem on Linux since actually is not a problem. Please read carefully the following thread: https://trac.ffmpeg.org/ticket/2591.  

 

 

 

(*) Otherwise Intel is practically forcing the users to install CentOS 7.1

Edited by Dan64
  • Like 1
Link to comment
Share on other sites

witteschnitte

ok so this thread isnt needed anymore or do i understand this wrong? can i compile ffmpeg for emby on my own?

in tvheadend Quicksync transcoding will only use 5 percent cpu instat of 60 percent.

 

So can i compile ffmpeg on my own and what is needed to run with emby?

Link to comment
Share on other sites

witteschnitte

I dont understand this. the ffmpeg used at this time also runs on specific linux Distributions. so it only needs the libraries compiled inside

Link to comment
Share on other sites

supermau

I will give it a shot at compiling it and if successful I will report my findings and comparison of qsv vs. ultrafast with server load of 1, 5, 10, 15, and 20 simultaneous transcoding streams...

  • Like 1
Link to comment
Share on other sites

I'm trying to understand the status of NVENC - wondering if I could slot a GTX950 into my N54L microserver to get hardware encoding, as quicksync is obviously never possible in this rig. I've read this thread but it's not clear to me if it's actually working reliably.

Link to comment
Share on other sites

I'm trying to understand the status of NVENC - wondering if I could slot a GTX950 into my N54L microserver to get hardware encoding, as quicksync is obviously never possible in this rig. I've read this thread but it's not clear to me if it's actually working reliably.

 

I have tested the build available here: https://github.com/MediaBrowser/Emby/wiki/GPU-Transcoding

It works but not on all the files that I have tested. I have a Gigabyte X99M with a Intel i7-5820K (6-core) and a GTX-960.

 

Here the output of the command: ffmpeg.exe -i sintel.mkv -t 30 -c:v libnvenc -b:v 4000k -f mp4 -y sintel_n.mp4

ffmpeg version N-68994-g713e3bb Copyright (c) 2000-2015 the FFmpeg developers
  built on Jan 14 2015 19:47:03 with gcc 4.9.2 (Rev2, Built by MSYS2 project)
  configuration: --enable-libmfx --enable-libnvenc --enable-nonfree --enable-iconv --arch=x86 --disable-debug --disable-shared --disable-doc --disable-w32threads --enable-gpl --enable-version3 --enable-runtime-cpudetect --enable-avfilter --enable-bzlib --enable-zlib --enable-decklink --enable-librtmp --enable-gnutls --enable-avisynth --enable-frei0r --enable-filter=frei0r --enable-libbluray --enable-libcaca --enable-libopenjpeg --enable-fontconfig --enable-libfreetype --enable-libass --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-libschroedinger --enable-libsoxr --enable-libtwolame --enable-libspeex --enable-libtheora --enable-libutvideo --enable-libvorbis --enable-libvo-aacenc --enable-libopus --enable-libvidstab --enable-libvpx --enable-libwavpack --enable-libxavs --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzvbi
  libavutil      54. 16.100 / 54. 16.100
  libavcodec     56. 20.100 / 56. 20.100
  libavformat    56. 18.100 / 56. 18.100
  libavdevice    56.  3.100 / 56.  3.100
  libavfilter     5.  7.100 /  5.  7.100
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, matroska,webm, from 'sintel.mkv':
  Metadata:
    title           : Sintel (4K UltraHD)
    CREATION_TIME   : 2015-07-25T17:49:37Z
    ENCODER         : Lavf56.1.0
  Duration: 00:02:00.00, start: 0.083000, bitrate: 1557 kb/s
    Stream #0:0(eng): Video: hevc (Main), yuv420p(tv, bt709), 1920x818 [SAR 1:1 DAR 960:409], 24 fps, 24 tbr, 1k tbn, 24 tbc (default)
    Stream #0:1(eng): Audio: aac (LC), 48000 Hz, stereo, fltp (default)
Output #0, mp4, to 'sintel_n.mp4':
  Metadata:
    title           : Sintel (4K UltraHD)
    encoder         : Lavf56.18.100
    Stream #0:0(eng): Video: h264 (libnvenc) ([33][0][0][0] / 0x0021), yuv420p, 1920x818 [SAR 1:1 DAR 960:409], q=-1--1, 4000 kb/s, 24 fps, 12288 tbn, 24 tbc (default)
    Stream #0:1(eng): Audio: aac (libvo_aacenc) ([64][0][0][0] / 0x0040), 48000 Hz, stereo, s16, 128 kb/s (default)
Stream mapping:
  Stream #0:0 -> #0:0 (hevc (native) -> h264 (libnvenc))
  Stream #0:1 -> #0:1 (aac (native) -> aac (libvo_aacenc))
Press [q] to stop, [?] for help
frame=   75 fps=0.0 q=0.0 size=    1592kB time=00:00:03.76 bitrate=3465.4kbits/s    
frame=  149 fps=148 q=0.0 size=    3174kB time=00:00:06.83 bitrate=3803.3kbits/s    
frame=  233 fps=155 q=0.0 size=    4988kB time=00:00:10.39 bitrate=3930.0kbits/s    
frame=  314 fps=156 q=0.0 size=    6667kB time=00:00:13.70 bitrate=3985.3kbits/s    
frame=  395 fps=157 q=0.0 size=    8309kB time=00:00:17.09 bitrate=3981.2kbits/s    
frame=  475 fps=158 q=0.0 size=    9994kB time=00:00:20.55 bitrate=3983.3kbits/s    
frame=  558 fps=159 q=0.0 size=   11767kB time=00:00:23.85 bitrate=4040.2kbits/s    
frame=  642 fps=160 q=0.0 size=   13444kB time=00:00:27.50 bitrate=4003.8kbits/s    
frame=  720 fps=162 q=0.0 Lsize=   14870kB time=00:00:30.00 bitrate=4060.0kbits/s    
video:14379kB audio:469kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.140426%

As you can see the transcoding speed is 162fps using 35% of CPU.

 

For comparison here the output of the command using the preset superfast: ffmpeg.exe -i sintel.mkv -t 30 -threads 0 -map 0:0 -codec:v:0 libx264 -pix_fmt yuv420p -preset superfast -crf 23 -b:v 4000k -f mp4 -y sintel_s.mp4

ffmpeg version N-68994-g713e3bb Copyright (c) 2000-2015 the FFmpeg developers
  built on Jan 14 2015 19:47:03 with gcc 4.9.2 (Rev2, Built by MSYS2 project)
  configuration: --enable-libmfx --enable-libnvenc --enable-nonfree --enable-iconv --arch=x86 --disable-debug --disable-shared --disable-doc --disable-w32threads --enable-gpl --enable-version3 --enable-runtime-cpudetect --enable-avfilter --enable-bzlib --enable-zlib --enable-decklink --enable-librtmp --enable-gnutls --enable-avisynth --enable-frei0r --enable-filter=frei0r --enable-libbluray --enable-libcaca --enable-libopenjpeg --enable-fontconfig --enable-libfreetype --enable-libass --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-libschroedinger --enable-libsoxr --enable-libtwolame --enable-libspeex --enable-libtheora --enable-libutvideo --enable-libvorbis --enable-libvo-aacenc --enable-libopus --enable-libvidstab --enable-libvpx --enable-libwavpack --enable-libxavs --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzvbi
  libavutil      54. 16.100 / 54. 16.100
  libavcodec     56. 20.100 / 56. 20.100
  libavformat    56. 18.100 / 56. 18.100
  libavdevice    56.  3.100 / 56.  3.100
  libavfilter     5.  7.100 /  5.  7.100
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, matroska,webm, from 'sintel.mkv':
  Metadata:
    title           : Sintel (4K UltraHD)
    CREATION_TIME   : 2015-07-25T17:49:37Z
    ENCODER         : Lavf56.1.0
  Duration: 00:02:00.00, start: 0.083000, bitrate: 1557 kb/s
    Stream #0:0(eng): Video: hevc (Main), yuv420p(tv, bt709), 1920x818 [SAR 1:1 DAR 960:409], 24 fps, 24 tbr, 1k tbn, 24 tbc (default)
    Stream #0:1(eng): Audio: aac (LC), 48000 Hz, stereo, fltp (default)
[libx264 @ 04e39b00] using SAR=1/1
[libx264 @ 04e39b00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
[libx264 @ 04e39b00] profile High, level 4.0
[libx264 @ 04e39b00] 264 - core 144 r2525 40bb568 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=1 deblock=1:0:0 analyse=0x3:0x3 me=dia subme=1 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=18 lookahead_threads=3 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=1 keyint=250 keyint_min=24 scenecut=40 intra_refresh=0 rc=crf mbtree=0 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 pb_ratio=1.30 aq=1:1.00
Output #0, mp4, to 'sintel_s.mp4':
  Metadata:
    title           : Sintel (4K UltraHD)
    encoder         : Lavf56.18.100
    Stream #0:0(eng): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 1920x818 [SAR 1:1 DAR 960:409], q=-1--1, 4000 kb/s, 24 fps, 12288 tbn, 24 tbc (default)
Stream mapping:
  Stream #0:0 -> #0:0 (hevc (native) -> h264 (libx264))
Press [q] to stop, [?] for help
frame=   67 fps=0.0 q=22.0 size=    1022kB time=00:00:01.66 bitrate=5022.4kbits/s    
frame=  124 fps=124 q=23.0 size=    2439kB time=00:00:04.04 bitrate=4943.3kbits/s    
frame=  196 fps=130 q=21.0 size=    4230kB time=00:00:07.04 bitrate=4921.5kbits/s    
frame=  279 fps=138 q=21.0 size=    5700kB time=00:00:10.50 bitrate=4446.7kbits/s    
frame=  364 fps=144 q=23.0 size=    6801kB time=00:00:14.04 bitrate=3967.8kbits/s    
frame=  452 fps=149 q=23.0 size=    7787kB time=00:00:17.70 bitrate=3602.5kbits/s    
frame=  541 fps=153 q=22.0 size=    8837kB time=00:00:21.41 bitrate=3380.4kbits/s    
frame=  620 fps=154 q=23.0 size=    9731kB time=00:00:24.70 bitrate=3226.3kbits/s    
frame=  720 fps=160 q=-1.0 Lsize=   11216kB time=00:00:29.91 bitrate=3071.3kbits/s    
video:11207kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.078030%
[libx264 @ 04e39b00] frame I:10    Avg QP:13.64  size: 56817
[libx264 @ 04e39b00] frame P:311   Avg QP:16.05  size: 25775
[libx264 @ 04e39b00] frame B:399   Avg QP:18.11  size:  7247
[libx264 @ 04e39b00] consecutive B-frames: 16.5% 25.3% 10.4% 47.8%
[libx264 @ 04e39b00] mb I  I16..4: 17.6% 57.5% 24.9%
[libx264 @ 04e39b00] mb P  I16..4:  8.0% 15.6%  2.3%  P16..4: 53.8%  0.0%  0.0%  0.0%  0.0%    skip:20.2%
[libx264 @ 04e39b00] mb B  I16..4:  1.7%  1.9%  0.1%  B16..8: 29.7%  0.0%  0.0%  direct: 6.0%  skip:60.6%  L0:39.6% L1:50.7% BI: 9.6%
[libx264 @ 04e39b00] 8x8 transform intra:58.8% inter:48.1%
[libx264 @ 04e39b00] coded y,uvDC,uvAC intra: 39.7% 20.1% 3.4% inter: 10.8% 8.6% 0.0%
[libx264 @ 04e39b00] i16 v,h,dc,p: 40% 29% 18% 13%
[libx264 @ 04e39b00] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 17% 21% 23%  6%  6%  6%  8%  5%  8%
[libx264 @ 04e39b00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 26% 23% 18%  7%  5%  5%  6%  4%  6%
[libx264 @ 04e39b00] i8c dc,h,v,p: 65% 16% 14%  5%
[libx264 @ 04e39b00] Weighted P-Frames: Y:1.9% UV:0.3%
[libx264 @ 04e39b00] kb/s:3060.19

As you can see using the CPU only the speed is 160fps using 95% of CPU.

 

Using the preset ultafast the transcoding speed is 15% faster.

Here the output of the command with the preset ultrafast: ffmpeg.exe -i sintel.mkv -t 30 -threads 0 -map 0:0 -codec:v:0 libx264 -pix_fmt yuv420p -preset ultrafast -crf 24 -b:v 4000k -f mp4 -y sintel_s.mp4

ffmpeg version N-68994-g713e3bb Copyright (c) 2000-2015 the FFmpeg developers
  built on Jan 14 2015 19:47:03 with gcc 4.9.2 (Rev2, Built by MSYS2 project)
  configuration: --enable-libmfx --enable-libnvenc --enable-nonfree --enable-iconv --arch=x86 --disable-debug --disable-shared --disable-doc --disable-w32threads --enable-gpl --enable-version3 --enable-runtime-cpudetect --enable-avfilter --enable-bzlib --enable-zlib --enable-decklink --enable-librtmp --enable-gnutls --enable-avisynth --enable-frei0r --enable-filter=frei0r --enable-libbluray --enable-libcaca --enable-libopenjpeg --enable-fontconfig --enable-libfreetype --enable-libass --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-libschroedinger --enable-libsoxr --enable-libtwolame --enable-libspeex --enable-libtheora --enable-libutvideo --enable-libvorbis --enable-libvo-aacenc --enable-libopus --enable-libvidstab --enable-libvpx --enable-libwavpack --enable-libxavs --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzvbi
  libavutil      54. 16.100 / 54. 16.100
  libavcodec     56. 20.100 / 56. 20.100
  libavformat    56. 18.100 / 56. 18.100
  libavdevice    56.  3.100 / 56.  3.100
  libavfilter     5.  7.100 /  5.  7.100
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, matroska,webm, from 'sintel.mkv':
  Metadata:
    title           : Sintel (4K UltraHD)
    CREATION_TIME   : 2015-07-25T17:49:37Z
    ENCODER         : Lavf56.1.0
  Duration: 00:02:00.00, start: 0.083000, bitrate: 1557 kb/s
    Stream #0:0(eng): Video: hevc (Main), yuv420p(tv, bt709), 1920x818 [SAR 1:1 DAR 960:409], 24 fps, 24 tbr, 1k tbn, 24 tbc (default)
    Stream #0:1(eng): Audio: aac (LC), 48000 Hz, stereo, fltp (default)
[libx264 @ 00aa3420] using SAR=1/1
[libx264 @ 00aa3420] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
[libx264 @ 00aa3420] profile Constrained Baseline, level 4.0
[libx264 @ 00aa3420] 264 - core 144 r2525 40bb568 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=18 lookahead_threads=3 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=24 scenecut=0 intra_refresh=0 rc=crf mbtree=0 crf=24.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=0
Output #0, mp4, to 'sintel_u.mp4':
  Metadata:
    title           : Sintel (4K UltraHD)
    encoder         : Lavf56.18.100
    Stream #0:0(eng): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 1920x818 [SAR 1:1 DAR 960:409], q=-1--1, 4000 kb/s, 24 fps, 12288 tbn, 24 tbc (default)
Stream mapping:
  Stream #0:0 -> #0:0 (hevc (native) -> h264 (libx264))
Press [q] to stop, [?] for help
frame=   77 fps=0.0 q=23.0 size=    1236kB time=00:00:02.41 bitrate=4188.6kbits/s    
frame=  142 fps=141 q=24.0 size=    2686kB time=00:00:05.12 bitrate=4293.4kbits/s    
frame=  236 fps=157 q=24.0 size=    4842kB time=00:00:09.04 bitrate=4386.6kbits/s    
frame=  328 fps=163 q=22.0 size=    6429kB time=00:00:12.87 bitrate=4090.3kbits/s    
frame=  428 fps=170 q=22.0 size=    7745kB time=00:00:17.04 bitrate=3722.9kbits/s    
frame=  532 fps=176 q=20.0 size=    9055kB time=00:00:21.37 bitrate=3470.2kbits/s    
frame=  623 fps=177 q=24.0 size=   10939kB time=00:00:25.16 bitrate=3560.8kbits/s    
frame=  720 fps=184 q=-1.0 Lsize=   12359kB time=00:00:30.00 bitrate=3374.8kbits/s    
video:12355kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.030866%
[libx264 @ 00aa3420] frame I:3     Avg QP:19.33  size: 66572
[libx264 @ 00aa3420] frame P:717   Avg QP:21.60  size: 17366
[libx264 @ 00aa3420] mb I  I16..4: 100.0%  0.0%  0.0%
[libx264 @ 00aa3420] mb P  I16..4: 14.4%  0.0%  0.0%  P16..4: 32.4%  0.0%  0.0%  0.0%  0.0%    skip:53.2%
[libx264 @ 00aa3420] coded y,uvDC,uvAC intra: 14.6% 13.0% 0.6% inter: 12.5% 6.7% 0.0%
[libx264 @ 00aa3420] i16 v,h,dc,p: 30% 30% 21% 19%
[libx264 @ 00aa3420] i8c dc,h,v,p: 62% 18% 16%  4%
[libx264 @ 00aa3420] kb/s:3373.56

In this case the transcoding speed is 184fps.

 

In effect this is not the maximum possible speed. If the transcoding is performed from "h264 (native)" to "h264 (libx264)" it's possible reach the speed of 330fps.

 

As already commented in my previous post there is not a big advantage in term of speed using the hardware acceleration unless you need to free up the CPU for others task.

Edited by Dan64
Link to comment
Share on other sites

witteschnitte

speed doenst matter. the people who want quicksync want to free the cpu usage

Edited by witteschnitte
Link to comment
Share on other sites

jmgriffes

speed doenst matter. the people who want quicksync want to free the cpu usage

 

I agree. If I can use QuickSync to transcode, that means my little 4th Gen Core i3 can handle 2-4x as many streams at the same time (assuming they all need to transcode). Some of my movies that would struggle before due to their bitrate (massive stuttering in early areas, stuttering throughout due to not quite being able to do 24 fps for a SINGLE stream) now transcode at 90 FPS with QuickSync, and they can live peacefully with 2-3 other streams going on at the same time.

Link to comment
Share on other sites

I agree. If I can use QuickSync to transcode, that means my little 4th Gen Core i3 can handle 2-4x as many streams at the same time (assuming they all need to transcode). Some of my movies that would struggle before due to their bitrate (massive stuttering in early areas, stuttering throughout due to not quite being able to do 24 fps for a SINGLE stream) now transcode at 90 FPS with QuickSync, and they can live peacefully with 2-3 other streams going on at the same time.

 

I don't know how you get the 24fps, as already said many times to be able to compare GPU transcoding with CPU you "must" use the libx264 with preset ultrafast.

 

To give you an idea on my Desktop powered by an Intel 3rd Gen i3-3225 3.30 Ghz and with HD Graphics 4000 I can transcode from hevc to h264 at a speed of 98fps (99% CPU) using the preset ultrafast, while using the preset superfast the speed drop to 73fps (99% CPU). For comparison using the ffmpeg (with qsv support) made available by babgvant in this post (*): http://emby.media/community/index.php?/topic/10723-gpu-transcoding-intel-quicksync-and-nvidia-nvenc/page-15&do=findComment&comment=242508 I get a transcoding speed of 104fps at 92% CPU. Willing to lower the CPU usage you can force ffmpeg to use only 1 thread, in this case using the preset ultrafast a get a transcoding speed of 64fps at 52% of CPU: well above the minimum requirement of 25fps and using a 3rd Gen i3 CPU.  

 

 

(*) This is the only version released that support my quite old CPU

Link to comment
Share on other sites

witteschnitte

you can not compare 3rd gen intel with 4th gen. the quicksync is many improved on the 4th gen. as i said before. i am using quicksync this tvheadend on centos 7. before i got 90 percent cpu. now with quicksync i get 5 percent which is nicely better.

Edited by witteschnitte
Link to comment
Share on other sites

witteschnitte

To get back to the topic. can anyone tell me when the linux ffmpeg will be updated to use quicksync? the release text says it will be available for other systems. but no linux Distribution will work. so from what systems are they talking about???

Edited by witteschnitte
Link to comment
Share on other sites

  • 2 weeks later...
justdrooit

It seems this thread went hard to QuickSync, while nVidia NVENC sort of got left on the side of the road.

Being that I'm running an AMD A8-5500, QuickSync doesn't have a lot of use for me. Have there been any developments with NVENC for GPU Transcoding? I'd love for my system to be capable of transcoding two HDTV streams at one time, or handle two x265 transcodes at once. I'd certainly buy a GTX 950/960 for it if this worked.

Thanks in advance. 

Edited by justdrooit
Link to comment
Share on other sites

justdrooit

By the way, in case my post seemed like I'm unappreciative of the efforts put into Emby, I'm actually quite the opposite. It's a wonderful app/service and I think it's the best option out there for a media server by far; particularly one that transcodes. Lovin' it!

Link to comment
Share on other sites

justdrooit

Ouch. Okay, so doing a little reading here, that's correct, but it seems possible (and legal) for us to compile it ourselves with that support. Is there a guide that anyone could provide to help us accomplish that?

Link to comment
Share on other sites

Well, not only do you have to build ffmpeg, but we have to adapt emby to utilize the encoders and decoders for hevc. On windows we use zeranoe:

 

http://ffmpeg.zeranoe.com/builds/

 

You could check out their site as they have their build process fully documented, so you would basically just have to add the extra libraries that are needed.

Link to comment
Share on other sites

babgvant

Well, not only do you have to build ffmpeg, but we have to adapt emby to utilize the encoders and decoders for hevc. On windows we use zeranoe:

 

http://ffmpeg.zeranoe.com/builds/

 

You could check out their site as they have their build process fully documented, so you would basically just have to add the extra libraries that are needed.

 

Did they start compiling in MSDK support? If not, you'll need to use a build that does (like mine).

Link to comment
Share on other sites

Did they start compiling in MSDK support? If not, you'll need to use a build that does (like mine).

 

No, I don't see it listed at the bottom of the page.

Link to comment
Share on other sites

I have a problem configuring nvenc transcoding. My config is A8-3850 APU with GTX960 GPU. 

I followed the steps in this link : https://github.com/MediaBrowser/Emby/wiki/GPU-Transcoding

The issues I have are:

1. When I replace the DLL file Emby server does not start corectly (no web interface access)

2. I can't find <H264Encoder>libx264</H264Encoder> in the %APPDATA%\MediaBrowser-Server\config\encoding.xml file. Even if I create the line it does not solve the issue

 

Am I missing something?

Link to comment
Share on other sites

I have a problem configuring nvenc transcoding. My config is A8-3850 APU with GTX960 GPU. 

I followed the steps in this link : https://github.com/MediaBrowser/Emby/wiki/GPU-Transcoding

The issues I have are:

1. When I replace the DLL file Emby server does not start corectly (no web interface access)

2. I can't find libx264 in the %APPDATA%\MediaBrowser-Server\config\encoding.xml file. Even if I create the line it does not solve the issue

 

Am I missing something?

 

That's obsolete now. That was a community contributed hack but now that core support has been added, I have not done any testing to see if that still works (it probably doesn't). We don't have any official nvenc support right now.

  • Like 1
Link to comment
Share on other sites

That's a shame...

For me, when available, nvenc transcoding will be motive enough to get Emby Premiere. As it stands today I don't plan on changing my hardware because reinstalling and reconfiguring everything would be a nightmare. Transcoding and sync would be "inneficient" on my setup without GPU decode/encode support.

I'll be monitoring this thread for future news regarding nvenc transcoding.

 

Thanks

Link to comment
Share on other sites

witteschnitte

maybe at first the ffmpeg that is used in linux have to be compiled with the right libs. quicksync need libmfx. are there any plans to include this lib in the linux releases of emby? without quicksync can not be used on any linux device. nice that the quicksync option is now in the frontend menu but without any function.

May i help you to include this lib? or is it already in the dev releases?

 

regards

Link to comment
Share on other sites

maybe at first the ffmpeg that is used in linux have to be compiled with the right libs. quicksync need libmfx. are there any plans to include this lib in the linux releases of emby? without quicksync can not be used on any linux device. nice that the quicksync option is now in the frontend menu but without any function.

May i help you to include this lib? or is it already in the dev releases?

 

regards

 

yes, you absolutely could and that would be fantastic. we have been getting linux ffmpeg builds here:

 

http://johnvansickle.com/ffmpeg/

 

So we would just need equivalent builds with libmfx included, for x64, x86 and arm,

  • Like 1
Link to comment
Share on other sites

Finally my project of a super lowpower nas has started.

 

The final configuration will be xenserver, with two vm:

Windows server 2008 r2 for emby

Freenas for the rest

 

The cpu is a low power skylake core i7-6700T

 

All this was meant to be able to passthrough the gpu to the 2008 vm and use it for ffmpeg in emby.

 

To my surprise ALL the encoding that I do with that vm locks at different minutes in different ways.

 

At that point a bit disappointed I tested immediately handbrake and with my surprise again it is working flawlessly without stopping.

 

Is there something I should do more to let it work?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...