Transcoding failing for videos from Samsung S23 Ultra #4359

Closed
opened 2026-02-05 10:14:39 +03:00 by OVERLORD · 5 comments
Owner

Originally created by @ryanwinter on GitHub (Sep 19, 2024).

The bug

Transcoding is failing for many videos in my library (around 4000).

It appears that the video files is missing some Matrix coefficients needed by the x265 encoder.

The OS that Immich Server is running on

Ubuntu

Version of Immich Server

v1.115.0

Version of Immich Mobile App

v1.115.0

Platform with the issue

  • Server
  • Web
  • Mobile

Your docker-compose.yml content

services:
  immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:release
    restart: unless-stopped
    volumes:
      - /mnt/truenas_immich:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    environment:
      DB_PASSWORD: ${DB_PASSWORD}
      DB_USERNAME: ${DB_USERNAME}
      DB_DATABASE_NAME: ${DB_DATABASE_NAME}
    ports:
      - 2283:3001
    depends_on:
      - redis
      - database
    labels:
      - "com.centurylinklabs.watchtower.enable=false"       
    healthcheck:
      disable: false

  immich-machine-learning:
    container_name: immich_machine_learning
    image: ghcr.io/immich-app/immich-machine-learning:release
    restart: unless-stopped
    volumes:
      - /volumes_tmp/immich/model-cache:/cache
    labels:
      - "com.centurylinklabs.watchtower.enable=false"       
    healthcheck:
      disable: false

  redis:
    container_name: immich_redis
    image: docker.io/redis:6.2-alpine@sha256:2d1463258f2764328496376f5d965f20c6a67f66ea2b06dc42af351f75248792
    restart: unless-stopped
    volumes:
      - /volumes_tmp/immich/redis:/data
    labels:
      - "com.centurylinklabs.watchtower.enable=false"       
    healthcheck:
      test: redis-cli ping || exit 1

  database:
    container_name: immich_postgres
    image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
    restart: unless-stopped
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: '--data-checksums'
    volumes:
      - postgres:/var/lib/postgresql/data
    labels:
      - "com.centurylinklabs.watchtower.enable=false"   
    healthcheck:
      test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1
      interval: 5m
      start_interval: 30s
      start_period: 5m
    command: ["postgres", "-c", "shared_preload_libraries=vectors.so", "-c", 'search_path="$$user", public, vectors', "-c", "logging_collector=on", "-c", "max_wal_size=2GB", "-c", "shared_buffers=512MB", "-c", "wal_compression=on"]

volumes:
  postgres:

Your .env content

DB_USERNAME=xxx
DB_DATABASE_NAME=xxx
DB_PASSWORD=xxx

Reproduction steps

  1. Upload file from the my Samsung S23 Ultra
  2. Setup transcoding to hvec/aac
  3. Observe failure to create video thumbnail

Relevant log output

[Nest] 7  - 09/18/2024, 9:50:34 PM     LOG [Microservices:MediaService] Started encoding video ee37fb27-d9e6-42cb-a12f-d27611102032 {"inputOptions":[],"outputOptions":["-c:v hevc","-c:a copy","-movflags faststart","-fps_mode passthrough","-map 0:0","-strict unofficial","-map 0:1","-tag:v hvc1","-v verbose","-vf scale=480:-2,format=yuv420p","-preset superfast","-crf 30"],"twoPass":false}
[Nest] 7  - 09/18/2024, 9:50:34 PM   ERROR [Microservices:MediaRepository] ffmpeg version 6.0.1-Jellyfin Copyright (c) 2000-2023 the FFmpeg developers
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
[vost#0:0 @ 0x31f04172b80] Matched encoder 'libx265' for codec 'hevc'.
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> hevc (libx265))
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[h264 @ 0x31f04152580] Reinit context to 1088x1920, pix_fmt: yuv420p
[Parsed_scale_0 @ 0x31f04161680] w:480 h:-2 flags:'' interl:0
[graph 0 input from stream 0:0 @ 0x31f04120980] w:1080 h:1920 pixfmt:yuv420p tb:1/1000000 fr:30/1 sar:0/1
[Parsed_scale_0 @ 0x31f04161680] w:1080 h:1920 fmt:yuv420p sar:0/1 -> w:480 h:854 fmt:yuv420p sar:0/1 flags:0x00000004
x265 [info]: HEVC encoder version 3.5+1-f0c1022b6
x265 [info]: build info [Linux][GCC 12.2.0][64 bit] 8bit+10bit+12bit
x265 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
x265 [error]: Matrix Coefficients must be unknown, bt709, fcc, bt470bg, smpte170m, smpte240m, gbr, ycgco, bt2020nc, bt2020c, smpte-st-2085, chroma-nc, chroma-c or ictcp
    Last message repeated 3 times
[libx265 @ 0x31f04151180] Cannot open libx265 encoder.
[vost#0:0/libx265 @ 0x31f04172b80] Error initializing output stream: Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height

Additional information

No response

Originally created by @ryanwinter on GitHub (Sep 19, 2024). ### The bug Transcoding is failing for many videos in my library (around 4000). It appears that the video files is missing some Matrix coefficients needed by the x265 encoder. ### The OS that Immich Server is running on Ubuntu ### Version of Immich Server v1.115.0 ### Version of Immich Mobile App v1.115.0 ### Platform with the issue - [X] Server - [ ] Web - [ ] Mobile ### Your docker-compose.yml content ```YAML services: immich-server: container_name: immich_server image: ghcr.io/immich-app/immich-server:release restart: unless-stopped volumes: - /mnt/truenas_immich:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro environment: DB_PASSWORD: ${DB_PASSWORD} DB_USERNAME: ${DB_USERNAME} DB_DATABASE_NAME: ${DB_DATABASE_NAME} ports: - 2283:3001 depends_on: - redis - database labels: - "com.centurylinklabs.watchtower.enable=false" healthcheck: disable: false immich-machine-learning: container_name: immich_machine_learning image: ghcr.io/immich-app/immich-machine-learning:release restart: unless-stopped volumes: - /volumes_tmp/immich/model-cache:/cache labels: - "com.centurylinklabs.watchtower.enable=false" healthcheck: disable: false redis: container_name: immich_redis image: docker.io/redis:6.2-alpine@sha256:2d1463258f2764328496376f5d965f20c6a67f66ea2b06dc42af351f75248792 restart: unless-stopped volumes: - /volumes_tmp/immich/redis:/data labels: - "com.centurylinklabs.watchtower.enable=false" healthcheck: test: redis-cli ping || exit 1 database: container_name: immich_postgres image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0 restart: unless-stopped environment: POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_USER: ${DB_USERNAME} POSTGRES_DB: ${DB_DATABASE_NAME} POSTGRES_INITDB_ARGS: '--data-checksums' volumes: - postgres:/var/lib/postgresql/data labels: - "com.centurylinklabs.watchtower.enable=false" healthcheck: test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1 interval: 5m start_interval: 30s start_period: 5m command: ["postgres", "-c", "shared_preload_libraries=vectors.so", "-c", 'search_path="$$user", public, vectors', "-c", "logging_collector=on", "-c", "max_wal_size=2GB", "-c", "shared_buffers=512MB", "-c", "wal_compression=on"] volumes: postgres: ``` ### Your .env content ```Shell DB_USERNAME=xxx DB_DATABASE_NAME=xxx DB_PASSWORD=xxx ``` ### Reproduction steps 1. Upload file from the my Samsung S23 Ultra 2. Setup transcoding to hvec/aac 3. Observe failure to create video thumbnail ### Relevant log output ```shell [Nest] 7 - 09/18/2024, 9:50:34 PM LOG [Microservices:MediaService] Started encoding video ee37fb27-d9e6-42cb-a12f-d27611102032 {"inputOptions":[],"outputOptions":["-c:v hevc","-c:a copy","-movflags faststart","-fps_mode passthrough","-map 0:0","-strict unofficial","-map 0:1","-tag:v hvc1","-v verbose","-vf scale=480:-2,format=yuv420p","-preset superfast","-crf 30"],"twoPass":false} [Nest] 7 - 09/18/2024, 9:50:34 PM ERROR [Microservices:MediaRepository] ffmpeg version 6.0.1-Jellyfin Copyright (c) 2000-2023 the FFmpeg developers handler_name : SoundHandler vendor_id : [0][0][0][0] [vost#0:0 @ 0x31f04172b80] Matched encoder 'libx265' for codec 'hevc'. Stream mapping: Stream #0:0 -> #0:0 (h264 (native) -> hevc (libx265)) Stream #0:1 -> #0:1 (copy) Press [q] to stop, [?] for help [h264 @ 0x31f04152580] Reinit context to 1088x1920, pix_fmt: yuv420p [Parsed_scale_0 @ 0x31f04161680] w:480 h:-2 flags:'' interl:0 [graph 0 input from stream 0:0 @ 0x31f04120980] w:1080 h:1920 pixfmt:yuv420p tb:1/1000000 fr:30/1 sar:0/1 [Parsed_scale_0 @ 0x31f04161680] w:1080 h:1920 fmt:yuv420p sar:0/1 -> w:480 h:854 fmt:yuv420p sar:0/1 flags:0x00000004 x265 [info]: HEVC encoder version 3.5+1-f0c1022b6 x265 [info]: build info [Linux][GCC 12.2.0][64 bit] 8bit+10bit+12bit x265 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX x265 [error]: Matrix Coefficients must be unknown, bt709, fcc, bt470bg, smpte170m, smpte240m, gbr, ycgco, bt2020nc, bt2020c, smpte-st-2085, chroma-nc, chroma-c or ictcp Last message repeated 3 times [libx265 @ 0x31f04151180] Cannot open libx265 encoder. [vost#0:0/libx265 @ 0x31f04172b80] Error initializing output stream: Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height ``` ### Additional information _No response_
Author
Owner

@alextran1502 commented on GitHub (Sep 19, 2024):

Hello, can you provide the settings of your video transcoding setup? Also, if you can provide a sample video so we can help reproduce, that would be helpful

@alextran1502 commented on GitHub (Sep 19, 2024): Hello, can you provide the settings of your video transcoding setup? Also, if you can provide a sample video so we can help reproduce, that would be helpful
Author
Owner

@ryanwinter commented on GitHub (Sep 19, 2024):

Hello, can you provide the settings of your video transcoding setup? Also, if you can provide a sample video so we can help reproduce, that would be helpful

Hey Alex,

These are my current settings:
CRF: 30
Preset: superfast
Codec: hvec / aac
Target resolution: 480p
Max bitrate: 0
Tone mapping: Hable
Two-pass: off
HW accel: off

You can see the output settings in the log above, but here it is in an easier to consume format :)

{
  "outputOptions": [
    "-c:v hevc",
    "-c:a copy",
    "-movflags faststart",
    "-fps_mode passthrough",
    "-map 0:0",
    "-strict unofficial",
    "-map 0:1",
    "-tag:v hvc1",
    "-v verbose",
    "-vf scale=480:-2,format=yuv420p",
    "-preset superfast",
    "-crf 30"
  ],
  "twoPass": false
}

Let me see if I can find a sample video that doesnt contain any person information. Maybe I can just try recording some new videos. I'll try and attach something tomorrow.,

@ryanwinter commented on GitHub (Sep 19, 2024): > Hello, can you provide the settings of your video transcoding setup? Also, if you can provide a sample video so we can help reproduce, that would be helpful Hey Alex, These are my current settings: CRF: 30 Preset: superfast Codec: hvec / aac Target resolution: 480p Max bitrate: 0 Tone mapping: Hable Two-pass: off HW accel: off You can see the output settings in the log above, but here it is in an easier to consume format :) ``` { "outputOptions": [ "-c:v hevc", "-c:a copy", "-movflags faststart", "-fps_mode passthrough", "-map 0:0", "-strict unofficial", "-map 0:1", "-tag:v hvc1", "-v verbose", "-vf scale=480:-2,format=yuv420p", "-preset superfast", "-crf 30" ], "twoPass": false } ``` Let me see if I can find a sample video that doesnt contain any person information. Maybe I can just try recording some new videos. I'll try and attach something tomorrow.,
Author
Owner

@ryanwinter commented on GitHub (Sep 19, 2024):

Something I noticed, is when I do an ffprobe --show_frames I get the following:

color_range=tv
color_space=reserved
color_primaries=reserved
color_transfer=smpte170m

I assumed reserved is not expected here? If I force the output color space with -colorspace smpte170m or -colorspace unknown at the ffmpeg command line, then it completes as expected.

@ryanwinter commented on GitHub (Sep 19, 2024): Something I noticed, is when I do an `ffprobe --show_frames` I get the following: ``` color_range=tv color_space=reserved color_primaries=reserved color_transfer=smpte170m ``` I assumed `reserved` is not expected here? If I force the output color space with `-colorspace smpte170m` or `-colorspace unknown` at the ffmpeg command line, then it completes as expected.
Author
Owner

@ryanwinter commented on GitHub (Sep 26, 2024):

Just update that I'm still looking into this. All new videos are encoding successfully, so now I'm wondering where the failing videos came from. Its possible they were an output from some editing program.

@ryanwinter commented on GitHub (Sep 26, 2024): Just update that I'm still looking into this. All new videos are encoding successfully, so now I'm wondering where the failing videos came from. Its possible they were an output from some editing program.
Author
Owner

@alextran1502 commented on GitHub (Sep 30, 2024):

I am closing the issue, feel free to reopen when we find the reproducible steps

@alextran1502 commented on GitHub (Sep 30, 2024): I am closing the issue, feel free to reopen when we find the reproducible steps
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: immich-app/immich#4359