How to generate IRT conform D10 IMX50 MXFs (and how to set the output color_range, -space, -transfer and primaries flags)
Hello I am making tests with IMX50/MXF encodings with FFMBC and FFMPEG. (with 24bit audio) The tests compare the final files with the IRT MXF Analyzer Pro tool to be shure to be IRT conform. (My used syntax is at the bottom of this mail) Both files (generated with ffmbc and ffmpeg) are working very well in editing tools but there is a little difference: The IMX50 generated by ffmbc has no errors/warnings at IRT MXF Analyzer (with16bit audio). It is really perfect. In fact I never had a clean "green" MXF by testing other probes from other encoding tools. Only the IRT probes itself are clean. So this MXF is IRT conform when using the ffmbc standard target preset "imx50". The Analyzis of the IMX50/MXF generated by FFMPEG (latest build from zeganoe) has 1 warning and 1 error: WARNING: "Fill Item Key with a wrong RP210 (SMPTE Metadata Dictionary) version number of 0x01. The correct version number is 0x02" ERROR: "The Sound Essence Descriptor signals that the number if quantization bits is 24, which is higher than actually required (16) as detemined by parsing the essence." Due to the fact that I am producing 24bit audio I could prevent the WARNING by producing 16bit audio. But is there a problem in the MXF when producing 24bit? Sound works in editing tools. Furthermore ffmbc produces for standard a IMX with 16bit -> If I force ffmbc to do 24bit, I get the same error. Due to the warning: I found out that both files are different regarding these values (by reading out via ffprobe - show_streams) FFMBC IMX FILE stream 0:0: color_range=tv color_space=smpte170m color_transfer=bt709 color_primaries=bt470bg FFMPEG IMX FILE stream 0:0: color_range=tv color_space=unknown color_transfer=unknown color_primaries=unknown So my questions are : 1.) How can I produce (with ffmpeg) the same output like ffmbc with these 4 metadata flags: color_range=tv color_space=smpte170m color_transfer=bt709 color_primaries=bt470bg I didnt found a answer to that in the ffmpeg documentation :/ 2.) Maybe somebody knows: Do these 4 metadata flags have a connection to the Warning message of the MXF Analyzer? -> "Fill Item Key with a wrong RP210 (SMPTE Metadata Dictionary) version number of 0x01. The correct version number is 0x02" If nobody know this answer I could do the test for myself by be able to encode with the upper params in 1.). 3.) Is there an syntax option in ffmpeg for 24bit audio encoding to prevent this ERROR: "The Sound Essence Descriptor signals that the number if quantization bits is 24, which is higher than actually required (16) as detemined by parsing the essence." Best Regards Christoph USED SYNTAX: ------------------------------------------------------------- FFmbc (16bit audio): ffmbc -i I:\IMX_tests\IMX50_CARBON.avi -target imx50 I:\IMX_tests\_FFMBC_PAL_IMX_16bit_2.mxf -loglevel debug FFmbc version 0.7-rc7 Copyright (c) 2008-2012 Baptiste Coudurier and the FFmpeg developers Input #0, avi, from 'I:\IMX_tests\IMX50_CARBON.avi': Metadata: encoder: Lavf55.0.100 ISMP: 00:00:00:00 Duration: 00:00:20.00, start: 0.000000, bitrate: 113291 kb/s Stream #0.0(und): Video: ffvhuff, yuv422p, 720x608p, PAR 152:135 DAR 4:3, 25.00 fps Stream #0.1(und): Audio: pcm_s24le, 48000 Hz, stereo, s32, 2304 kb/s File 'I:\IMX_tests\_FFMBC_PAL_IMX_16bit_2.mxf' already exists. Overwrite ? [y/N] y [buffer @ 00000000018E07E0] w:720 h:608 pixfmt:yuv422p tb:1/1000000 sar:152/135 sws_param: Incompatible sample format 's32' for codec 'pcm_s16le', auto-selecting format 's16' Warning, QMAT_SHIFT is larger than 21, overflows possible Last message repeated 1 times Output #0, mxf_d10, to 'I:\IMX_tests\_FFMBC_PAL_IMX_16bit_2.mxf': Metadata: encoder: FFmbc 0.7 Stream #0.0(und), 0, 1/25: Video: mpeg2video, yuv422p, 720x608i tff [PAR 152:135 DAR 4:3], tbc 1/25, cbr, 50000 kb/s, 25.00 fps Stream #0.1(und), 0, 1/48000: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s Stream mapping: Stream #0.0 -> #0.0 Stream #0.1 -> #0.1 Press [q] to stop, [?] for help [mxf_d10 @ 000000000037C9C0] package type:1 [mxf_d10 @ 000000000037C9C0] package type:2 [mxf_d10 @ 000000000037C9C0] edit units count 0 frame= 239 fps= 25 q=3.0 size= 72409kB time=00:00:09.52 bitrate=62307.8kbits/s eta=00:00:10.51 ------------------------------------------------------------- FFmbc (24bit audio): ffmbc -i I:\IMX_tests\IMX50_CARBON.avi -target imx50 -acodec pcm_s24le I:\IMX_tests\_FFMBC_PAL_IMX_24bit_2.mxf -loglevel debug FFmbc version 0.7-rc7 Copyright (c) 2008-2012 Baptiste Coudurier and the FFmpeg developers Input #0, avi, from 'I:\IMX_tests\IMX50_CARBON.avi': Metadata: encoder: Lavf55.0.100 ISMP: 00:00:00:00 Duration: 00:00:20.00, start: 0.000000, bitrate: 113291 kb/s Stream #0.0(und): Video: ffvhuff, yuv422p, 720x608p, PAR 152:135 DAR 4:3, 25.00 fps Stream #0.1(und): Audio: pcm_s24le, 48000 Hz, stereo, s32, 2304 kb/s [buffer @ 00000000002EFF60] w:720 h:608 pixfmt:yuv422p tb:1/1000000 sar:152/135 sws_param: Warning, QMAT_SHIFT is larger than 21, overflows possible Last message repeated 1 times Output #0, mxf_d10, to 'I:\IMX_tests\_FFMBC_PAL_IMX_24bit_2.mxf': Metadata: encoder: FFmbc 0.7 Stream #0.0(und), 0, 1/25: Video: mpeg2video, yuv422p, 720x608i tff [PAR 152:135 DAR 4:3], tbc 1/25, cbr, 50000 kb/s, 25.00 fps Stream #0.1(und), 0, 1/48000: Audio: pcm_s24le, 48000 Hz, stereo, s32, 2304 kb/s Stream mapping: Stream #0.0 -> #0.0 Stream #0.1 -> #0.1 Press [q] to stop, [?] for help [mxf_d10 @ 00000000003BF460] package type:1 [mxf_d10 @ 00000000003BF460] package type:2 [mxf_d10 @ 00000000003BF460] edit units count 0 frame= 341 fps= 25 q=3.0 size= 103570kB time=00:00:13.60 bitrate=62385.4kbits/s eta=00:00:06.41 ------------------------------------------------------------- FFMPEG (24bit audio): ffmpegnew -i I:\IMX_tests\IMX50_CARBON.avi -map 0:v -map 0:a -c:v mpeg2video -r 25 -pix_fmt yuv422p -aspect 4:3 -minrate 50000k -maxrate 50000k -b:v 50000k -intra -flags +ildct+low_del ay -intra_vlc 1 -non_linear_quant 1 -ps 1 -qmin 1 -qmax 3 -top 1 -dc 10 -bufsize 2000000 -rc_init_occupancy 2000000 -rc_max_vbv_use 1 -rc_min_vbv_use 1 -c:a pcm_s24le -ar 48000 -f mxf_d10 I:\IMX_tests \_FFMPEGNEW_PAL_IMX_24bit_2.mxf ffmpeg version N-71727-g46778ab Copyright (c) 2000-2015 the FFmpeg developers built with gcc 4.9.2 (GCC) configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libblu ray --enable-libbs2b --enable-libcaca --enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enab le-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --ena ble-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-lzma --ena ble-decklink --enable-zlib libavutil 54. 23.101 / 54. 23.101 libavcodec 56. 35.101 / 56. 35.101 libavformat 56. 31.100 / 56. 31.100 libavdevice 56. 4.100 / 56. 4.100 libavfilter 5. 14.100 / 5. 14.100 libswscale 3. 1.101 / 3. 1.101 libswresample 1. 1.100 / 1. 1.100 libpostproc 53. 3.100 / 53. 3.100 Input #0, avi, from 'I:\IMX_tests\IMX50_CARBON.avi': Metadata: encoder : Lavf55.0.100 timecode : 00:00:00:00 Duration: 00:00:20.00, start: 0.000000, bitrate: 113291 kb/s Stream #0:0: Video: ffvhuff (FFVH / 0x48564646), yuv422p, 720x608, 111196 kb/s, SAR 152:135 DAR 4:3, 25 fps, 25 tbr, 25 tbn, 25 tbc Stream #0:1: Audio: pcm_s24le ([1][0][0][0] / 0x0001), 48000 Hz, stereo, s32 (24 bit), 2304 kb/s File 'I:\IMX_tests\_FFMPEGNEW_PAL_IMX_24bit_2.mxf' already exists. Overwrite ? [y/N] y Output #0, mxf_d10, to 'I:\IMX_tests\_FFMPEGNEW_PAL_IMX_24bit_2.mxf': Metadata: timecode : 00:00:00:00 encoder : Lavf56.31.100 Stream #0:0: Video: mpeg2video, yuv422p, 720x608 [SAR 152:135 DAR 4:3], q=1-3, 50000 kb/s, 25 fps, 25 tbn, 25 tbc Metadata: encoder : Lavc56.35.101 mpeg2video Stream #0:1: Audio: pcm_s24le, 48000 Hz, stereo, s32 (24 bit), 2304 kb/s Metadata: encoder : Lavc56.35.101 pcm_s24le Stream mapping: Stream #0:0 -> #0:0 (ffvhuff (native) -> mpeg2video (native)) Stream #0:1 -> #0:1 (pcm_s24le (native) -> pcm_s24le (native)) Press [q] to stop, [?] for help [mxf_d10 @ 00000000003bf240] the number of audio channels shall be 4 or 8 : the output will not comply to MXF D-10 specs, use -d10_channelcount to fix this frame= 500 fps=347 q=1.6 Lsize= 152756kB time=00:00:20.00 bitrate=62568.9kbits/s video:122070kB audio:5625kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 19.625412%
On 28/04/15 09:20, Christoph Gerstbauer wrote:
Hello
I am making tests with IMX50/MXF encodings with FFMBC and FFMPEG. (with 24bit audio) The tests compare the final files with the IRT MXF Analyzer Pro tool to be shure to be IRT conform. (My used syntax is at the bottom of this mail)
Both files (generated with ffmbc and ffmpeg) are working very well in editing tools but there is a little difference:
The IMX50 generated by ffmbc has no errors/warnings at IRT MXF Analyzer (with16bit audio). It is really perfect. In fact I never had a clean "green" MXF by testing other probes from other encoding tools. Only the IRT probes itself are clean. So this MXF is IRT conform when using the ffmbc standard target preset "imx50".
The Analyzis of the IMX50/MXF generated by FFMPEG (latest build from zeganoe) has 1 warning and 1 error:
WARNING: "Fill Item Key with a wrong RP210 (SMPTE Metadata Dictionary) version number of 0x01. The correct version number is 0x02"
ERROR: "The Sound Essence Descriptor signals that the number if quantization bits is 24, which is higher than actually required (16) as detemined by parsing the essence."
Due to the fact that I am producing 24bit audio I could prevent the WARNING by producing 16bit audio. But is there a problem in the MXF when producing 24bit? Sound works in editing tools. Furthermore ffmbc produces for standard a IMX with 16bit -> If I force ffmbc to do 24bit, I get the same error.
Due to the warning: I found out that both files are different regarding these values (by reading out via ffprobe - show_streams)
FFMBC IMX FILE stream 0:0: color_range=tv color_space=smpte170m color_transfer=bt709 color_primaries=bt470bg
FFMPEG IMX FILE stream 0:0: color_range=tv color_space=unknown color_transfer=unknown color_primaries=unknown
So my questions are :
1.) How can I produce (with ffmpeg) the same output like ffmbc with these 4 metadata flags: color_range=tv color_space=smpte170m color_transfer=bt709 color_primaries=bt470bg I didnt found a answer to that in the ffmpeg documentation :/
Submit a patch that includes these flags. I'm not sure if ffmbc actually inspects the source material to check these figures are correct, or just hard codes them, I suspect the ffmpeg results are more "honest".
2.) Maybe somebody knows: Do these 4 metadata flags have a connection to the Warning message of the MXF Analyzer? -> "Fill Item Key with a wrong RP210 (SMPTE Metadata Dictionary) version number of 0x01. The correct version number is 0x02"
The UL version number is the version number where the UL first appeared in the defining registry* and is generally ignored in all UL parsing (certainly in ffmpeg). Its only really there for checking back when a particular UL appeared in the spec, and has no functional use. So no, I do not believe there is a connection. As errors go it is basically cosmetic. There are a number of questionable UL's in the ffmpeg code, and as they originate from a number of different standards, working out where they came from and checking them is somewhat tedious, which is why I am trying to rationalise them. Having said that an RP210 UL should be straightforward to check and correct, if the actual key is know (you do not provide it).
If nobody know this answer I could do the test for myself by be able to encode with the upper params in 1.).
3.) Is there an syntax option in ffmpeg for 24bit audio encoding to prevent this ERROR: "The Sound Essence Descriptor signals that the number if quantization bits is 24, which is higher than actually required (16) as detemined by parsing the essence."
This is more a warning than an error, if you are using 24bit it will be flagged as such, which is correct. however converting 16 -> 24 is usually done by padding with 0, so the analysis is simply warning that that you are wasting bits. You could try adding some noise I suppose ;)
Best Regards Christoph
[...]
* RP S336m Table 11 says "Version Number...Version of the Defined-Length Pack Register which first defines the item specified by the Defined-Length Pack Designator" -- Tim. Key Fingerprint 38CF DB09 3ED0 F607 8B67 6CED 0C0B FC44 8B0B FC83
participants (2)
-
Christoph Gerstbauer -
tim nicholson