Opened 14 months ago

#10167 new defect

Animated JPEG XL is treated as single image

Reported by: oblomov Owned by:
Priority: normal Component: undetermined
Version: git-master Keywords:
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

The JPEG XL format supports animation, but ffmpeg only sees the first frame of the animation and interprets such a file as a static single image.

To reproduce this, an animated JPEG XL is needed. This can be created e.g. converting Mozilla's Throbber-small.gif into a JXL with:

% cjxl Throbber-small.gif throbber-small.gif
% jxlinfo throbber-small.gif
JPEG XL animation, 16x16, (possibly) lossless, 8-bit RGBA
Color space: RGB, D65, sRGB primaries, sRGB transfer function, rendering intent: Perceptual
frame: full image size, duration: 100.0 ms
frame: full image size, duration: 100.0 ms
frame: full image size, duration: 100.0 ms
frame: full image size, duration: 100.0 ms
frame: full image size, duration: 100.0 ms
frame: full image size, duration: 100.0 ms
frame: full image size, duration: 100.0 ms
frame: full image size, duration: 100.0 ms
Animation length: 0.800 seconds (looping)

Compare now the ffprobe output (tested with the GPL Linux nightly):

% ffprobe Throbber-small.gif
ffprobe version N-109748-gb92028346c-20230203 Copyright (c) 2007-2023 the FFmpeg developers
  built with gcc 12.2.0 (crosstool-NG 1.25.0.90_cf9beb1)
  configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-ffbuild-linux-gnu- --arch=x86_64 --target-os=linux --enable-gpl --enable-version3 --disable-debug --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-libvorbis --enable-opencl --enable-libpulse --enable-libvmaf --enable-libxcb --enable-xlib --enable-amf --enable-libaom --enable-libaribb24 --enable-avisynth --enable-chromaprint --enable-libdav1d --enable-libdavs2 --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libkvazaar --enable-libass --enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-mbedtls --enable-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-libwebp --enable-lv2 --disable-libmfx --enable-libvpl --enable-openal --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --disable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --enable-libdrm --enable-vaapi --enable-libvidstab --enable-vulkan --enable-libshaderc --enable-libplacebo --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-ldexeflags=-pie --extra-libs='-ldl -lgomp' --extra-version=20230203
  libavutil      57. 44.100 / 57. 44.100
  libavcodec     59. 61.100 / 59. 61.100
  libavformat    59. 37.100 / 59. 37.100
  libavdevice    59.  8.101 / 59.  8.101
  libavfilter     8. 56.100 /  8. 56.100
  libswscale      6.  8.112 /  6.  8.112
  libswresample   4.  9.100 /  4.  9.100
  libpostproc    56.  7.100 / 56.  7.100
Input #0, gif, from '/usr/lib/firefox/Throbber-small.gif':
  Duration: 00:00:00.80, start: 0.000000, bitrate: 8 kb/s
  Stream #0:0: Video: gif, bgra, 16x16, 10 fps, 10 tbr, 100 tbn

versus

% ffprobe throbber-small.jxl 
ffprobe version N-109748-gb92028346c-20230203 Copyright (c) 2007-2023 the FFmpeg developers
  built with gcc 12.2.0 (crosstool-NG 1.25.0.90_cf9beb1)
  configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-ffbuild-linux-gnu- --arch=x86_64 --target-os=linux --enable-gpl --enable-version3 --disable-debug --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-libvorbis --enable-opencl --enable-libpulse --enable-libvmaf --enable-libxcb --enable-xlib --enable-amf --enable-libaom --enable-libaribb24 --enable-avisynth --enable-chromaprint --enable-libdav1d --enable-libdavs2 --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libkvazaar --enable-libass --enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-mbedtls --enable-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-libwebp --enable-lv2 --disable-libmfx --enable-libvpl --enable-openal --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --disable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --enable-libdrm --enable-vaapi --enable-libvidstab --enable-vulkan --enable-libshaderc --enable-libplacebo --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-ldexeflags=-pie --extra-libs='-ldl -lgomp' --extra-version=20230203
  libavutil      57. 44.100 / 57. 44.100
  libavcodec     59. 61.100 / 59. 61.100
  libavformat    59. 37.100 / 59. 37.100
  libavdevice    59.  8.101 / 59.  8.101
  libavfilter     8. 56.100 /  8. 56.100
  libswscale      6.  8.112 /  6.  8.112
  libswresample   4.  9.100 /  4.  9.100
  libpostproc    56.  7.100 / 56.  7.100
Input #0, jpegxl_pipe, from 'throbber-small.jxl':
  Duration: N/A, bitrate: N/A
  Stream #0:0: Video: jpegxl, rgba(pc, gbr/bt709/iec61966-2-1), 16x16, 25 fps, 25 tbr, 25 tbn

(Ideally, support for animated JPEG XL should be added both in input and output, but input at least would be nice.)

Attachments (1)

throbber-small.jxl (877 bytes ) - added by oblomov 14 months ago.
Firefox throbber converted into animated JXL

Download all attachments as: .zip

Change History (1)

by oblomov, 14 months ago

Attachment: throbber-small.jxl added

Firefox throbber converted into animated JXL

Note: See TracTickets for help on using tickets.