Opened 16 months ago
Last modified 16 months ago
#10451 new defect
Reduced luminance and banding artefacts converting DCP JPEG2000 to ProResHQ
Reported by: | overlookmotel | Owned by: | |
---|---|---|---|
Priority: | normal | Component: | undetermined |
Version: | unspecified | Keywords: | |
Cc: | Blocked By: | ||
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | no |
Description
I am trying to convert the video MXF of a DCP (Digital Cinema Package) to ProResHQ. DCPs' MXFs are encoded as JPEG2000 in XYZ colour space, and my intent is to produce a ProResHQ file in Rec709 colour space.
The conversion works, but the output is incorrect in 2 respects:
- Luminance is reduced.
- In tones close to black, red, blue and green depart from each other and banding artefacts appear in dark areas (dark green blocky splodges).
I am using the latest static build ffmpeg-111332-g9ff834c2a0
from https://evermeet.cx/ffmpeg/ on Mac OS Intel.
% ffmpeg -i input.mxf -c:v prores -profile:v 3 -pix_fmt yuv422p10 -an output.mov
Log:
ffmpeg started on 2023-07-07 at 18:07:47 Report written to "ffmpeg-20230707-180747.log" Log level: 48 Command line: /ffmpeg/evermeet/ffmpeg -i "/colour tests/input.mxf" -c:v prores -profile:v 3 -pix_fmt yuv422p10 -an -report "/colour tests/output.mov" ffmpeg version N-111332-g9ff834c2a0-tessus https://evermeet.cx/ffmpeg/ Copyright (c) 2000-2023 the FFmpeg developers built with Apple clang version 11.0.0 (clang-1100.0.33.17) configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libmysofa --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvmaf --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-version3 --pkg-config-flags=--static --disable-ffplay libavutil 58. 13.101 / 58. 13.101 libavcodec 60. 22.100 / 60. 22.100 libavformat 60. 10.100 / 60. 10.100 libavdevice 60. 2.101 / 60. 2.101 libavfilter 9. 8.102 / 9. 8.102 libswscale 7. 3.100 / 7. 3.100 libswresample 4. 11.100 / 4. 11.100 libpostproc 57. 2.100 / 57. 2.100 Splitting the commandline. Reading option '-i' ... matched as input url with argument '/colour tests/input.mxf'. Reading option '-c:v' ... matched as option 'c' (codec name) with argument 'prores'. Reading option '-profile:v' ... matched as option 'profile' (set profile) with argument '3'. Reading option '-pix_fmt' ... matched as option 'pix_fmt' (set pixel format) with argument 'yuv422p10'. Reading option '-an' ... matched as option 'an' (disable audio) with argument '1'. Reading option '-report' ... matched as option 'report' (generate a report) with argument '1'. Reading option '/colour tests/output.mov' ... matched as output url. Finished splitting the commandline. Parsing a group of options: global . Applying option report (generate a report) with argument 1. Successfully parsed a group of options. Parsing a group of options: input url /colour tests/input.mxf. Successfully parsed a group of options. Opening an input file: /colour tests/input.mxf. [AVFormatContext @ 0x7f9c11700440] Opening '/colour tests/input.mxf' for reading [file @ 0x7f9c11700900] Setting default whitelist 'file,crypto,data' [mxf @ 0x7f9c11700440] Format mxf probed with size=2048 and score=100 [mxf @ 0x7f9c11700440] "OPAtom" with 2 ECs - assuming OP1a [mxf @ 0x7f9c11700440] Dark key 06.0e.2b.34.02.53.01.01.0d.01.01.01.01.01.5a.00 [mxf @ 0x7f9c11700440] Dark key 06.0e.2b.34.01.01.01.02.03.01.02.10.01.00.00.00 [mxf @ 0x7f9c11700440] jpeg2000: Universal Label: 060e2b34.0401.0109.04010202.03010103 [mxf @ 0x7f9c11700440] Before avformat_find_stream_info() pos: 16384 bytes read:66180 seeks:5 nb_streams:1 [mxf @ 0x7f9c11700440] All info found [mxf @ 0x7f9c11700440] After avformat_find_stream_info() pos: 131131 bytes read:180927 seeks:5 frames:1 Input #0, mxf, from '/colour tests/input.mxf': Metadata: operational_pattern_ul: 060e2b34.04010101.0d010201.10000000 uid : d3425999-446c-4b7e-aad2-16241381926f generation_uid : 8f940296-8fd8-4fc0-8c42-e8a8b1b6c3f0 company_name : libdcp product_name : libdcp product_version_num: 0.0.0.0.0 product_version : 1.6.15 product_uid : 43059a1d-0432-4101-b83f-736815acf31d modification_date: 2021-09-12T23:15:37.000000Z toolkit_version_num: 0.1.0.27240.1 application_platform: linux material_package_umid: 0x060A2B340101010501010F2013000000E842DC9189ED41F08337AD2BD43AC6D1 material_package_name: AS-DCP Material Package timecode : 00:00:00:00 Duration: 00:00:01.00, start: 0.000000, bitrate: 22167 kb/s Stream #0:0, 1, 1/24: Video: jpeg2000 (JPEG 2000 digital cinema 2K), xyz12le(progressive), 1998x1080, SAR 1:1 DAR 37:20, 24 tbr, 24 tbn Metadata: file_package_umid: 0x060A2B340101010501010F20130000000404C2539D1F4686B35FF25C8F4AF63B file_package_name: File Package: SMPTE 429-4 frame wrapping of JPEG 2000 codestreams track_name : Picture Track Successfully opened the file. Parsing a group of options: output url /colour tests/output.mov. Applying option c:v (codec name) with argument prores. Applying option profile:v (set profile) with argument 3. Applying option pix_fmt (set pixel format) with argument yuv422p10. Applying option an (disable audio) with argument 1. Successfully parsed a group of options. Opening an output file: /colour tests/output.mov. [out#0/mov @ 0x7f9c11511c40] No explicit maps, mapping streams automatically... [vost#0:0/prores @ 0x7f9c11512bc0] Created video stream from input stream 0:0 detected 16 logical cores [file @ 0x7f9c1151d700] Setting default whitelist 'file,crypto,data' Successfully opened the file. Stream mapping: Stream #0:0 -> #0:0 (jpeg2000 (native) -> prores (native)) Press [q] to stop, [?] for help [vost#0:0/prores @ 0x7f9c11512bc0] cur_dts is invalid [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream) [vost#0:0/prores @ 0x7f9c11512bc0] cur_dts is invalid [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream) [vost#0:0/prores @ 0x7f9c11512bc0] cur_dts is invalid [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream) [vost#0:0/prores @ 0x7f9c11512bc0] cur_dts is invalid [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream) [vost#0:0/prores @ 0x7f9c11512bc0] cur_dts is invalid [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream) [vost#0:0/prores @ 0x7f9c11512bc0] cur_dts is invalid [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream) [vost#0:0/prores @ 0x7f9c11512bc0] cur_dts is invalid [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream) [vost#0:0/prores @ 0x7f9c11512bc0] cur_dts is invalid [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream) [vost#0:0/prores @ 0x7f9c11512bc0] cur_dts is invalid [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream) [vost#0:0/prores @ 0x7f9c11512bc0] cur_dts is invalid [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream) [vost#0:0/prores @ 0x7f9c11512bc0] cur_dts is invalid [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream) [vost#0:0/prores @ 0x7f9c11512bc0] cur_dts is invalid [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream) [vost#0:0/prores @ 0x7f9c11512bc0] cur_dts is invalid [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream) [vost#0:0/prores @ 0x7f9c11512bc0] cur_dts is invalid [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream) [vost#0:0/prores @ 0x7f9c11512bc0] cur_dts is invalid [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream) [vost#0:0/prores @ 0x7f9c11512bc0] cur_dts is invalid [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream) [jpeg2000 @ 0x7f9c11514b80] Progression order CPRL [jpeg2000 @ 0x7f9c11515400] Progression order CPRL [jpeg2000 @ 0x7f9c11515c80] Progression order CPRL [jpeg2000 @ 0x7f9c115164c0] Progression order CPRL [jpeg2000 @ 0x7f9c11516d40] Progression order CPRL [jpeg2000 @ 0x7f9c115175c0] Progression order CPRL [jpeg2000 @ 0x7f9c11517e40] Progression order CPRL [jpeg2000 @ 0x7f9c11518680] Progression order CPRL [jpeg2000 @ 0x7f9c11518f00] Progression order CPRL [jpeg2000 @ 0x7f9c11519780] Progression order CPRL [jpeg2000 @ 0x7f9c1151a000] Progression order CPRL [jpeg2000 @ 0x7f9c1151a840] Progression order CPRL [jpeg2000 @ 0x7f9c1151b0c0] Progression order CPRL [jpeg2000 @ 0x7f9c1151b940] Progression order CPRL [jpeg2000 @ 0x7f9c1151c1c0] Progression order CPRL [jpeg2000 @ 0x7f9c1151ca00] Progression order CPRL [graph 0 input from stream 0:0 @ 0x7f9be33016c0] Setting 'video_size' to value '1998x1080' [graph 0 input from stream 0:0 @ 0x7f9be33016c0] Setting 'pix_fmt' to value '99' [graph 0 input from stream 0:0 @ 0x7f9be33016c0] Setting 'time_base' to value '1/24' [graph 0 input from stream 0:0 @ 0x7f9be33016c0] Setting 'pixel_aspect' to value '1/1' [graph 0 input from stream 0:0 @ 0x7f9be33016c0] Setting 'frame_rate' to value '24/1' [graph 0 input from stream 0:0 @ 0x7f9be33016c0] w:1998 h:1080 pixfmt:xyz12le tb:1/24 fr:24/1 sar:1/1 [format @ 0x7f9be3301c00] Setting 'pix_fmts' to value 'yuv422p10le' [auto_scale_0 @ 0x7f9be3302240] w:iw h:ih flags:'' interl:0 [format @ 0x7f9be3301c00] auto-inserting filter 'auto_scale_0' between the filter 'Parsed_null_0' and the filter 'format' [AVFilterGraph @ 0x7f9be3150ec0] query_formats: 4 queried, 2 merged, 1 already done, 0 delayed [auto_scale_0 @ 0x7f9be3302240] w:1998 h:1080 fmt:xyz12le sar:1/1 -> w:1998 h:1080 fmt:yuv422p10le sar:1/1 flags:0x00000004 Output #0, mov, to '/colour tests/output.mov': Metadata: operational_pattern_ul: 060e2b34.04010101.0d010201.10000000 uid : d3425999-446c-4b7e-aad2-16241381926f generation_uid : 8f940296-8fd8-4fc0-8c42-e8a8b1b6c3f0 timecode : 00:00:00:00 material_package_name: AS-DCP Material Package product_version_num: 0.0.0.0.0 material_package_umid: 0x060A2B340101010501010F2013000000E842DC9189ED41F08337AD2BD43AC6D1 product_uid : 43059a1d-0432-4101-b83f-736815acf31d modification_date: 2021-09-12T23:15:37.000000Z toolkit_version_num: 0.1.0.27240.1 application_platform: linux encoder : Lavf60.10.100 Stream #0:0, 0, 1/12288: Video: prores (HQ) (apch / 0x68637061), yuv422p10le(tv, progressive), 1998x1080 [SAR 1:1 DAR 37:20], q=2-31, 200 kb/s, 24 fps, 12288 tbn Metadata: file_package_umid: 0x060A2B340101010501010F20130000000404C2539D1F4686B35FF25C8F4AF63B file_package_name: File Package: SMPTE 429-4 frame wrapping of JPEG 2000 codestreams track_name : Picture Track encoder : Lavc60.22.100 prores frame= 0 fps=0.0 q=0.0 size= 0kB time=-577014:32:22.77 bitrate= -0.0kbits/s speed=N/A [jpeg2000 @ 0x7f9c11514b80] Progression order CPRL [prores @ 0x7f9c115239c0] use progressive encoding [jpeg2000 @ 0x7f9c11515400] Progression order CPRL [prores @ 0x7f9c11524380] use progressive encoding [jpeg2000 @ 0x7f9c11515c80] Progression order CPRL [prores @ 0x7f9c11524d40] use progressive encoding [jpeg2000 @ 0x7f9c115164c0] Progression order CPRL [prores @ 0x7f9c11525700] use progressive encoding [jpeg2000 @ 0x7f9c11516d40] Progression order CPRL [prores @ 0x7f9c115260c0] use progressive encoding [jpeg2000 @ 0x7f9c115175c0] Progression order CPRL [prores @ 0x7f9c11526a80] use progressive encoding frame= 4 fps=0.0 q=-0.0 size= 768kB time=00:00:00.16 bitrate=37750.6kbits/s speed=0.329x [in#0/mxf @ 0x7f9c11700300] EOF while reading input [in#0/mxf @ 0x7f9c11700300] Terminating demuxer thread [jpeg2000 @ 0x7f9c11517e40] Progression order CPRL [prores @ 0x7f9c11527440] use progressive encoding [jpeg2000 @ 0x7f9c11518680] Progression order CPRL [prores @ 0x7f9c11527e00] use progressive encoding [vist#0:0/jpeg2000 @ 0x7f9c11511e00] Decoder thread received EOF packet [prores @ 0x7f9c115287c0] use progressive encoding [vist#0:0/jpeg2000 @ 0x7f9c11511e00] Decoder returned EOF, finishing [vist#0:0/jpeg2000 @ 0x7f9c11511e00] Terminating decoder thread [prores @ 0x7f9c11524380] use progressive encoding [prores @ 0x7f9c11526a80] use progressive encoding frame= 8 fps=7.4 q=-0.0 size= 1792kB time=00:00:00.33 bitrate=44041.2kbits/s speed=0.308x [prores @ 0x7f9c11525700] use progressive encoding [prores @ 0x7f9c11527e00] use progressive encoding [prores @ 0x7f9c11524d40] use progressive encoding [prores @ 0x7f9c115260c0] use progressive encoding [out_0_0 @ 0x7f9be3301b40] EOF on sink link out_0_0:default. [prores @ 0x7f9c115239c0] use progressive encoding [prores @ 0x7f9c11527440] use progressive encoding No more output streams to write to, finishing. [prores @ 0x7f9c1152cc00] use progressive encoding [prores @ 0x7f9c1152a500] use progressive encoding [prores @ 0x7f9c1152c240] use progressive encoding [prores @ 0x7f9c11529180] use progressive encoding [prores @ 0x7f9c1152b880] use progressive encoding [prores @ 0x7f9c1152aec0] use progressive encoding [prores @ 0x7f9c11529b40] use progressive encoding [out#0/mov @ 0x7f9c11511c40] All streams finished [out#0/mov @ 0x7f9c11511c40] Terminating muxer thread [AVIOContext @ 0x7f9c1151d880] Statistics: 6463176 bytes written, 2 seeks, 28 writeouts [out#0/mov @ 0x7f9c11511c40] Output file #0 (/colour tests/output.mov): [out#0/mov @ 0x7f9c11511c40] Output stream #0:0 (video): 24 frames encoded; 24 packets muxed (6461784 bytes); [out#0/mov @ 0x7f9c11511c40] Total: 24 packets (6461784 bytes) muxed [out#0/mov @ 0x7f9c11511c40] video:6310kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.021480% frame= 24 fps= 21 q=-0.0 Lsize= 6312kB time=00:00:00.95 bitrate=53953.5kbits/s speed=0.835x [in#0/mxf @ 0x7f9c11700300] Input file #0 (/colour tests/input.mxf): [in#0/mxf @ 0x7f9c11700300] Input stream #0:0 (video): 24 packets read (2753448 bytes); 24 frames decoded; 0 decode errors; [in#0/mxf @ 0x7f9c11700300] Total: 24 packets (2753448 bytes) demuxed [AVIOContext @ 0x7f9c11700b00] Statistics: 2820700 bytes read, 5 seeks
Attachments (5)
Change History (6)
by , 16 months ago
Attachment: | input.mxf.zip added |
---|
by , 16 months ago
Attachment: | DOM DCP export annotated.png added |
---|
Resolve scopes - FFMPEG output ProRes (annotated)
comment:1 by , 16 months ago
Bug originally noticed in DCP-o-matic (https://dcpomatic.com/) which uses FFMPEG internally, but can be reproduced with FFMPEG alone. DCP-o-matic bug report: https://dcpomatic.com/mantis/view.php?id=2590
Input DCP MXF file