Never-ending transcoding with high CPU usage #7934

Closed
opened 2026-02-05 13:25:27 +03:00 by OVERLORD · 1 comment
Owner

Originally created by @qdrop17 on GitHub (Nov 26, 2025).

I have searched the existing issues, both open and closed, to make sure this is not a duplicate report.

  • Yes

The bug

Trying to transcode the remaining missing videos is causing sustained high CPU load without ever reaching completion. The server fans ramp up, but the process appears to hang. Hardware transcoding is otherwise functioning correctly in other Docker containers on the same host.

The OS that Immich Server is running on

Proxmox -> LXD -> Docker Container

Version of Immich Server

v2.3.1

Version of Immich Mobile App

v2.3.1

Platform with the issue

  • Server
  • Web
  • Mobile

Device make and model

No response

Your docker-compose.yml content

#
# WARNING: To install Immich, follow our guide: https://docs.immich.app/install/docker-compose
#
# Make sure to use the docker-compose.yml of the current release:
#
# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
#
# The compose file on main may not be compatible with the latest release.

name: immich

services:
  immich-server:
    container_name: qdrop-immich
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    volumes:
      # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
      - ${UPLOAD_LOCATION}:/data
      - /etc/localtime:/etc/localtime:ro
    networks:
      - nginx-reverse-proxy-internal
      - immich-internal
    env_file:
      - .env
    depends_on:
      - redis
      - database
    devices:
      - /dev/dri/renderD128:/dev/dri/renderD128
    restart: always
    healthcheck:
      disable: false

  immich-machine-learning:
    container_name: immich_machine_learning
    # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
    # Example tag: ${IMMICH_VERSION:-release}-cuda
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    # extends: # uncomment this section for hardware acceleration - see https://docs.immich.app/features/ml-hardware-acceleration
    #   file: hwaccel.ml.yml
    #   service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
    volumes:
      - model-cache:/cache
    networks:
      - immich-internal
    env_file:
      - .env
    restart: always
    healthcheck:
      disable: false

  redis:
    container_name: immich_redis
    image: docker.io/valkey/valkey:8-bookworm@sha256:fea8b3e67b15729d4bb70589eb03367bab9ad1ee89c876f54327fc7c6e618571
    networks:
      - immich-internal
    healthcheck:
      test: redis-cli ping || exit 1
    restart: always

  database:
    container_name: immich_postgres
    image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:41eacbe83eca995561fe43814fd4891e16e39632806253848efaf04d3c8a8b84
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: '--data-checksums'
      # Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs
      # DB_STORAGE_TYPE: 'HDD'
    volumes:
      # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    networks:
      - immich-internal
    shm_size: 128mb
    restart: always

volumes:
  model-cache:

networks:
  immich-internal:
    # This is an internal network for inter-service communication
    name: immich-internal
  nginx-reverse-proxy-internal:
     name: nginx-reverse-proxy-internal
     external: true

Your .env content

# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables

# The location where your uploaded files are stored
UPLOAD_LOCATION=/mnt/immich/library

# The location where your database files are stored. Network shares are not supported for the database
DB_DATA_LOCATION=/mnt/immich/postgres

# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
TZ=Europe/Zurich

# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=release

# Connection secret for postgres. You should change it to a random password
# Please use only the characters `A-Za-z0-9`, without special characters or spaces
DB_PASSWORD=xxx

# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

Reproduction steps

  1. Start Immich Container
  2. Browse to Administration -> Jobs -> Transcode videos
  3. Click "Missing" in order to transcode missiong videos
  4. Observe 100% cpu load for days without any end

Relevant log output

Executing this command inside the container, leads to this output:

root@05f96806f3e6:/data/library/admin/2022/08# ffmpeg -hwaccel vaapi -hwaccel_output_format vaapi -noautorotate -hwaccel_device /dev/dri/renderD128 -threads 1 -i /data/library/admin/2022/08/20220806_210516.mp4 -y -c:v h264_vaapi -c:a aac -movflags faststart -fps_mode passthrough -map 0:0 -map_metadata -1 -map 0:1 -g 256 -v verbose -vf scale_vaapi=-2:720:mode=hq:out_range=pc -compression_level 7 -qp:v 23 -global_quality:v 23 -rc_mode 1 4333a090-7cf4-4a33-a7d4-90f621067fc0.mp4
ffmpeg version 7.1.1-Jellyfin Copyright (c) 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
[h264 @ 0x64a9c71bc340] Reinit context to 1920x1088, pix_fmt: yuv420p
Selecting decoder 'h264' because of requested hwaccel method vaapi
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/data/library/admin/2022/08/20220806_210516.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2022-08-06T19:05:51.000000Z
    location        : +47.6955+008.6334/
    location-eng    : +47.6955+008.6334/
    com.android.version: 12
    com.android.capture.fps: 60.000000
  Duration: 00:00:34.69, start: 0.000000, bitrate: 22149 kb/s
  Stream #0:0[0x1](eng): Video: h264 (High), 1 reference frame (avc1 / 0x31637661), yuv420p(tv, bt709, progressive, left), 1920x1080, 21887 kb/s, 59.93 fps, 59.94 tbr, 90k tbn (default)
      Metadata:
        creation_time   : 2022-08-06T19:05:51.000000Z
        handler_name    : VideoHandle
        vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 256 kb/s (default)
      Metadata:
        creation_time   : 2022-08-06T19:05:51.000000Z
        handler_name    : SoundHandle
        vendor_id       : [0][0][0][0]
[out#0/mp4 @ 0x64a9c71c2200] Adding streams from explicit maps...
[vost#0:0/h264_vaapi @ 0x64a9c7204ac0] Created video stream from input stream 0:0
[AVHWDeviceContext @ 0x64a9c721af80] libva: VA-API version 1.22.0
[AVHWDeviceContext @ 0x64a9c721af80] libva: Trying to open /usr/lib/jellyfin-ffmpeg/lib/dri/radeonsi_drv_video.so
[AVHWDeviceContext @ 0x64a9c721af80] libva: Found init function __vaDriverInit_1_22
amdgpu: os_same_file_description couldn't determine if two DRM fds reference the same file description.
If they do, bad things may happen!
[AVHWDeviceContext @ 0x64a9c721af80] libva: va_openDriver() returns 0
[AVHWDeviceContext @ 0x64a9c721af80] Initialised VAAPI connection: version 1.22
[AVHWDeviceContext @ 0x64a9c721af80] VAAPI driver: Mesa Gallium driver 25.0.7 for AMD Radeon Graphics (radeonsi, phoenix, ACO, DRM 3.64, 6.17.2-1-pve).
[AVHWDeviceContext @ 0x64a9c721af80] Driver not found in known nonstandard list, using standard behaviour.
[aost#0:1/aac @ 0x64a9c7203840] Created audio stream from input stream 0:1
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (h264_vaapi))
  Stream #0:1 -> #0:1 (aac (native) -> aac (native))
[vost#0:0/h264_vaapi @ 0x64a9c7204ac0] Starting thread...
[aost#0:1/aac @ 0x64a9c7203840] Starting thread...
[vf#0:0 @ 0x64a9c7202500] Starting thread...
[af#0:1 @ 0x64a9c71c04c0] Starting thread...
[vist#0:0/h264 @ 0x64a9c7298f80] [dec:h264 @ 0x64a9c71c0100] Starting thread...
[aist#0:1/aac @ 0x64a9c720b780] [dec:aac @ 0x64a9c7579a00] Starting thread...
[in#0/mov,mp4,m4a,3gp,3g2,mj2 @ 0x64a9c71ba940] Starting thread...
Press [q] to stop, [?] for help
[graph_-1_in_0:1 @ 0x754cb8002880] tb:1/48000 samplefmt:fltp samplerate:48000 chlayout:stereo
[h264 @ 0x64a9c720f200] Reinit context to 1920x1088, pix_fmt: vaapi
[graph -1 input from stream 0:0 @ 0x754cb4002c40] w:1920 h:1080 pixfmt:vaapi tb:1/90000 fr:60000/1001 sar:0/1 csp:bt709 range:tv
[graph -1 input from stream 0:0 @ 0x754cb4002c40] video frame properties congruent with link at pts_time: 0
[h264_vaapi @ 0x64a9c71c2c40] Using input frames context (format vaapi) with h264_vaapi encoder.
[h264_vaapi @ 0x64a9c71c2c40] Input surface format is nv12.
[h264_vaapi @ 0x64a9c71c2c40] Using VAAPI profile VAProfileH264High (7).
[h264_vaapi @ 0x64a9c71c2c40] Using VAAPI entrypoint VAEntrypointEncSlice (6).
[h264_vaapi @ 0x64a9c71c2c40] Using VAAPI render target format YUV420 (0x1).
[h264_vaapi @ 0x64a9c71c2c40] RC mode: CQP.
[h264_vaapi @ 0x64a9c71c2c40] Block Level bitrate control: OFF.
[h264_vaapi @ 0x64a9c71c2c40] RC quality: 23.
[h264_vaapi @ 0x64a9c71c2c40] RC framerate: 60000/1001 (59.94 fps).
[h264_vaapi @ 0x64a9c71c2c40] Driver does not report any additional prediction constraints.
[h264_vaapi @ 0x64a9c71c2c40] Using intra, P- and B-frames (supported references: 1 / 1).
[h264_vaapi @ 0x64a9c71c2c40] All wanted packed headers available (wanted 0xd, found 0x1f).
[h264_vaapi @ 0x64a9c71c2c40] Using level 3.2.
Output #0, mp4, to '4333a090-7cf4-4a33-a7d4-90f621067fc0.mp4':
  Metadata:
    encoder         : Lavf61.7.100
  Stream #0:0: Video: h264 (High), 1 reference frame (avc1 / 0x31637661), vaapi(pc, bt709, progressive, left), 1280x720, q=2-31, 59.94 fps, 60k tbn (default)
      Metadata:
        encoder         : Lavc61.19.101 h264_vaapi
  Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, delay 1024, 128 kb/s (default)
      Metadata:
        encoder         : Lavc61.19.101 aac
[out#0/mp4 @ 0x64a9c71c2200] Starting thread...
frame=    0 fps=0.0 q=0.0 size=       0KiB time=N/A bitrate=N/A speed=N/A

...with another thread consuming 100% cpu.

Just transcoding the file is working as intended:

root@05f96806f3e6:/data/library/admin/2022/08# ffmpeg -hwaccel vaapi -hwaccel_output_format vaapi -vaapi_device /dev/dri/renderD128 -i 20220806_210516.mp4 -c:v h264_vaapi -b:v 5M -c:a copy output_20220806.mp4
ffmpeg version 7.1.1-Jellyfin Copyright (c) 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
amdgpu: os_same_file_description couldn't determine if two DRM fds reference the same file description.
If they do, bad things may happen!
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '20220806_210516.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2022-08-06T19:05:51.000000Z
    location        : +47.6955+008.6334/
    location-eng    : +47.6955+008.6334/
    com.android.version: 12
    com.android.capture.fps: 60.000000
  Duration: 00:00:34.69, start: 0.000000, bitrate: 22149 kb/s
  Stream #0:0[0x1](eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080, 21887 kb/s, 59.93 fps, 59.94 tbr, 90k tbn (default)
      Metadata:
        creation_time   : 2022-08-06T19:05:51.000000Z
        handler_name    : VideoHandle
        vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 256 kb/s (default)
      Metadata:
        creation_time   : 2022-08-06T19:05:51.000000Z
        handler_name    : SoundHandle
        vendor_id       : [0][0][0][0]
File 'output_20220806.mp4' already exists. Overwrite? [y/N] y
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (h264_vaapi))
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
Output #0, mp4, to 'output_20220806.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    com.android.capture.fps: 60.000000
    location        : +47.6955+008.6334/
    location-eng    : +47.6955+008.6334/
    com.android.version: 12
    encoder         : Lavf61.7.100
  Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), vaapi(tv, bt709, progressive), 1920x1080, q=2-31, 5000 kb/s, 59.94 fps, 60k tbn (default)
      Metadata:
        creation_time   : 2022-08-06T19:05:51.000000Z
        handler_name    : VideoHandle
        vendor_id       : [0][0][0][0]
        encoder         : Lavc61.19.101 h264_vaapi
  Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 256 kb/s (default)
      Metadata:
        creation_time   : 2022-08-06T19:05:51.000000Z
        handler_name    : SoundHandle
        vendor_id       : [0][0][0][0]
[out#0/mp4 @ 0x6182ed3ba540] video:21041KiB audio:1082KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: 0.228931%
frame= 2077 fps=313 q=-0.0 Lsize=   22173KiB time=00:00:34.66 bitrate=5239.9kbits/s dup=0 drop=2 speed=5.23x

Additional information

I suspect a command-level issue, since hardware transcoding (Radeon iGPU) works fine in my other deployments. Although most videos were transcoded successfully, 16 failed. The process didn't fall back to CPU for these files; it just hung.

Originally created by @qdrop17 on GitHub (Nov 26, 2025). ### I have searched the existing issues, both open and closed, to make sure this is not a duplicate report. - [x] Yes ### The bug Trying to transcode the remaining missing videos is causing sustained high CPU load without ever reaching completion. The server fans ramp up, but the process appears to hang. Hardware transcoding is otherwise functioning correctly in other Docker containers on the same host. ### The OS that Immich Server is running on Proxmox -> LXD -> Docker Container ### Version of Immich Server v2.3.1 ### Version of Immich Mobile App v2.3.1 ### Platform with the issue - [x] Server - [ ] Web - [ ] Mobile ### Device make and model _No response_ ### Your docker-compose.yml content ```YAML # # WARNING: To install Immich, follow our guide: https://docs.immich.app/install/docker-compose # # Make sure to use the docker-compose.yml of the current release: # # https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml # # The compose file on main may not be compatible with the latest release. name: immich services: immich-server: container_name: qdrop-immich image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} volumes: # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file - ${UPLOAD_LOCATION}:/data - /etc/localtime:/etc/localtime:ro networks: - nginx-reverse-proxy-internal - immich-internal env_file: - .env depends_on: - redis - database devices: - /dev/dri/renderD128:/dev/dri/renderD128 restart: always healthcheck: disable: false immich-machine-learning: container_name: immich_machine_learning # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag. # Example tag: ${IMMICH_VERSION:-release}-cuda image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release} # extends: # uncomment this section for hardware acceleration - see https://docs.immich.app/features/ml-hardware-acceleration # file: hwaccel.ml.yml # service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable volumes: - model-cache:/cache networks: - immich-internal env_file: - .env restart: always healthcheck: disable: false redis: container_name: immich_redis image: docker.io/valkey/valkey:8-bookworm@sha256:fea8b3e67b15729d4bb70589eb03367bab9ad1ee89c876f54327fc7c6e618571 networks: - immich-internal healthcheck: test: redis-cli ping || exit 1 restart: always database: container_name: immich_postgres image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:41eacbe83eca995561fe43814fd4891e16e39632806253848efaf04d3c8a8b84 environment: POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_USER: ${DB_USERNAME} POSTGRES_DB: ${DB_DATABASE_NAME} POSTGRES_INITDB_ARGS: '--data-checksums' # Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs # DB_STORAGE_TYPE: 'HDD' volumes: # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file - ${DB_DATA_LOCATION}:/var/lib/postgresql/data networks: - immich-internal shm_size: 128mb restart: always volumes: model-cache: networks: immich-internal: # This is an internal network for inter-service communication name: immich-internal nginx-reverse-proxy-internal: name: nginx-reverse-proxy-internal external: true ``` ### Your .env content ```Shell # You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables # The location where your uploaded files are stored UPLOAD_LOCATION=/mnt/immich/library # The location where your database files are stored. Network shares are not supported for the database DB_DATA_LOCATION=/mnt/immich/postgres # To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List TZ=Europe/Zurich # The Immich version to use. You can pin this to a specific version like "v1.71.0" IMMICH_VERSION=release # Connection secret for postgres. You should change it to a random password # Please use only the characters `A-Za-z0-9`, without special characters or spaces DB_PASSWORD=xxx # The values below this line do not need to be changed ################################################################################### DB_USERNAME=postgres DB_DATABASE_NAME=immich ``` ### Reproduction steps 1. Start Immich Container 2. Browse to Administration -> Jobs -> Transcode videos 3. Click "Missing" in order to transcode missiong videos 4. Observe 100% cpu load for days without any end ### Relevant log output ```shell Executing this command inside the container, leads to this output: root@05f96806f3e6:/data/library/admin/2022/08# ffmpeg -hwaccel vaapi -hwaccel_output_format vaapi -noautorotate -hwaccel_device /dev/dri/renderD128 -threads 1 -i /data/library/admin/2022/08/20220806_210516.mp4 -y -c:v h264_vaapi -c:a aac -movflags faststart -fps_mode passthrough -map 0:0 -map_metadata -1 -map 0:1 -g 256 -v verbose -vf scale_vaapi=-2:720:mode=hq:out_range=pc -compression_level 7 -qp:v 23 -global_quality:v 23 -rc_mode 1 4333a090-7cf4-4a33-a7d4-90f621067fc0.mp4 ffmpeg version 7.1.1-Jellyfin Copyright (c) 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 [h264 @ 0x64a9c71bc340] Reinit context to 1920x1088, pix_fmt: yuv420p Selecting decoder 'h264' because of requested hwaccel method vaapi Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/data/library/admin/2022/08/20220806_210516.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 creation_time : 2022-08-06T19:05:51.000000Z location : +47.6955+008.6334/ location-eng : +47.6955+008.6334/ com.android.version: 12 com.android.capture.fps: 60.000000 Duration: 00:00:34.69, start: 0.000000, bitrate: 22149 kb/s Stream #0:0[0x1](eng): Video: h264 (High), 1 reference frame (avc1 / 0x31637661), yuv420p(tv, bt709, progressive, left), 1920x1080, 21887 kb/s, 59.93 fps, 59.94 tbr, 90k tbn (default) Metadata: creation_time : 2022-08-06T19:05:51.000000Z handler_name : VideoHandle vendor_id : [0][0][0][0] Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 256 kb/s (default) Metadata: creation_time : 2022-08-06T19:05:51.000000Z handler_name : SoundHandle vendor_id : [0][0][0][0] [out#0/mp4 @ 0x64a9c71c2200] Adding streams from explicit maps... [vost#0:0/h264_vaapi @ 0x64a9c7204ac0] Created video stream from input stream 0:0 [AVHWDeviceContext @ 0x64a9c721af80] libva: VA-API version 1.22.0 [AVHWDeviceContext @ 0x64a9c721af80] libva: Trying to open /usr/lib/jellyfin-ffmpeg/lib/dri/radeonsi_drv_video.so [AVHWDeviceContext @ 0x64a9c721af80] libva: Found init function __vaDriverInit_1_22 amdgpu: os_same_file_description couldn't determine if two DRM fds reference the same file description. If they do, bad things may happen! [AVHWDeviceContext @ 0x64a9c721af80] libva: va_openDriver() returns 0 [AVHWDeviceContext @ 0x64a9c721af80] Initialised VAAPI connection: version 1.22 [AVHWDeviceContext @ 0x64a9c721af80] VAAPI driver: Mesa Gallium driver 25.0.7 for AMD Radeon Graphics (radeonsi, phoenix, ACO, DRM 3.64, 6.17.2-1-pve). [AVHWDeviceContext @ 0x64a9c721af80] Driver not found in known nonstandard list, using standard behaviour. [aost#0:1/aac @ 0x64a9c7203840] Created audio stream from input stream 0:1 Stream mapping: Stream #0:0 -> #0:0 (h264 (native) -> h264 (h264_vaapi)) Stream #0:1 -> #0:1 (aac (native) -> aac (native)) [vost#0:0/h264_vaapi @ 0x64a9c7204ac0] Starting thread... [aost#0:1/aac @ 0x64a9c7203840] Starting thread... [vf#0:0 @ 0x64a9c7202500] Starting thread... [af#0:1 @ 0x64a9c71c04c0] Starting thread... [vist#0:0/h264 @ 0x64a9c7298f80] [dec:h264 @ 0x64a9c71c0100] Starting thread... [aist#0:1/aac @ 0x64a9c720b780] [dec:aac @ 0x64a9c7579a00] Starting thread... [in#0/mov,mp4,m4a,3gp,3g2,mj2 @ 0x64a9c71ba940] Starting thread... Press [q] to stop, [?] for help [graph_-1_in_0:1 @ 0x754cb8002880] tb:1/48000 samplefmt:fltp samplerate:48000 chlayout:stereo [h264 @ 0x64a9c720f200] Reinit context to 1920x1088, pix_fmt: vaapi [graph -1 input from stream 0:0 @ 0x754cb4002c40] w:1920 h:1080 pixfmt:vaapi tb:1/90000 fr:60000/1001 sar:0/1 csp:bt709 range:tv [graph -1 input from stream 0:0 @ 0x754cb4002c40] video frame properties congruent with link at pts_time: 0 [h264_vaapi @ 0x64a9c71c2c40] Using input frames context (format vaapi) with h264_vaapi encoder. [h264_vaapi @ 0x64a9c71c2c40] Input surface format is nv12. [h264_vaapi @ 0x64a9c71c2c40] Using VAAPI profile VAProfileH264High (7). [h264_vaapi @ 0x64a9c71c2c40] Using VAAPI entrypoint VAEntrypointEncSlice (6). [h264_vaapi @ 0x64a9c71c2c40] Using VAAPI render target format YUV420 (0x1). [h264_vaapi @ 0x64a9c71c2c40] RC mode: CQP. [h264_vaapi @ 0x64a9c71c2c40] Block Level bitrate control: OFF. [h264_vaapi @ 0x64a9c71c2c40] RC quality: 23. [h264_vaapi @ 0x64a9c71c2c40] RC framerate: 60000/1001 (59.94 fps). [h264_vaapi @ 0x64a9c71c2c40] Driver does not report any additional prediction constraints. [h264_vaapi @ 0x64a9c71c2c40] Using intra, P- and B-frames (supported references: 1 / 1). [h264_vaapi @ 0x64a9c71c2c40] All wanted packed headers available (wanted 0xd, found 0x1f). [h264_vaapi @ 0x64a9c71c2c40] Using level 3.2. Output #0, mp4, to '4333a090-7cf4-4a33-a7d4-90f621067fc0.mp4': Metadata: encoder : Lavf61.7.100 Stream #0:0: Video: h264 (High), 1 reference frame (avc1 / 0x31637661), vaapi(pc, bt709, progressive, left), 1280x720, q=2-31, 59.94 fps, 60k tbn (default) Metadata: encoder : Lavc61.19.101 h264_vaapi Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, delay 1024, 128 kb/s (default) Metadata: encoder : Lavc61.19.101 aac [out#0/mp4 @ 0x64a9c71c2200] Starting thread... frame= 0 fps=0.0 q=0.0 size= 0KiB time=N/A bitrate=N/A speed=N/A ...with another thread consuming 100% cpu. Just transcoding the file is working as intended: root@05f96806f3e6:/data/library/admin/2022/08# ffmpeg -hwaccel vaapi -hwaccel_output_format vaapi -vaapi_device /dev/dri/renderD128 -i 20220806_210516.mp4 -c:v h264_vaapi -b:v 5M -c:a copy output_20220806.mp4 ffmpeg version 7.1.1-Jellyfin Copyright (c) 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 amdgpu: os_same_file_description couldn't determine if two DRM fds reference the same file description. If they do, bad things may happen! Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '20220806_210516.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 creation_time : 2022-08-06T19:05:51.000000Z location : +47.6955+008.6334/ location-eng : +47.6955+008.6334/ com.android.version: 12 com.android.capture.fps: 60.000000 Duration: 00:00:34.69, start: 0.000000, bitrate: 22149 kb/s Stream #0:0[0x1](eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080, 21887 kb/s, 59.93 fps, 59.94 tbr, 90k tbn (default) Metadata: creation_time : 2022-08-06T19:05:51.000000Z handler_name : VideoHandle vendor_id : [0][0][0][0] Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 256 kb/s (default) Metadata: creation_time : 2022-08-06T19:05:51.000000Z handler_name : SoundHandle vendor_id : [0][0][0][0] File 'output_20220806.mp4' already exists. Overwrite? [y/N] y Stream mapping: Stream #0:0 -> #0:0 (h264 (native) -> h264 (h264_vaapi)) Stream #0:1 -> #0:1 (copy) Press [q] to stop, [?] for help Output #0, mp4, to 'output_20220806.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 com.android.capture.fps: 60.000000 location : +47.6955+008.6334/ location-eng : +47.6955+008.6334/ com.android.version: 12 encoder : Lavf61.7.100 Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), vaapi(tv, bt709, progressive), 1920x1080, q=2-31, 5000 kb/s, 59.94 fps, 60k tbn (default) Metadata: creation_time : 2022-08-06T19:05:51.000000Z handler_name : VideoHandle vendor_id : [0][0][0][0] encoder : Lavc61.19.101 h264_vaapi Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 256 kb/s (default) Metadata: creation_time : 2022-08-06T19:05:51.000000Z handler_name : SoundHandle vendor_id : [0][0][0][0] [out#0/mp4 @ 0x6182ed3ba540] video:21041KiB audio:1082KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: 0.228931% frame= 2077 fps=313 q=-0.0 Lsize= 22173KiB time=00:00:34.66 bitrate=5239.9kbits/s dup=0 drop=2 speed=5.23x ``` ### Additional information I suspect a command-level issue, since hardware transcoding (Radeon iGPU) works fine in my other deployments. Although most videos were transcoded successfully, 16 failed. The process didn't fall back to CPU for these files; it just hung.
Author
Owner

@MonkeySon commented on GitHub (Nov 26, 2025):

I occasionally run into this problem as well, with a Radeon iGPU HW transcoding setup.

Likely, this is a related (and unfortunately: yet unsolved) issue: https://github.com/immich-app/immich/issues/10560

@MonkeySon commented on GitHub (Nov 26, 2025): I occasionally run into this problem as well, with a Radeon iGPU HW transcoding setup. Likely, this is a related (and unfortunately: yet unsolved) issue: https://github.com/immich-app/immich/issues/10560
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: immich-app/immich#7934