• Login
  • Register
  • Login Register
    Login
    Username/Email:
    Password:
    Or login with a social network below
  • Forum
  • Website
  • GitHub
  • Status
  • Translation
  • Features
  • Team
  • Rules
  • Help
  • Feeds
User Links
  • Login
  • Register
  • Login Register
    Login
    Username/Email:
    Password:
    Or login with a social network below

    Useful Links Forum Website GitHub Status Translation Features Team Rules Help Feeds
    Jellyfin Forum Support Troubleshooting Transcode issues with Intel N150

     
    • 0 Vote(s) - 0 Average

    Transcode issues with Intel N150

    Unable to transcode multiple streams with N150 CPU
    CauliflowerBrain
    Offline

    Junior Member

    Posts: 2
    Threads: 1
    Joined: 2026 Feb
    Reputation: 0
    Country:Australia
    #1
    2026-02-11, 11:01 PM
    Hey all,

    I've been hosting a jellyfin server via docker on a GMTEK mini-pc which runs an Intel N150® CPU with onboard iGPU. Looking for some help/advice from more experienced people.

    Recently I've had a few more people using the server and requesting more media via jellyseerr which requires transcoding so I've enabled hardware acceleration and currently it seems to be working with QSV for normal streams (with the CPU usage sitting at a couple %). I've verified the hw acceleration is working via jellyfin logs and also using intel_gpu_top on the mini-pc which shows gpu usage (attached). Logs below:

    My issue is that when I run even just a single transcoded file (even on the same network), CPU usage skyrockets to using the max amount of available CPU threads (4 available) and then even one additional stream basically forces the mini-pc to crash/become unconnectable for a while.

    Everything I've read about an N100/N150 with hw acceleration is that it should be able to support multiple transcodes and the overall cpu usage should be drastically layer over software transcoding. This just doesn't seem the case and I'm not sure why. I've attached my decode settings and can share whatever else would be useful.

    Any help you can provide would be amazing


    {"Protocol":0,"Id":"54b68646c65d76ac4abd78f698f4b4f1","Path":"/data/media/tv/Pantheon (2022)/Pantheon.S02E01.The.Gods.Have.Not.Died.in.Vain.1080p.AMZN.WEB-DL.DDP5.1.H.264-NTb.mkv","EncoderPath":null,"EncoderProtocol":null,"Type":0,"Container":"mkv","Size":3272748608,"Name":"Pantheon.S02E01.The.Gods.Have.Not.Died.in.Vain.1080p.AMZN.WEB-DL.DDP5.1.H.264-NTb","IsRemote":false,"ETag":"811251ce48ca6809c3796d2760ab6e31","RunTimeTicks":25222500000,"ReadAtNativeFramerate":false,"IgnoreDts":false,"IgnoreIndex":false,"GenPtsInput":false,"SupportsTranscoding":true,"SupportsDirectStream":true,"SupportsDirectPlay":true,"IsInfiniteStream":false,"UseMostCompatibleTranscodingProfile":false,"RequiresOpening":false,"OpenToken":null,"RequiresClosing":false,"LiveStreamId":null,"BufferMs":null,"RequiresLooping":false,"SupportsProbing":true,"VideoType":0,"IsoType":null,"Video3DFormat":null,"MediaStreams":[{"Codec":"h264","CodecTag":null,"Language":null,"ColorRange":null,"ColorSpace":"bt709","ColorTransfer":"bt709","ColorPrimaries":"bt709","DvVersionMajor":null,"DvVersionMinor":null,"DvProfile":null,"DvLevel":null,"RpuPresentFlag":null,"ElPresentFlag":null,"BlPresentFlag":null,"DvBlSignalCompatibilityId":null,"Rotation":null,"Comment":null,"TimeBase":"1/1000","CodecTimeBase":null,"Title":null,"Hdr10PlusPresentFlag":null,"VideoRange":1,"VideoRangeType":1,"VideoDoViTitle":null,"AudioSpatialFormat":0,"LocalizedUndefined":null,"LocalizedDefault":null,"LocalizedForced":null,"LocalizedExternal":null,"LocalizedHearingImpaired":null,"DisplayTitle":"1080p H264 SDR","NalLengthSize":"4","IsInterlaced":false,"IsAVC":true,"ChannelLayout":null,"BitRate":10380409,"BitDepth":8,"RefFrames":1,"PacketLength":null,"Channels":null,"SampleRate":null,"IsDefault":true,"IsForced":false,"IsHearingImpaired":false,"Height":1080,"Width":1920,"AverageFrameRate":24,"RealFrameRate":24,"ReferenceFrameRate":24,"Profile":"High","Type":1,"AspectRatio":"16:9","Index":0,"Score":null,"IsExternal":false,"DeliveryMethod":null,"DeliveryUrl":null,"IsExternalUrl":null,"IsTextSubtitleStream":false,"SupportsExternalStream":false,"Path":null,"PixelFormat":"yuv420p","Level":40,"IsAnamorphic":false},{"Codec":"eac3","CodecTag":null,"Language":"eng","ColorRange":null,"ColorSpace":null,"ColorTransfer":null,"ColorPrimaries":null,"DvVersionMajor":null,"DvVersionMinor":null,"DvProfile":null,"DvLevel":null,"RpuPresentFlag":null,"ElPresentFlag":null,"BlPresentFlag":null,"DvBlSignalCompatibilityId":null,"Rotation":null,"Comment":null,"TimeBase":"1/1000","CodecTimeBase":null,"Title":null,"Hdr10PlusPresentFlag":null,"VideoRange":0,"VideoRangeType":0,"VideoDoViTitle":null,"AudioSpatialFormat":0,"LocalizedUndefined":null,"LocalizedDefault":"Default","LocalizedForced":null,"LocalizedExternal":"External","LocalizedHearingImpaired":null,"DisplayTitle":"English - Dolby Digital\u002B - 5.1 - Default","NalLengthSize":null,"IsInterlaced":false,"IsAVC":false,"ChannelLayout":"5.1","BitRate":640000,"BitDepth":null,"RefFrames":null,"PacketLength":null,"Channels":6,"SampleRate":48000,"IsDefault":true,"IsForced":false,"IsHearingImpaired":false,"Height":null,"Width":null,"AverageFrameRate":null,"RealFrameRate":null,"ReferenceFrameRate":null,"Profile":null,"Type":0,"AspectRatio":null,"Index":1,"Score":null,"IsExternal":false,"DeliveryMethod":null,"DeliveryUrl":null,"IsExternalUrl":null,"IsTextSubtitleStream":false,"SupportsExternalStream":false,"Path":null,"PixelFormat":null,"Level":0,"IsAnamorphic":null},{"Codec":"subrip","CodecTag":null,"Language":"eng","ColorRange":null,"ColorSpace":null,"ColorTransfer":null,"ColorPrimaries":null,"DvVersionMajor":null,"DvVersionMinor":null,"DvProfile":null,"DvLevel":null,"RpuPresentFlag":null,"ElPresentFlag":null,"BlPresentFlag":null,"DvBlSignalCompatibilityId":null,"Rotation":null,"Comment":null,"TimeBase":"1/1000","CodecTimeBase":null,"Title":"Forced","Hdr10PlusPresentFlag":null,"VideoRange":0,"VideoRangeType":0,"VideoDoViTitle":null,"AudioSpatialFormat":0,"LocalizedUndefined":"Undefined","LocalizedDefault":"Default","LocalizedForced":"Forced","LocalizedExternal":"External","LocalizedHearingImpaired":"Hearing Impaired","DisplayTitle":"Forced - English - Default - SUBRIP","NalLengthSize":null,"IsInterlaced":false,"IsAVC":false,"ChannelLayout":null,"BitRate":null,"BitDepth":null,"RefFrames":null,"PacketLength":null,"Channels":null,"SampleRate":null,"IsDefault":true,"IsForced":true,"IsHearingImpaired":false,"Height":0,"Width":0,"AverageFrameRate":null,"RealFrameRate":null,"ReferenceFrameRate":null,"Profile":null,"Type":2,"AspectRatio":null,"Index":2,"Score":null,"IsExternal":false,"DeliveryMethod":null,"DeliveryUrl":null,"IsExternalUrl":null,"IsTextSubtitleStream":true,"SupportsExternalStream":true,"Path":null,"PixelFormat":null,"Level":0,"IsAnamorphic":null},{"Codec":"subrip","CodecTag":null,"Language":"eng","ColorRange":null,"ColorSpace":null,"ColorTransfer":null,"ColorPrimaries":null,"DvVersionMajor":null,"DvVersionMinor":null,"DvProfile":null,"DvLevel":null,"RpuPresentFlag":null,"ElPresentFlag":null,"BlPresentFlag":null,"DvBlSignalCompatibilityId":null,"Rotation":null,"Comment":null,"TimeBase":"1/1000","CodecTimeBase":null,"Title":null,"Hdr10PlusPresentFlag":null,"VideoRange":0,"VideoRangeType":0,"VideoDoViTitle":null,"AudioSpatialFormat":0,"LocalizedUndefined":"Undefined","LocalizedDefault":"Default","LocalizedForced":"Forced","LocalizedExternal":"External","LocalizedHearingImpaired":"Hearing Impaired","DisplayTitle":"English - SUBRIP","NalLengthSize":null,"IsInterlaced":false,"IsAVC":false,"ChannelLayout":null,"BitRate":null,"BitDepth":null,"RefFrames":null,"PacketLength":null,"Channels":null,"SampleRate":null,"IsDefault":false,"IsForced":false,"IsHearingImpaired":false,"Height":0,"Width":0,"AverageFrameRate":null,"RealFrameRate":null,"ReferenceFrameRate":null,"Profile":null,"Type":2,"AspectRatio":null,"Index":3,"Score":null,"IsExternal":false,"DeliveryMethod":null,"DeliveryUrl":null,"IsExternalUrl":null,"IsTextSubtitleStream":true,"SupportsExternalStream":true,"Path":null,"PixelFormat":null,"Level":0,"IsAnamorphic":null}],"MediaAttachments":[],"Formats":[],"Bitrate":11020409,"FallbackMaxStreamingBitrate":null,"Timestamp":null,"RequiredHttpHeaders":{},"TranscodingUrl":null,"TranscodingSubProtocol":0,"TranscodingContainer":null,"AnalyzeDurationMs":null,"DefaultAudioStreamIndex":null,"DefaultSubtitleStreamIndex":null,"HasSegments":true}

    /usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 200M -probesize 1G -f matroska -init_hw_device vaapi=vaConfused-facedev/dri/renderD128,driver=iHD -init_hw_device qsv=qs@va -filter_hw_device qs -hwaccel qsv -hwaccel_output_format qsv -noautorotate -c:v h264_qsv -i file:"/data/media/tv/Pantheon (2022)/Pantheon.S02E01.The.Gods.Have.Not.Died.in.Vain.1080p.AMZN.WEB-DL.DDP5.1.H.264-NTb.mkv" -noautoscale -map_metadata -1 -map_chapters -1 -threads 3 -map 0:0 -map 0:1 -map -0:s -codec:v:0 h264_qsv -preset fast -mbbrc 1 -b:v 292000 -maxrate 292001 -rc_init_occupancy 584000 -bufsize 1168000 -profile:v:0 high -level 40 -g:v:0 72 -keyint_min:v:0 72 -vf "setparams=color_primaries=bt709:color_trc=bt709:colorspace=bt709,vpp_qsv=w=960:h=540:format=nv12" -codec:a:0 libfdk_aac -ab 128000 -af "pan=stereo|c0=c2+0.30*c0+0.30*c4|c1=c2+0.30*c1+0.30*c5" -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 3 -hls_segment_type fmp4 -hls_fmp4_init_filename "987062323c7407b7496a83cb7db6426f-1.mp4" -start_number 0 -hls_segment_filename "/cache/transcodes/987062323c7407b7496a83cb7db6426f%d.mp4" -hls_playlist_type vod -hls_list_size 0 -hls_segment_options movflags=+frag_discont -y "/cache/transcodes/987062323c7407b7496a83cb7db6426f.m3u8"


    ffmpeg version 7.1.3-Jellyfin Copyright © 2000-2025 the FFmpeg developers
      built with gcc 14 (Debian 14.2.0-19)
      configuration: --prefix=/usr/lib/jellyfin-ffmpeg --target-os=linux --extra-version=Jellyfin --disable-doc --disable-ffplay --disable-static --disable-libxcb --disable-sdl2 --disable-xlib --enable-lto=auto --enable-gpl --enable-version3 --enable-shared --enable-gmp --enable-gnutls --enable-chromaprint --enable-opencl --enable-libdrm --enable-libxml2 --enable-libass --enable-libfreetype --enable-libfribidi --enable-libfontconfig --enable-libharfbuzz --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libopenmpt --enable-libdav1d --enable-libsvtav1 --enable-libwebp --enable-libvpx --enable-libx264 --enable-libx265 --enable-libzvbi --enable-libzimg --enable-libfdk-aac --arch=amd64 --enable-libshaderc --enable-libplacebo --enable-vulkan --enable-vaapi --enable-amf --enable-libvpl --enable-ffnvcodec --enable-cuda --enable-cuda-llvm --enable-cuvid --enable-nvdec --enable-nvenc
      libavutil      59. 39.100 / 59. 39.100
      libavcodec    61. 19.101 / 61. 19.101
      libavformat    61.  7.100 / 61.  7.100
      libavdevice    61.  3.100 / 61.  3.100
      libavfilter    10.  4.100 / 10.  4.100
      libswscale      8.  3.100 /  8.  3.100
      libswresample  5.  3.100 /  5.  3.100
      libpostproc    58.  3.100 / 58.  3.100
    libva info: VA-API version 1.22.0
    libva info: Trying to open /usr/lib/jellyfin-ffmpeg/lib/dri/iHD_drv_video.so
    libva info: Found init function __vaDriverInit_1_22
    libva info: va_openDriver() returns 0
    libva info: VA-API version 1.22.0
    libva info: Trying to open /usr/lib/jellyfin-ffmpeg/lib/dri/iHD_drv_video.so
    libva info: Found init function __vaDriverInit_1_22
    libva info: va_openDriver() returns 0
    Input #0, matroska,webm, from 'fileConfused-facedata/media/tv/Pantheon (2022)/Pantheon.S02E01.The.Gods.Have.Not.Died.in.Vain.1080p.AMZN.WEB-DL.DDP5.1.H.264-NTb.mkv':
      Metadata:
        encoder        : libebml v1.4.4 + libmatroska v1.7.1
      Duration: 00:42:02.25, start: 0.000000, bitrate: 10380 kb/s
      Stream #0:0: Video: h264 (High), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 24 fps, 24 tbr, 1k tbn (default)
          Metadata:
            BPS            : 9738236
            DURATION        : 00:42:02.250000000
            NUMBER_OF_FRAMES: 60534
            NUMBER_OF_BYTES : 3070283421
            _STATISTICS_WRITING_APP: mkvmerge v79.0 ('Funeral Pyres') 64-bit
            _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
      Stream #0:1(eng): Audio: eac3, 48000 Hz, 5.1(side), fltp, 640 kb/s (default)
          Metadata:
            BPS            : 640000
            DURATION        : 00:42:02.240000000
            NUMBER_OF_FRAMES: 78820
            NUMBER_OF_BYTES : 201779200
            _STATISTICS_WRITING_APP: mkvmerge v79.0 ('Funeral Pyres') 64-bit
            _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
      Stream #0:2(eng): Subtitle: subrip (srt) (default) (forced)
          Metadata:
            title          : Forced
            BPS            : 11
            DURATION        : 00:00:04.171000000
            NUMBER_OF_FRAMES: 1
            NUMBER_OF_BYTES : 6
            _STATISTICS_WRITING_APP: mkvmerge v79.0 ('Funeral Pyres') 64-bit
            _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
      Stream #0:3(eng): Subtitle: subrip (srt)
          Metadata:
            BPS            : 71
            DURATION        : 00:40:58.915000000
            NUMBER_OF_FRAMES: 581
            NUMBER_OF_BYTES : 22118
            _STATISTICS_WRITING_APP: mkvmerge v79.0 ('Funeral Pyres') 64-bit
            _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
    Stream mapping:
      Stream #0:0 -> #0:0 (h264 (h264_qsv) -> h264 (h264_qsv))
      Stream #0:1 -> #0:1 (eac3 (native) -> aac (libfdk_aac))
    Press [q] to stop, [?] for help
    [hls @ 0x77e22fac7580] Opening '/cache/transcodes/987062323c7407b7496a83cb7db6426f-1.mp4' for writing
    Output #0, hls, to '/cache/transcodes/987062323c7407b7496a83cb7db6426f.m3u8':
      Metadata:
        encoder        : Lavf61.7.100
      Stream #0:0: Video: h264, qsv(tv, bt709, progressive), 960x540 [SAR 1:1 DAR 16:9], q=2-31, 292 kb/s, 24 fps, 12288 tbn (default)
          Metadata:
            encoder        : Lavc61.19.101 h264_qsv
          Side data:
            cpb: bitrate max/min/avg: 292001/0/292000 buffer size: 1168000 vbv_delay: N/A
      Stream #0:1: Audio: aac, 48000 Hz, stereo, s16, 128 kb/s (default)
          Metadata:
            encoder        : Lavc61.19.101 libfdk_aac
          Side data:
            cpb: bitrate max/min/avg: 128000/128000/128000 buffer size: 0 vbv_delay: N/A


    Attached Files Thumbnail(s)
           
    Rastin
    Offline

    Member

    Posts: 72
    Threads: 0
    Joined: 2026 Jan
    Reputation: 5
    #2
    2026-02-13, 02:13 AM
    Since no one responded and i myself have no idea i ran your question through an AI and this is what it came up with maybe it will help.



    Short version: your video is hardware-accelerated, but your audio is not, and on a 4-thread CPU like the Intel N150 that alone can saturate the box — especially when multiple streams stack.

    Let’s break it down.

    ✅ What’s Working

    From your ffmpeg command:

    -hwaccel qsv
    -c:v h264_qsv
    -vf vpp_qsv=...


    And from the logs:

    Video: h264, qsv(...)
    encoder: h264_qsv


    That confirms:

    Decode → QSV

    Scale (vpp_qsv) → QSV

    Encode → QSV

    So video is fully hardware accelerated. Good.

    Your GPU showing activity in intel_gpu_top confirms this.

    🚨 What’s Killing Your CPU

    This line:

    -codec:a:0 libfdk_aac


    That is pure software AAC encoding.

    Your source audio:

    eac3 5.1 640kbps


    Your output:

    aac stereo 128kbps


    And you’re also doing:

    -af "pan=stereo|c0=...|c1=..."


    So each stream is:

    Decoding EAC3 in software

    Mixing 5.1 → stereo in software

    Encoding AAC in software

    On a 4-thread N150, that alone can peg CPU cores.

    💡 Why This Matches Your Symptoms

    You said:

    CPU usage skyrockets to max threads with just one stream

    That makes sense because:

    QSV handles video

    CPU is doing:

    Audio decode

    Downmix

    AAC encode

    HLS muxing

    Network handling

    And when you add a second stream? You’ve doubled audio encoding load — and those small E-cores can’t keep up.

    ⚠️ Important: 292 kbps Video Bitrate

    This also stands out:

    -b:v 292000


    That’s extremely low for 540p. That means Jellyfin is transcoding due to bitrate limits, likely for remote streaming.

    If this is happening on your local network, something is forcing bitrate throttling.

    Check:

    Client quality setting

    Remote bitrate limit

    Reverse proxy limits

    Whether Jellyfin thinks it’s remote

    If local clients direct play, your CPU problem largely disappears.

    🎯 The Most Likely Root Cause

    It’s almost certainly:

    Audio transcoding + downmixing eating your CPU

    On small Intel CPUs, audio encoding is often the real bottleneck — not video.

    🔧 Things You Should Try (In Order)
    1️⃣ Disable Audio Transcoding Temporarily (Test)

    In Jellyfin dashboard:

    Playback → Transcoding

    Set:

    Allow audio transcoding → off

    Test one stream.

    If CPU drops massively → confirmed.

    2️⃣ Allow Direct Play of EAC3

    Most modern clients can direct play EAC3.

    If users are using:

    Android TV

    Apple TV

    Firestick

    Web browsers with modern codecs

    You likely don’t need audio transcoding.

    Check why it’s being forced.

    3️⃣ Remove 5.1 → Stereo Downmix (Huge CPU Saver)

    That pan filter:

    -af "pan=stereo|..."


    Is expensive.

    If clients can accept 5.1 AAC, don’t downmix.

    4️⃣ Try Native AAC Instead of libfdk_aac

    libfdk_aac is high quality but heavier.

    Switching to native ffmpeg AAC reduces CPU load.

    Jellyfin usually chooses automatically, but you can force:

    Dashboard → Playback → Transcoding
    Disable "Enable enhanced AAC encoder"

    Test again.

    5️⃣ Check Subtitle Burn-In

    You have SRT subtitles.

    If subtitles are being burned into video:

    That forces full video software pipeline.

    Even with QSV decode.

    But in your log I see:

    -map -0:s


    So subtitles are NOT being burned. Good.

    📊 What an N100/N150 Should Actually Handle

    Realistic expectations:

    With QSV working:

    3–5 simultaneous 1080p → 1080p

    4–6 simultaneous 1080p → 720p

    Tons of direct play

    But:

    Multiple audio transcodes

    Multiple downmix filters

    HLS segmentation

    Docker overhead

    That changes things.

    🐳 Important Docker Check

    Make sure you’re running with:

    --device /dev/driConfused-facedev/dri


    And NOT limiting CPU cores via Docker.

    Run:

    docker inspect <container>


    Check:

    CPUQuota

    CpusetCpus

    If Docker only exposes 2 cores, that explains everything.

    🧠 One More Subtle Thing

    You’re using:

    -threads 3


    On a 4-thread CPU.

    That means ffmpeg is grabbing almost all threads for one stream.

    When a second stream starts:

    Context switching explodes

    System becomes unresponsive

    You can limit threads per transcode in Jellyfin:

    Dashboard → Playback → Transcoding → Max simultaneous video transcodes

    Try setting it to 1 or 2.

    🔥 What I Would Do If This Were My Box

    On an N150:

    Ensure local users direct play

    Disable audio transcoding unless absolutely required

    Disable enhanced AAC encoder

    Set max transcodes to 2

    Keep remote bitrate reasonable (4–6 Mbps minimum)

    That alone would stabilize the system.

    🚀 If You Want Deeper Debug

    Run during a transcode:

    htop


    Check:

    Which process is pegging CPU?

    Is it ffmpeg?

    Are all cores 100%?

    Then run:

    intel_gpu_top


    If GPU usage is low but CPU high → audio bottleneck confirmed.

    💬 A Couple Questions (Important)

    Are the heavy streams local or remote?

    What clients are people using?

    Does CPU spike even if you disable downmix?

    How much RAM does the mini-pc have?

    Those answers will narrow this instantly.

    You’re actually very close — your hardware acceleration is working.

    This smells like audio transcoding + thread saturation, not broken QSV.

    Reply with those answers and I’ll help you tune it properly.
    CauliflowerBrain
    Offline

    Junior Member

    Posts: 2
    Threads: 1
    Joined: 2026 Feb
    Reputation: 0
    Country:Australia
    #3
    2026-02-15, 04:35 AM
    @Rastin, thanks for responding. Some good and some bad advice in there (as typical of AI) but I'm giving it a shot and seeing if there is anything that is going to work. I don't think it's making a massive difference so far but I'll keep trying.
    If anyone else comes across this post and has any thoughts please feel free to send them over
    « Next Oldest | Next Newest »

    Users browsing this thread: 2 Guest(s)


    • View a Printable Version
    • Subscribe to this thread
    Forum Jump:

    Home · Team · Help · Contact
    © Designed by D&D - Powered by MyBB
    L


    Jellyfin

    The Free Software Media System

    Linear Mode
    Threaded Mode