immich-app / immich

High performance self-hosted photo and video management solution.
https://immich.app
GNU Affero General Public License v3.0
47.19k stars 2.39k forks source link

The video timezone is incorrect #13009

Closed Cookie987 closed 5 days ago

Cookie987 commented 5 days ago

The bug

I used Nikon Z30 to record videos and then I uploaded it. I found that the video time displayed on immich is 8 hours faster than the actual time. However, I used my phone to record a video and uploaded it and everything is normal.

The metadata of z30: image

Phone: image

I guess immich used the Nikon's metadata's time as UTC time. But in fact it's UTC+8. image

Also, video files were provided here

Z30_5236.MOV: shot on z30

VID_20240928_125453.mp4: shot on my phone

The OS that Immich Server is running on

ArchLinux LXC on Pve

Version of Immich Server

v1.116.2

Version of Immich Mobile App

none

Platform with the issue

Your docker-compose.yml content

#
# WARNING: 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: immich_server
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    # extends:
    #   file: hwaccel.transcoding.yml
    #   service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
    devices:
      - /dev/dri:/dev/dri
    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}:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - stack.env
    ports:
      - 2283:3001
    depends_on:
      - redis
      - database
    restart: always
    healthcheck:
      disable: false

  immich-machine-learning:
    container_name: immich_machine_learning
    # For hardware acceleration, add one of -[armnn, cuda, openvino] 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://immich.app/docs/features/ml-hardware-acceleration
    #   file: hwaccel.ml.yml
    #   service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
    volumes:
      - model-cache:/cache
    env_file:
      - stack.env
    restart: always
    healthcheck:
      disable: false

  redis:
    container_name: immich_redis
    image: docker.io/redis:6.2-alpine@sha256:2d1463258f2764328496376f5d965f20c6a67f66ea2b06dc42af351f75248792
    healthcheck:
      test: redis-cli ping || exit 1
    restart: always

  database:
    container_name: immich_postgres
    image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: '--data-checksums'
    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
    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"]
    restart: always

volumes:
  model-cache:

Your .env content

UPLOAD_LOCATION=/mnt/smb/PhotoLibrary
DB_DATA_LOCATION=./postgres
IMMICH_VERSION=release
DB_URL='postgresql://immich:immich@172.0.0.2:5432/immich'
DB_PASSWORD=postgres
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
TZ=Asia/Shanghai

Reproduction steps

1.Upload the video Z30_5236.MOV via the web page 2.See the wrong date(the correct time is 10:05 UTC+8) image

Relevant log output

No response

Additional information

No response

alextran1502 commented 5 days ago

Hello, this is working as expected since the media recorded on the Z30 doesn't come with GPS or timezone data, so there is no information to use to identify the timezone correctly.

You can read the megathread about timezone-related topics here https://github.com/immich-app/immich/discussions/12650

radh21301 commented 5 days ago

Hey. I was looking into this a bit. According to Quicktime specs, Quicktime timestamps should always be in UTC. I think that is the reason Immich treats them as UTC, and you see this issue. This does mess up your timeline which is not great :) .

As Alex suggested, you can raise this same issue on the Megathread. Maybe someone smarter might be able to look into it.

Ref: https://exiftool.org/forum/index.php?topic=10070.0 https://exiftool.org/forum/index.php?topic=8081.0

Cookie987 commented 5 days ago

Thank you all for replying me so promptly!❤ I'll do that.