Opened 11 months ago
Last modified 11 months ago
#10365 new defect
Order of metadata in mkv changes on its own
| Reported by: | yumu | Owned by: | |
|---|---|---|---|
| Priority: | normal | Component: | avformat |
| Version: | git-master | Keywords: | mkv matroska metadata order |
| Cc: | Blocked By: | ||
| Blocking: | Reproduced by developer: | no | |
| Analyzed by developer: | no |
Description (last modified by )
Summary of the bug:
The order of metadata changes on its own each time mkv is processed.
I think it's a mkv (matroska) problem because it didn't reproduce for avi, mov, mp4, ogg containers.
I don't think metadata should be reordered unintentionally.
How to reproduce:
- Create a mkv with some metadata. (or an existing one)
ffmpeg -f lavfi -i smptehdbars=d=2 -f lavfi -i sine=d=2 -metadata artist=ARTIST -metadata comment=COMMENT -metadata date=20230101 ".mkv"
- Copy
> ffmpeg -i ".mkv" -c copy "copied.mkv" ffmpeg version N-110589-g30c71ef98e-20230514 Copyright (c) 2000-2023 the FFmpeg developers built with gcc 12.2.0 (crosstool-NG 1.25.0.152_89671bf) configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --disable-w32threads --enable-pthreads --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-libvorbis --enable-opencl --disable-libpulse --enable-libvmaf --disable-libxcb --disable-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-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 --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --disable-libdrm --disable-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= --extra-libs=-lgomp --extra-version=20230514 libavutil 58. 7.100 / 58. 7.100 libavcodec 60. 11.100 / 60. 11.100 libavformat 60. 5.100 / 60. 5.100 libavdevice 60. 2.100 / 60. 2.100 libavfilter 9. 8.100 / 9. 8.100 libswscale 7. 2.100 / 7. 2.100 libswresample 4. 11.100 / 4. 11.100 libpostproc 57. 2.100 / 57. 2.100 Input #0, matroska,webm, from '.mkv': Metadata: DATE : 20230101 ARTIST : ARTIST COMMENT : COMMENT ENCODER : Lavf60.5.100 Duration: 00:00:02.00, start: 0.000000, bitrate: 43 kb/s Stream #0:0: Video: h264 (High), yuv420p(tv, bt709/unknown/unknown, progressive), 320x240 [SAR 1:1 DAR 4:3], 25 fps, 25 tbr, 1k tbn Metadata: ENCODER : Lavc60.11.100 libx264 DURATION : 00:00:02.003000000 Stream #0:1: Audio: vorbis, 44100 Hz, mono, fltp Metadata: ENCODER : Lavc60.11.100 libvorbis DURATION : 00:00:02.003000000 Output #0, matroska, to 'copied.mkv': Metadata: DATE : 20230101 ARTIST : ARTIST COMMENT : COMMENT encoder : Lavf60.5.100 Stream #0:0: Video: h264 (High) (H264 / 0x34363248), yuv420p(tv, bt709/unknown/unknown, progressive), 320x240 [SAR 1:1 DAR 4:3], q=2-31, 25 fps, 25 tbr, 1k tbn Metadata: ENCODER : Lavc60.11.100 libx264 DURATION : 00:00:02.003000000 Stream #0:1: Audio: vorbis (oV[0][0] / 0x566F), 44100 Hz, mono, fltp Metadata: ENCODER : Lavc60.11.100 libvorbis DURATION : 00:00:02.003000000 Stream mapping: Stream #0:0 -> #0:0 (copy) Stream #0:1 -> #0:1 (copy) Press [q] to stop, [?] for help [out#0/matroska @ 000001efc70c2f00] video:2kB audio:3kB subtitle:0kB other streams:0kB global headers:3kB muxing overhead: 85.019422% frame= 50 fps=0.0 q=-1.0 Lsize= 11kB time=00:00:01.99 bitrate= 44.0kbits/s speed= 663x
Then the order of the metadata changes.
For some reason, it does not change in the output of step 2, but you can see it in the output of ffprobe.
in the output of ffprobe, the COMMENT tag is moved to the top, but in binary, the DATE tag is moved to the top and the order is from ARTIST,COMMENT,DATE,ENCODER to DATE,ARTIST,COMMENT,ENCODER.
Why ffprobe's output is not in binary order is a mystery.
> ffprobe ".mkv"
ffprobe version N-110589-g30c71ef98e-20230514 Copyright (c) 2007-2023 the FFmpeg developers
built with gcc 12.2.0 (crosstool-NG 1.25.0.152_89671bf)
configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --disable-w32threads --enable-pthreads --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-libvorbis --enable-opencl --disable-libpulse --enable-libvmaf --disable-libxcb --disable-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-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 --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --disable-libdrm --disable-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= --extra-libs=-lgomp --extra-version=20230514
libavutil 58. 7.100 / 58. 7.100
libavcodec 60. 11.100 / 60. 11.100
libavformat 60. 5.100 / 60. 5.100
libavdevice 60. 2.100 / 60. 2.100
libavfilter 9. 8.100 / 9. 8.100
libswscale 7. 2.100 / 7. 2.100
libswresample 4. 11.100 / 4. 11.100
libpostproc 57. 2.100 / 57. 2.100
Input #0, matroska,webm, from '.mkv':
Metadata:
DATE : 20230101
ARTIST : ARTIST
COMMENT : COMMENT
ENCODER : Lavf60.5.100
Duration: 00:00:02.00, start: 0.000000, bitrate: 43 kb/s
Stream #0:0: Video: h264 (High), yuv420p(tv, bt709/unknown/unknown, progressive), 320x240 [SAR 1:1 DAR 4:3], 25 fps, 25 tbr, 1k tbn
Metadata:
ENCODER : Lavc60.11.100 libx264
DURATION : 00:00:02.003000000
Stream #0:1: Audio: vorbis, 44100 Hz, mono, fltp
Metadata:
ENCODER : Lavc60.11.100 libvorbis
DURATION : 00:00:02.003000000
> ffprobe "copied.mkv"
ffprobe version N-110589-g30c71ef98e-20230514 Copyright (c) 2007-2023 the FFmpeg developers
built with gcc 12.2.0 (crosstool-NG 1.25.0.152_89671bf)
configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --disable-w32threads --enable-pthreads --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-libvorbis --enable-opencl --disable-libpulse --enable-libvmaf --disable-libxcb --disable-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-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 --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --disable-libdrm --disable-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= --extra-libs=-lgomp --extra-version=20230514
libavutil 58. 7.100 / 58. 7.100
libavcodec 60. 11.100 / 60. 11.100
libavformat 60. 5.100 / 60. 5.100
libavdevice 60. 2.100 / 60. 2.100
libavfilter 9. 8.100 / 9. 8.100
libswscale 7. 2.100 / 7. 2.100
libswresample 4. 11.100 / 4. 11.100
libpostproc 57. 2.100 / 57. 2.100
Input #0, matroska,webm, from 'copied.mkv':
Metadata:
COMMENT : COMMENT
DATE : 20230101
ARTIST : ARTIST
ENCODER : Lavf60.5.100
Duration: 00:00:02.01, start: 0.000000, bitrate: 43 kb/s
Stream #0:0: Video: h264 (High), yuv420p(tv, bt709/unknown/unknown, progressive), 320x240 [SAR 1:1 DAR 4:3], 25 fps, 25 tbr, 1k tbn
Metadata:
ENCODER : Lavc60.11.100 libx264
DURATION : 00:00:02.003000000
Stream #0:1: Audio: vorbis, 44100 Hz, mono, fltp
Metadata:
ENCODER : Lavc60.11.100 libvorbis
DURATION : 00:00:02.013000000
Copying copied.mkv again will change the order of the metadata.
> ffmpeg -i "copied.mkv" -c copy "copied2.mkv"
...
> ffprobe -hide_banner "copied2.mkv"
Input #0, matroska,webm, from 'copied2.mkv':
Metadata:
ARTIST : ARTIST
COMMENT : COMMENT
DATE : 20230101
ENCODER : Lavf60.5.100
Duration: 00:00:02.01, start: 0.000000, bitrate: 43 kb/s
Stream #0:0: Video: h264 (High), yuv420p(tv, bt709/unknown/unknown, progressive), 320x240 [SAR 1:1 DAR 4:3], 25 fps, 25 tbr, 1k tbn
Metadata:
ENCODER : Lavc60.11.100 libx264
DURATION : 00:00:02.003000000
Stream #0:1: Audio: vorbis, 44100 Hz, mono, fltp
Metadata:
ENCODER : Lavc60.11.100 libvorbis
DURATION : 00:00:02.013000000
My ffmpeg is the Windows version downloaded from https://github.com/BtbN/FFmpeg-Builds/releases.


