<p>Thanks for posting <code>-v debug</code> output.  From that, I see the <code>colormatrix</code> filter doesn't support high-bit-depth inputs.  There's an auto-inserted scale filter downsampling to <code>yuv422p</code> (which means 8bit), before it.   </p>

<p>You might as well compress the output with an 8-bit-per-component codec, if you need ffmpeg's colormatrix anyway, since ffmpeg already downsampled it.  (some codecs, like libx264, get somewhat better compression efficiency operating in high-bit-depth mode, but x264 runs slower that way.  If you're encoding to prores, clearly CPU time is more important than bitrate per quality.)</p>

<p>The behaviour you see with the colormatrix filter might actually be due to this <a href="https://trac.ffmpeg.org/ticket/3345#no1" rel="nofollow">known bug in ffmpeg's swscale</a>.  The bug only refers to the unscaled special case, but possible it's happening while downscaling too?  More likely that <code>colormatrix</code>'s modifications to your data are what causes the tint, and the output video is still being converted back to RGB (by the player) with bt709 coefficients.</p>

<p>If you get correct looking results without the colormatrix filter, then I guess don't use it?  Maybe google up whether prores bitstreams, or the containers they go in, have bits to signal the color properties of the YUV data.  And how players decide which coefficients to use.</p>

<p>Whether any of the open source players do it correctly, according to whatever specs there are for the format, is a separate issue.  Don't assume that all / any players bother to look at color matrix info in the input file.  Probably they feed YUV video to the GPU for scaling / RGB-conversion.  Presumably the color coefficients are programmable in most YUV-input video APIs, but IDK, not something I've looked in to, except mplayer's opengl output (which does allow variable coefficients).</p>

<p>So it's possible that VLC or whatever other player might show always assume bt709 for prores input, while your NLE might make a different choice.  So you can at least test that with the current version of what you're using, you have a process that doesn't bias your colors.  Either because it all works right, or because multiple things assume bt709 when they shouldn't -profile:v 3, and your setup would break if one part started obeying the standards.  (That's always the danger with just experimental testing that something works now.)</p>

<p>I have no use for prores myself, so I'll leave the detailed digging into it for you.  If you find something useful, you could post an answer to your own question.  Hopefully this points you in the right direction, though.</p>

<p>re: prores:  I assume ffmpeg's implementation of prores is just not very optimized, because on the Sintel trailer, it's no faster than lossless x264.  And x264 <code>-crf 1</code> or <code>-crf 5</code> should get bitrates down to prores levels, while being only slightly lossy.</p>

CC BY-SA 3.0
2015-01-24T22:50:42.090Z
2015-01-24T22:50:42.090Z
Peter Cordes
<p>I am downscaling an HD movie from 1920x1080 to 720x576 and want to make sure the color conversion is done correctly, which with my current settings I am sure it is not. I am coming from an HD Prores HQ, going to an SD Prores HQ.
With my current command (below) it is introducing a very faint green pattern / interference, I can see this when zooming into the video. If I remove the <code>colormatrix=bt709:bt601</code> altogether then the very faint green pattern / interference goes. 
So my question is do I need any color conversion (is ffmpeg already doing this for me) and if I do, what would be the correct way to apply this?</p>

<p>Here is my current command:</p>

<pre><code>/Users/kevinw/Desktop/Python/ffmpeg/ffmpeg -r 25 -i "/Volumes/Kevs_GRAID/Downconvert_Tests/TestInput.mov" -loglevel debug -af atempo=1.04166666667 -map 0:0 -vf scale=720:576,colormatrix=bt709:bt601 -map 0:1 -map 0:2 -map 0:3 -map 0:4 -map 0:5 -map 0:6 -map 0:7 -vcodec prores -profile:v 3 -c:a pcm_s16le -y "/Volumes/Kevs_GRAID/Downconvert_Tests/TestOutput.mov"
</code></pre>

<p>UPDATE:
Here is another output with -loglevel debug which gives more info:</p>

<pre><code>/Users/kevinw/Desktop/Python/ffmpeg/ffmpeg -r 25 -i "/Volumes/Kevs_GRAID/Downconvert_Tests/TestInput.mov" -loglevel debug -af atempo=1.04166666667 -map 0:0 -vf scale=720:576,colormatrix=bt709:bt601 -map 0:1 -map 0:2 -map 0:3 -map 0:4 -map 0:5 -map 0:6 -map 0:7 -vcodec prores -profile:v 3 -c:a pcm_s16le -y "/Volumes/Kevs_GRAID/Downconvert_Tests/TestOutput.mov"
ffmpeg version 2.5.3-tessus Copyright (c) 2000-2015 the FFmpeg developers
  built on Jan 10 2015 01:19:50 with Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
  configuration: --cc=/usr/bin/clang --prefix=/Users/tessus/data/ext/ffmpeg/sw --as=yasm --extra-version=tessus --disable-shared --enable-static --disable-ffplay --enable-gpl --enable-pthreads --enable-postproc --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libx265 --enable-libxvid --enable-libspeex --enable-bzlib --enable-zlib --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libxavs --enable-libsoxr --enable-libwavpack --enable-version3 --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvpx --enable-libgsm --enable-libopus --enable-libmodplug --enable-fontconfig --enable-libfreetype --enable-libass --enable-libbluray --enable-filters --disable-indev=qtkit --disable-indev=x11grab_xcb --enable-runtime-cpudetect
  libavutil      54. 15.100 / 54. 15.100
  libavcodec     56. 13.100 / 56. 13.100
  libavformat    56. 15.102 / 56. 15.102
  libavdevice    56.  3.100 / 56.  3.100
  libavfilter     5.  2.103 /  5.  2.103
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Splitting the commandline.
Reading option '-r' ... matched as option 'r' (set frame rate (Hz value, fraction or abbreviation)) with argument '25'.
Reading option '-i' ... matched as input file with argument '/Volumes/Kevs_GRAID/Downconvert_Tests/TestInput.mov'.
Reading option '-loglevel' ... matched as option 'loglevel' (set logging level) with argument 'debug'.
Reading option '-af' ... matched as option 'af' (set audio filters) with argument 'atempo=1.04166666667'.
Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '0:0'.
Reading option '-vf' ... matched as option 'vf' (set video filters) with argument 'scale=720:576,colormatrix=bt709:bt601'.
Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '0:1'.
Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '0:2'.
Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '0:3'.
Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '0:4'.
Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '0:5'.
Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '0:6'.
Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '0:7'.
Reading option '-vcodec' ... matched as option 'vcodec' (force video codec ('copy' to copy stream)) with argument 'prores'.
Reading option '-profile:v' ... matched as option 'profile' (set profile) with argument '3'.
Reading option '-c:a' ... matched as option 'c' (codec name) with argument 'pcm_s16le'.
Reading option '-y' ... matched as option 'y' (overwrite output files) with argument '1'.
Reading option '/Volumes/Kevs_GRAID/Downconvert_Tests/TestOutput.mov' ... matched as output file.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option loglevel (set logging level) with argument debug.
Applying option y (overwrite output files) with argument 1.
Successfully parsed a group of options.
Parsing a group of options: input file /Volumes/Kevs_GRAID/Downconvert_Tests/TestInput.mov.
Applying option r (set frame rate (Hz value, fraction or abbreviation)) with argument 25.
Successfully parsed a group of options.
Opening an input file: /Volumes/Kevs_GRAID/Downconvert_Tests/TestInput.mov.
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fa3db01bc00] Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fa3db01bc00] ISO: File Type Major Brand: qt  
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fa3db01bc00] Before avformat_find_stream_info() pos: 11833 bytes read:65536 seeks:2
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fa3db01bc00] All info found
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fa3db01bc00] Ignoring outlier non primary stream starttime -445.249969
    Last message repeated 1 times
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fa3db01bc00] After avformat_find_stream_info() pos: 2059945 bytes read:2146400 seeks:4 frames:338
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Volumes/Kevs_GRAID/Downconvert_Tests/TestInput.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 537199360
    compatible_brands: qt  
    creation_time   : 2015-01-24 14:13:11
  Duration: 00:00:05.96, start: 0.000000, bitrate: 178365 kb/s
    Stream #0:0(eng), 1, 1/24: Video: prores (apch / 0x68637061), yuv422p10le(bt709), 1920x1080, 1/24, 169133 kb/s, SAR 1:1 DAR 16:9, 24 fps, 24 tbr, 24 tbn, 24 tbc (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
      encoder         : Apple ProRes 422 HQ
      timecode        : 00:00:00:00
    Stream #0:1(eng), 48, 1/48000: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, 1 channels (FL), s32 (24 bit), 1152 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
    Stream #0:2(eng), 48, 1/48000: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, 1 channels (FR), s32 (24 bit), 1152 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
    Stream #0:3(eng), 48, 1/48000: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32 (24 bit), 1152 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
    Stream #0:4(eng), 48, 1/48000: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, 1 channels (LFE), s32 (24 bit), 1152 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
    Stream #0:5(eng), 48, 1/48000: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, 1 channels (BL), s32 (24 bit), 1152 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
    Stream #0:6(eng), 48, 1/48000: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, 1 channels (BR), s32 (24 bit), 1152 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
    Stream #0:7(eng), 48, 1/48000: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, downmix, s32 (24 bit), 2304 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
    Stream #0:8(eng), 1, 1/24: Data: none (tmcd / 0x64636D74), 1/24 (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
      timecode        : 00:00:00:00
Successfully opened the file.
Parsing a group of options: output file /Volumes/Kevs_GRAID/Downconvert_Tests/TestOutput.mov.
Applying option af (set audio filters) with argument atempo=1.04166666667.
Applying option map (set input stream mapping) with argument 0:0.
Applying option vf (set video filters) with argument scale=720:576,colormatrix=bt709:bt601.
Applying option map (set input stream mapping) with argument 0:1.
Applying option map (set input stream mapping) with argument 0:2.
Applying option map (set input stream mapping) with argument 0:3.
Applying option map (set input stream mapping) with argument 0:4.
Applying option map (set input stream mapping) with argument 0:5.
Applying option map (set input stream mapping) with argument 0:6.
Applying option map (set input stream mapping) with argument 0:7.
Applying option vcodec (force video codec ('copy' to copy stream)) with argument prores.
Applying option profile:v (set profile) with argument 3.
Applying option c:a (codec name) with argument pcm_s16le.
Successfully parsed a group of options.
Opening an output file: /Volumes/Kevs_GRAID/Downconvert_Tests/TestOutput.mov.
Successfully opened the file.
detected 8 logical cores
[Parsed_scale_0 @ 0x7fa3d9d24020] Setting 'w' to value '720'
[Parsed_scale_0 @ 0x7fa3d9d24020] Setting 'h' to value '576'
[Parsed_scale_0 @ 0x7fa3d9d24020] Setting 'flags' to value '0x4'
[Parsed_scale_0 @ 0x7fa3d9d24020] w:720 h:576 flags:'0x4' interl:0
[Parsed_colormatrix_1 @ 0x7fa3d9c005e0] Setting 'src' to value 'bt709'
[Parsed_colormatrix_1 @ 0x7fa3d9c005e0] Setting 'dst' to value 'bt601'
[graph 0 input from stream 0:0 @ 0x7fa3d9c00f20] Setting 'video_size' to value '1920x1080'
[graph 0 input from stream 0:0 @ 0x7fa3d9c00f20] Setting 'pix_fmt' to value '74'
[graph 0 input from stream 0:0 @ 0x7fa3d9c00f20] Setting 'time_base' to value '1/25'
[graph 0 input from stream 0:0 @ 0x7fa3d9c00f20] Setting 'pixel_aspect' to value '1/1'
[graph 0 input from stream 0:0 @ 0x7fa3d9c00f20] Setting 'sws_param' to value 'flags=2'
[graph 0 input from stream 0:0 @ 0x7fa3d9c00f20] Setting 'frame_rate' to value '25/1'
[graph 0 input from stream 0:0 @ 0x7fa3d9c00f20] w:1920 h:1080 pixfmt:yuv422p10le tb:1/25 fr:25/1 sar:1/1 sws_param:flags=2
[force CFR for input from stream 0:0 @ 0x7fa3d9c01040] Setting 'expr' to value 'N'
[format @ 0x7fa3d9c018c0] compat: called with args=[yuv422p10le]
[format @ 0x7fa3d9c018c0] Setting 'pix_fmts' to value 'yuv422p10le'
[auto-inserted scaler 0 @ 0x7fa3d9c02160] Setting 'flags' to value '0x4'
[auto-inserted scaler 0 @ 0x7fa3d9c02160] w:iw h:ih flags:'0x4' interl:0
[format @ 0x7fa3d9c018c0] auto-inserting filter 'auto-inserted scaler 0' between the filter 'Parsed_colormatrix_1' and the filter 'format'
[AVFilterGraph @ 0x7fa3d9d20900] query_formats: 6 queried, 4 merged, 1 already done, 0 delayed
[Parsed_scale_0 @ 0x7fa3d9d24020] picking yuv422p out of 3 ref:yuv422p10le alpha:0
[graph 0 input from stream 0:0 @ 0x7fa3d9c00f20] TB:0.040000 FRAME_RATE:25.000000 SAMPLE_RATE:nan
[Parsed_scale_0 @ 0x7fa3d9d24020] w:1920 h:1080 fmt:yuv422p10le sar:1/1 -&gt; w:720 h:576 fmt:yuv422p sar:64/45 flags:0x4
[Parsed_colormatrix_1 @ 0x7fa3d9c005e0] bt709 -&gt; bt601
[auto-inserted scaler 0 @ 0x7fa3d9c02160] w:720 h:576 fmt:yuv422p sar:64/45 -&gt; w:720 h:576 fmt:yuv422p10le sar:64/45 flags:0x4
[Parsed_atempo_0 @ 0x7fa3d9d24680] Setting 'tempo' to value '1.04166666667'
[graph 1 input from stream 0:1 @ 0x7fa3d9f02ec0] Setting 'time_base' to value '1/48000'
[graph 1 input from stream 0:1 @ 0x7fa3d9f02ec0] Setting 'sample_rate' to value '48000'
[graph 1 input from stream 0:1 @ 0x7fa3d9f02ec0] Setting 'sample_fmt' to value 's32'
[graph 1 input from stream 0:1 @ 0x7fa3d9f02ec0] Setting 'channel_layout' to value '0x1'
[graph 1 input from stream 0:1 @ 0x7fa3d9f02ec0] tb:1/48000 samplefmt:s32 samplerate:48000 chlayout:0x1
[audio format for output stream 0:1 @ 0x7fa3d9f03320] Setting 'sample_fmts' to value 's16'
[audio format for output stream 0:1 @ 0x7fa3d9f03320] auto-inserting filter 'auto-inserted resampler 0' between the filter 'Parsed_atempo_0' and the filter 'audio format for output stream 0:1'
[AVFilterGraph @ 0x7fa3d9d24420] query_formats: 4 queried, 6 merged, 3 already done, 0 delayed
[auto-inserted resampler 0 @ 0x7fa3d9f03800] ch:1 chl:1 channels (FL) fmt:s32 r:48000Hz -&gt; ch:1 chl:1 channels (FL) fmt:s16 r:48000Hz
[Parsed_atempo_0 @ 0x7fa3d9f03e20] Setting 'tempo' to value '1.04166666667'
[graph 2 input from stream 0:2 @ 0x7fa3d9f04200] Setting 'time_base' to value '1/48000'
[graph 2 input from stream 0:2 @ 0x7fa3d9f04200] Setting 'sample_rate' to value '48000'
[graph 2 input from stream 0:2 @ 0x7fa3d9f04200] Setting 'sample_fmt' to value 's32'
[graph 2 input from stream 0:2 @ 0x7fa3d9f04200] Setting 'channel_layout' to value '0x2'
[graph 2 input from stream 0:2 @ 0x7fa3d9f04200] tb:1/48000 samplefmt:s32 samplerate:48000 chlayout:0x2
[audio format for output stream 0:2 @ 0x7fa3d9f04740] Setting 'sample_fmts' to value 's16'
[audio format for output stream 0:2 @ 0x7fa3d9f04740] auto-inserting filter 'auto-inserted resampler 0' between the filter 'Parsed_atempo_0' and the filter 'audio format for output stream 0:2'
[AVFilterGraph @ 0x7fa3d9f03bc0] query_formats: 4 queried, 6 merged, 3 already done, 0 delayed
[auto-inserted resampler 0 @ 0x7fa3d9f04ec0] ch:1 chl:1 channels (FR) fmt:s32 r:48000Hz -&gt; ch:1 chl:1 channels (FR) fmt:s16 r:48000Hz
[Parsed_atempo_0 @ 0x7fa3d9c01ec0] Setting 'tempo' to value '1.04166666667'
[graph 3 input from stream 0:3 @ 0x7fa3d9c02660] Setting 'time_base' to value '1/48000'
[graph 3 input from stream 0:3 @ 0x7fa3d9c02660] Setting 'sample_rate' to value '48000'
[graph 3 input from stream 0:3 @ 0x7fa3d9c02660] Setting 'sample_fmt' to value 's32'
[graph 3 input from stream 0:3 @ 0x7fa3d9c02660] Setting 'channel_layout' to value '0x4'
[graph 3 input from stream 0:3 @ 0x7fa3d9c02660] tb:1/48000 samplefmt:s32 samplerate:48000 chlayout:0x4
[audio format for output stream 0:3 @ 0x7fa3d9c02ae0] Setting 'sample_fmts' to value 's16'
[audio format for output stream 0:3 @ 0x7fa3d9c02ae0] auto-inserting filter 'auto-inserted resampler 0' between the filter 'Parsed_atempo_0' and the filter 'audio format for output stream 0:3'
[AVFilterGraph @ 0x7fa3d9f05220] query_formats: 4 queried, 6 merged, 3 already done, 0 delayed
[auto-inserted resampler 0 @ 0x7fa3d9c18300] ch:1 chl:mono fmt:s32 r:48000Hz -&gt; ch:1 chl:mono fmt:s16 r:48000Hz
[Parsed_atempo_0 @ 0x7fa3dc000000] Setting 'tempo' to value '1.04166666667'
[graph 4 input from stream 0:4 @ 0x7fa3d9e00340] Setting 'time_base' to value '1/48000'
[graph 4 input from stream 0:4 @ 0x7fa3d9e00340] Setting 'sample_rate' to value '48000'
[graph 4 input from stream 0:4 @ 0x7fa3d9e00340] Setting 'sample_fmt' to value 's32'
[graph 4 input from stream 0:4 @ 0x7fa3d9e00340] Setting 'channel_layout' to value '0x8'
[graph 4 input from stream 0:4 @ 0x7fa3d9e00340] tb:1/48000 samplefmt:s32 samplerate:48000 chlayout:0x8
[audio format for output stream 0:4 @ 0x7fa3d9e008a0] Setting 'sample_fmts' to value 's16'
[audio format for output stream 0:4 @ 0x7fa3d9e008a0] auto-inserting filter 'auto-inserted resampler 0' between the filter 'Parsed_atempo_0' and the filter 'audio format for output stream 0:4'
[AVFilterGraph @ 0x7fa3d9e01820] query_formats: 4 queried, 6 merged, 3 already done, 0 delayed
[auto-inserted resampler 0 @ 0x7fa3d9e010a0] ch:1 chl:1 channels (LFE) fmt:s32 r:48000Hz -&gt; ch:1 chl:1 channels (LFE) fmt:s16 r:48000Hz
[Parsed_atempo_0 @ 0x7fa3d9c02ee0] Setting 'tempo' to value '1.04166666667'
[graph 5 input from stream 0:5 @ 0x7fa3d9c187a0] Setting 'time_base' to value '1/48000'
[graph 5 input from stream 0:5 @ 0x7fa3d9c187a0] Setting 'sample_rate' to value '48000'
[graph 5 input from stream 0:5 @ 0x7fa3d9c187a0] Setting 'sample_fmt' to value 's32'
[graph 5 input from stream 0:5 @ 0x7fa3d9c187a0] Setting 'channel_layout' to value '0x10'
[graph 5 input from stream 0:5 @ 0x7fa3d9c187a0] tb:1/48000 samplefmt:s32 samplerate:48000 chlayout:0x10
[audio format for output stream 0:5 @ 0x7fa3d9c18b80] Setting 'sample_fmts' to value 's16'
[audio format for output stream 0:5 @ 0x7fa3d9c18b80] auto-inserting filter 'auto-inserted resampler 0' between the filter 'Parsed_atempo_0' and the filter 'audio format for output stream 0:5'
[AVFilterGraph @ 0x7fa3dc1001c0] query_formats: 4 queried, 6 merged, 3 already done, 0 delayed
[auto-inserted resampler 0 @ 0x7fa3d9c19280] ch:1 chl:1 channels (BL) fmt:s32 r:48000Hz -&gt; ch:1 chl:1 channels (BL) fmt:s16 r:48000Hz
[Parsed_atempo_0 @ 0x7fa3d9e03ce0] Setting 'tempo' to value '1.04166666667'
[graph 6 input from stream 0:6 @ 0x7fa3d9e040a0] Setting 'time_base' to value '1/48000'
[graph 6 input from stream 0:6 @ 0x7fa3d9e040a0] Setting 'sample_rate' to value '48000'
[graph 6 input from stream 0:6 @ 0x7fa3d9e040a0] Setting 'sample_fmt' to value 's32'
[graph 6 input from stream 0:6 @ 0x7fa3d9e040a0] Setting 'channel_layout' to value '0x20'
[graph 6 input from stream 0:6 @ 0x7fa3d9e040a0] tb:1/48000 samplefmt:s32 samplerate:48000 chlayout:0x20
[audio format for output stream 0:6 @ 0x7fa3d9e045a0] Setting 'sample_fmts' to value 's16'
[audio format for output stream 0:6 @ 0x7fa3d9e045a0] auto-inserting filter 'auto-inserted resampler 0' between the filter 'Parsed_atempo_0' and the filter 'audio format for output stream 0:6'
[AVFilterGraph @ 0x7fa3d9e013a0] query_formats: 4 queried, 6 merged, 3 already done, 0 delayed
[auto-inserted resampler 0 @ 0x7fa3d9e04d20] ch:1 chl:1 channels (BR) fmt:s32 r:48000Hz -&gt; ch:1 chl:1 channels (BR) fmt:s16 r:48000Hz
[Parsed_atempo_0 @ 0x7fa3d9e04b80] Setting 'tempo' to value '1.04166666667'
[graph 7 input from stream 0:7 @ 0x7fa3d9e05300] Setting 'time_base' to value '1/48000'
[graph 7 input from stream 0:7 @ 0x7fa3d9e05300] Setting 'sample_rate' to value '48000'
[graph 7 input from stream 0:7 @ 0x7fa3d9e05300] Setting 'sample_fmt' to value 's32'
[graph 7 input from stream 0:7 @ 0x7fa3d9e05300] Setting 'channel_layout' to value '0x60000000'
[graph 7 input from stream 0:7 @ 0x7fa3d9e05300] tb:1/48000 samplefmt:s32 samplerate:48000 chlayout:0x60000000
[audio format for output stream 0:7 @ 0x7fa3d9e057e0] Setting 'sample_fmts' to value 's16'
[audio format for output stream 0:7 @ 0x7fa3d9e057e0] auto-inserting filter 'auto-inserted resampler 0' between the filter 'Parsed_atempo_0' and the filter 'audio format for output stream 0:7'
[AVFilterGraph @ 0x7fa3d9d24b40] query_formats: 4 queried, 6 merged, 3 already done, 0 delayed
[auto-inserted resampler 0 @ 0x7fa3d9e05d40] ch:2 chl:downmix fmt:s32 r:48000Hz -&gt; ch:2 chl:downmix fmt:s16 r:48000Hz
Output #0, mov, to '/Volumes/Kevs_GRAID/Downconvert_Tests/TestOutput.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 537199360
    compatible_brands: qt  
    encoder         : Lavf56.15.102
    Stream #0:0(eng), 0, 1/12800: Video: prores (apch) (apch / 0x68637061), yuv422p10le, 720x576 [SAR 64:45 DAR 16:9], 1/25, q=2-31, 200 kb/s, 25 fps, 12800 tbn, 25 tbc (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
      timecode        : 00:00:00:00
      encoder         : Lavc56.13.100 prores
    Stream #0:1(eng), 0, 1/48000: Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, 1 channels (FL), s16 (24 bit), 768 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
      encoder         : Lavc56.13.100 pcm_s16le
    Stream #0:2(eng), 0, 1/48000: Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, 1 channels (FR), s16 (24 bit), 768 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
      encoder         : Lavc56.13.100 pcm_s16le
    Stream #0:3(eng), 0, 1/48000: Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, mono, s16 (24 bit), 768 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
      encoder         : Lavc56.13.100 pcm_s16le
    Stream #0:4(eng), 0, 1/48000: Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, 1 channels (LFE), s16 (24 bit), 768 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
      encoder         : Lavc56.13.100 pcm_s16le
    Stream #0:5(eng), 0, 1/48000: Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, 1 channels (BL), s16 (24 bit), 768 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
      encoder         : Lavc56.13.100 pcm_s16le
    Stream #0:6(eng), 0, 1/48000: Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, 1 channels (BR), s16 (24 bit), 768 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
      encoder         : Lavc56.13.100 pcm_s16le
    Stream #0:7(eng), 0, 1/48000: Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, downmix, s16 (24 bit), 1536 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
      encoder         : Lavc56.13.100 pcm_s16le
Stream mapping:
  Stream #0:0 -&gt; #0:0 (prores (native) -&gt; prores (native))
  Stream #0:1 -&gt; #0:1 (pcm_s24le (native) -&gt; pcm_s16le (native))
  Stream #0:2 -&gt; #0:2 (pcm_s24le (native) -&gt; pcm_s16le (native))
  Stream #0:3 -&gt; #0:3 (pcm_s24le (native) -&gt; pcm_s16le (native))
  Stream #0:4 -&gt; #0:4 (pcm_s24le (native) -&gt; pcm_s16le (native))
  Stream #0:5 -&gt; #0:5 (pcm_s24le (native) -&gt; pcm_s16le (native))
  Stream #0:6 -&gt; #0:6 (pcm_s24le (native) -&gt; pcm_s16le (native))
  Stream #0:7 -&gt; #0:7 (pcm_s24le (native) -&gt; pcm_s16le (native))
Press [q] to stop, [?] for help
[output stream 0:0 @ 0x7fa3d9c01620] EOF on sink link output stream 0:0:default.s    
[output stream 0:6 @ 0x7fa3d9e04420] EOF on sink link output stream 0:6:default.
[output stream 0:4 @ 0x7fa3d9e00680] EOF on sink link output stream 0:4:default.
[output stream 0:5 @ 0x7fa3d9c18a40] EOF on sink link output stream 0:5:default.
[output stream 0:7 @ 0x7fa3d9e05660] EOF on sink link output stream 0:7:default.
[output stream 0:1 @ 0x7fa3d9f031e0] EOF on sink link output stream 0:1:default.
[output stream 0:2 @ 0x7fa3d9f045e0] EOF on sink link output stream 0:2:default.
[output stream 0:3 @ 0x7fa3d9c02960] EOF on sink link output stream 0:3:default.
No more output streams to write to, finishing.
frame=  143 fps= 80 q=0.0 Lsize=   41605kB time=00:00:05.73 bitrate=59405.7kbits/s    
video:37293kB audio:4297kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.035538%
Input file #0 (/Volumes/Kevs_GRAID/Downconvert_Tests/TestInput.mov):
  Input stream #0:0 (video): 143 packets read (125969472 bytes); 143 frames decoded; 
  Input stream #0:1 (audio): 286 packets read (858000 bytes); 286 frames decoded (286000 samples); 
  Input stream #0:2 (audio): 286 packets read (858000 bytes); 286 frames decoded (286000 samples); 
  Input stream #0:3 (audio): 286 packets read (858000 bytes); 286 frames decoded (286000 samples); 
  Input stream #0:4 (audio): 286 packets read (858000 bytes); 286 frames decoded (286000 samples); 
  Input stream #0:5 (audio): 286 packets read (858000 bytes); 286 frames decoded (286000 samples); 
  Input stream #0:6 (audio): 286 packets read (858000 bytes); 286 frames decoded (286000 samples); 
  Input stream #0:7 (audio): 286 packets read (1716000 bytes); 286 frames decoded (286000 samples); 
  Input stream #0:8 (data): 1 packets read (4 bytes); 
  Total: 2146 packets (132833476 bytes) demuxed
Output file #0 (/Volumes/Kevs_GRAID/Downconvert_Tests/TestOutput.mov):
  Output stream #0:0 (video): 143 frames encoded; 143 packets muxed (38188456 bytes); 
  Output stream #0:1 (audio): 288 frames encoded (275222 samples); 288 packets muxed (550444 bytes); 
  Output stream #0:2 (audio): 287 frames encoded (275391 samples); 287 packets muxed (550782 bytes); 
  Output stream #0:3 (audio): 285 frames encoded (275353 samples); 285 packets muxed (550706 bytes); 
  Output stream #0:4 (audio): 285 frames encoded (273541 samples); 285 packets muxed (547082 bytes); 
  Output stream #0:5 (audio): 285 frames encoded (275235 samples); 285 packets muxed (550470 bytes); 
  Output stream #0:6 (audio): 290 frames encoded (275244 samples); 290 packets muxed (550488 bytes); 
  Output stream #0:7 (audio): 284 frames encoded (275022 samples); 284 packets muxed (1100088 bytes); 
  Total: 2147 packets (42588516 bytes) muxed
2145 frames successfully decoded, 0 decoding errors
[AVIOContext @ 0x7fa3d9d23860] Statistics: 260 seeks, 3475 writeouts
[AVIOContext @ 0x7fa3d9f00000] Statistics: 132931780 bytes read, 4 seeks
</code></pre>

CC BY-SA 3.0
2015-01-24T00:15:39.627Z
Are you confident that the player you're using obeys the color matrix signalled in the file?  Or that ffmpeg is signalling the different colorspace correctly in the output file?  I see on input, it says `yuv422p10le(bt709)`.  What does ffmpeg -i say if you run it on the output file of this conversion?
Peter Cordes
CC BY-SA 3.0
2015-01-24T00:18:23.727Z
IDK what you're feeding the SD video to, but it might make sense to merge the pcm streams into a single multichannel audio stream, and encode that with Opus, or libfdk_aac.  Or FLAC.  Looks like ProRes still takes most of the space, though.
Peter Cordes
CC BY-SA 3.0
2015-01-24T13:50:48.590Z
Hi Peter, running the output file back through ffmpeg reports to be just yuv422p10le, nothing else, not 601 or 709.
speedyrazor
CC BY-SA 3.0
2015-02-24T03:05:25.753Z
I've recently been starting to care about colormatrix for getting colors correct.  Some files signal a colormatrix in the h.264 metadata.  mpv (http://mpv.io/) will correctly react to these flags, otherwise defaulting to BT.601, or BT.709 if `width >= 1280 || height > 576`.  mplayer (which mpv is a fork of) doesn't obey the colormatrix info in an h.264 file.  I haven't tested a lot with ffmpeg reading flagged files, though.  Usually I feed ffmpeg input that's already YUV, and don't want to convert it from one colorspace to another.
Peter Cordes
<ffmpeg><conversion><standards-converter>
ffmpeg Color conversion - 709 to 601
speedyrazor
# ffmpeg Color conversion - 709 to 601

(Asked by: username_0 on 2015-01-22)

I am downscaling an HD movie from 1920x1080 to 720x576 and want to make sure the color conversion is done correctly, which with my current settings I am sure it is not. I am coming from an HD Prores HQ, going to an SD Prores HQ.
With my current command (below) it is introducing a very faint green pattern / interference, I can see this when zooming into the video. If I remove the colormatrix=bt709:bt601 altogether then the very faint green pattern / interference goes. 
So my question is do I need any color conversion (is ffmpeg already doing this for me) and if I do, what would be the correct way to apply this?
Here is my current command:
/Users/kevinw/Desktop/Python/ffmpeg/ffmpeg -r 25 -i "/Volumes/Kevs_GRAID/Downconvert_Tests/TestInput.mov" -loglevel debug -af atempo=1.04166666667 -map 0:0 -vf scale=720:576,colormatrix=bt709:bt601 -map 0:1 -map 0:2 -map 0:3 -map 0:4 -map 0:5 -map 0:6 -map 0:7 -vcodec prores -profile:v 3 -c:a pcm_s16le -y "/Volumes/Kevs_GRAID/Downconvert_Tests/TestOutput.mov"

UPDATE:
Here is another output with -loglevel debug which gives more info:
/Users/kevinw/Desktop/Python/ffmpeg/ffmpeg -r 25 -i "/Volumes/Kevs_GRAID/Downconvert_Tests/TestInput.mov" -loglevel debug -af atempo=1.04166666667 -map 0:0 -vf scale=720:576,colormatrix=bt709:bt601 -map 0:1 -map 0:2 -map 0:3 -map 0:4 -map 0:5 -map 0:6 -map 0:7 -vcodec prores -profile:v 3 -c:a pcm_s16le -y "/Volumes/Kevs_GRAID/Downconvert_Tests/TestOutput.mov"
ffmpeg version 2.5.3-tessus Copyright (c) 2000-2015 the FFmpeg developers
  built on Jan 10 2015 01:19:50 with Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
  configuration: --cc=/usr/bin/clang --prefix=/Users/tessus/data/ext/ffmpeg/sw --as=yasm --extra-version=tessus --disable-shared --enable-static --disable-ffplay --enable-gpl --enable-pthreads --enable-postproc --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libx265 --enable-libxvid --enable-libspeex --enable-bzlib --enable-zlib --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libxavs --enable-libsoxr --enable-libwavpack --enable-version3 --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvpx --enable-libgsm --enable-libopus --enable-libmodplug --enable-fontconfig --enable-libfreetype --enable-libass --enable-libbluray --enable-filters --disable-indev=qtkit --disable-indev=x11grab_xcb --enable-runtime-cpudetect
  libavutil      54. 15.100 / 54. 15.100
  libavcodec     56. 13.100 / 56. 13.100
  libavformat    56. 15.102 / 56. 15.102
  libavdevice    56.  3.100 / 56.  3.100
  libavfilter     5.  2.103 /  5.  2.103
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Splitting the commandline.
Reading option '-r' ... matched as option 'r' (set frame rate (Hz value, fraction or abbreviation)) with argument '25'.
Reading option '-i' ... matched as input file with argument '/Volumes/Kevs_GRAID/Downconvert_Tests/TestInput.mov'.
Reading option '-loglevel' ... matched as option 'loglevel' (set logging level) with argument 'debug'.
Reading option '-af' ... matched as option 'af' (set audio filters) with argument 'atempo=1.04166666667'.
Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '0:0'.
Reading option '-vf' ... matched as option 'vf' (set video filters) with argument 'scale=720:576,colormatrix=bt709:bt601'.
Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '0:1'.
Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '0:2'.
Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '0:3'.
Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '0:4'.
Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '0:5'.
Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '0:6'.
Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '0:7'.
Reading option '-vcodec' ... matched as option 'vcodec' (force video codec ('copy' to copy stream)) with argument 'prores'.
Reading option '-profile:v' ... matched as option 'profile' (set profile) with argument '3'.
Reading option '-c:a' ... matched as option 'c' (codec name) with argument 'pcm_s16le'.
Reading option '-y' ... matched as option 'y' (overwrite output files) with argument '1'.
Reading option '/Volumes/Kevs_GRAID/Downconvert_Tests/TestOutput.mov' ... matched as output file.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option loglevel (set logging level) with argument debug.
Applying option y (overwrite output files) with argument 1.
Successfully parsed a group of options.
Parsing a group of options: input file /Volumes/Kevs_GRAID/Downconvert_Tests/TestInput.mov.
Applying option r (set frame rate (Hz value, fraction or abbreviation)) with argument 25.
Successfully parsed a group of options.
Opening an input file: /Volumes/Kevs_GRAID/Downconvert_Tests/TestInput.mov.
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fa3db01bc00] Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fa3db01bc00] ISO: File Type Major Brand: qt  
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fa3db01bc00] Before avformat_find_stream_info() pos: 11833 bytes read:65536 seeks:2
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fa3db01bc00] All info found
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fa3db01bc00] Ignoring outlier non primary stream starttime -445.249969
    Last message repeated 1 times
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fa3db01bc00] After avformat_find_stream_info() pos: 2059945 bytes read:2146400 seeks:4 frames:338
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Volumes/Kevs_GRAID/Downconvert_Tests/TestInput.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 537199360
    compatible_brands: qt  
    creation_time   : 2015-01-24 14:13:11
  Duration: 00:00:05.96, start: 0.000000, bitrate: 178365 kb/s
    Stream #0:0(eng), 1, 1/24: Video: prores (apch / 0x68637061), yuv422p10le(bt709), 1920x1080, 1/24, 169133 kb/s, SAR 1:1 DAR 16:9, 24 fps, 24 tbr, 24 tbn, 24 tbc (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
      encoder         : Apple ProRes 422 HQ
      timecode        : 00:00:00:00
    Stream #0:1(eng), 48, 1/48000: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, 1 channels (FL), s32 (24 bit), 1152 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
    Stream #0:2(eng), 48, 1/48000: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, 1 channels (FR), s32 (24 bit), 1152 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
    Stream #0:3(eng), 48, 1/48000: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32 (24 bit), 1152 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
    Stream #0:4(eng), 48, 1/48000: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, 1 channels (LFE), s32 (24 bit), 1152 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
    Stream #0:5(eng), 48, 1/48000: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, 1 channels (BL), s32 (24 bit), 1152 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
    Stream #0:6(eng), 48, 1/48000: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, 1 channels (BR), s32 (24 bit), 1152 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
    Stream #0:7(eng), 48, 1/48000: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, downmix, s32 (24 bit), 2304 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
    Stream #0:8(eng), 1, 1/24: Data: none (tmcd / 0x64636D74), 1/24 (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
      timecode        : 00:00:00:00
Successfully opened the file.
Parsing a group of options: output file /Volumes/Kevs_GRAID/Downconvert_Tests/TestOutput.mov.
Applying option af (set audio filters) with argument atempo=1.04166666667.
Applying option map (set input stream mapping) with argument 0:0.
Applying option vf (set video filters) with argument scale=720:576,colormatrix=bt709:bt601.
Applying option map (set input stream mapping) with argument 0:1.
Applying option map (set input stream mapping) with argument 0:2.
Applying option map (set input stream mapping) with argument 0:3.
Applying option map (set input stream mapping) with argument 0:4.
Applying option map (set input stream mapping) with argument 0:5.
Applying option map (set input stream mapping) with argument 0:6.
Applying option map (set input stream mapping) with argument 0:7.
Applying option vcodec (force video codec ('copy' to copy stream)) with argument prores.
Applying option profile:v (set profile) with argument 3.
Applying option c:a (codec name) with argument pcm_s16le.
Successfully parsed a group of options.
Opening an output file: /Volumes/Kevs_GRAID/Downconvert_Tests/TestOutput.mov.
Successfully opened the file.
detected 8 logical cores
[Parsed_scale_0 @ 0x7fa3d9d24020] Setting 'w' to value '720'
[Parsed_scale_0 @ 0x7fa3d9d24020] Setting 'h' to value '576'
[Parsed_scale_0 @ 0x7fa3d9d24020] Setting 'flags' to value '0x4'
[Parsed_scale_0 @ 0x7fa3d9d24020] w:720 h:576 flags:'0x4' interl:0
[Parsed_colormatrix_1 @ 0x7fa3d9c005e0] Setting 'src' to value 'bt709'
[Parsed_colormatrix_1 @ 0x7fa3d9c005e0] Setting 'dst' to value 'bt601'
[graph 0 input from stream 0:0 @ 0x7fa3d9c00f20] Setting 'video_size' to value '1920x1080'
[graph 0 input from stream 0:0 @ 0x7fa3d9c00f20] Setting 'pix_fmt' to value '74'
[graph 0 input from stream 0:0 @ 0x7fa3d9c00f20] Setting 'time_base' to value '1/25'
[graph 0 input from stream 0:0 @ 0x7fa3d9c00f20] Setting 'pixel_aspect' to value '1/1'
[graph 0 input from stream 0:0 @ 0x7fa3d9c00f20] Setting 'sws_param' to value 'flags=2'
[graph 0 input from stream 0:0 @ 0x7fa3d9c00f20] Setting 'frame_rate' to value '25/1'
[graph 0 input from stream 0:0 @ 0x7fa3d9c00f20] w:1920 h:1080 pixfmt:yuv422p10le tb:1/25 fr:25/1 sar:1/1 sws_param:flags=2
[force CFR for input from stream 0:0 @ 0x7fa3d9c01040] Setting 'expr' to value 'N'
[format @ 0x7fa3d9c018c0] compat: called with args=[yuv422p10le]
[format @ 0x7fa3d9c018c0] Setting 'pix_fmts' to value 'yuv422p10le'
[auto-inserted scaler 0 @ 0x7fa3d9c02160] Setting 'flags' to value '0x4'
[auto-inserted scaler 0 @ 0x7fa3d9c02160] w:iw h:ih flags:'0x4' interl:0
[format @ 0x7fa3d9c018c0] auto-inserting filter 'auto-inserted scaler 0' between the filter 'Parsed_colormatrix_1' and the filter 'format'
[AVFilterGraph @ 0x7fa3d9d20900] query_formats: 6 queried, 4 merged, 1 already done, 0 delayed
[Parsed_scale_0 @ 0x7fa3d9d24020] picking yuv422p out of 3 ref:yuv422p10le alpha:0
[graph 0 input from stream 0:0 @ 0x7fa3d9c00f20] TB:0.040000 FRAME_RATE:25.000000 SAMPLE_RATE:nan
[Parsed_scale_0 @ 0x7fa3d9d24020] w:1920 h:1080 fmt:yuv422p10le sar:1/1 -> w:720 h:576 fmt:yuv422p sar:64/45 flags:0x4
[Parsed_colormatrix_1 @ 0x7fa3d9c005e0] bt709 -> bt601
[auto-inserted scaler 0 @ 0x7fa3d9c02160] w:720 h:576 fmt:yuv422p sar:64/45 -> w:720 h:576 fmt:yuv422p10le sar:64/45 flags:0x4
[Parsed_atempo_0 @ 0x7fa3d9d24680] Setting 'tempo' to value '1.04166666667'
[graph 1 input from stream 0:1 @ 0x7fa3d9f02ec0] Setting 'time_base' to value '1/48000'
[graph 1 input from stream 0:1 @ 0x7fa3d9f02ec0] Setting 'sample_rate' to value '48000'
[graph 1 input from stream 0:1 @ 0x7fa3d9f02ec0] Setting 'sample_fmt' to value 's32'
[graph 1 input from stream 0:1 @ 0x7fa3d9f02ec0] Setting 'channel_layout' to value '0x1'
[graph 1 input from stream 0:1 @ 0x7fa3d9f02ec0] tb:1/48000 samplefmt:s32 samplerate:48000 chlayout:0x1
[audio format for output stream 0:1 @ 0x7fa3d9f03320] Setting 'sample_fmts' to value 's16'
[audio format for output stream 0:1 @ 0x7fa3d9f03320] auto-inserting filter 'auto-inserted resampler 0' between the filter 'Parsed_atempo_0' and the filter 'audio format for output stream 0:1'
[AVFilterGraph @ 0x7fa3d9d24420] query_formats: 4 queried, 6 merged, 3 already done, 0 delayed
[auto-inserted resampler 0 @ 0x7fa3d9f03800] ch:1 chl:1 channels (FL) fmt:s32 r:48000Hz -> ch:1 chl:1 channels (FL) fmt:s16 r:48000Hz
[Parsed_atempo_0 @ 0x7fa3d9f03e20] Setting 'tempo' to value '1.04166666667'
[graph 2 input from stream 0:2 @ 0x7fa3d9f04200] Setting 'time_base' to value '1/48000'
[graph 2 input from stream 0:2 @ 0x7fa3d9f04200] Setting 'sample_rate' to value '48000'
[graph 2 input from stream 0:2 @ 0x7fa3d9f04200] Setting 'sample_fmt' to value 's32'
[graph 2 input from stream 0:2 @ 0x7fa3d9f04200] Setting 'channel_layout' to value '0x2'
[graph 2 input from stream 0:2 @ 0x7fa3d9f04200] tb:1/48000 samplefmt:s32 samplerate:48000 chlayout:0x2
[audio format for output stream 0:2 @ 0x7fa3d9f04740] Setting 'sample_fmts' to value 's16'
[audio format for output stream 0:2 @ 0x7fa3d9f04740] auto-inserting filter 'auto-inserted resampler 0' between the filter 'Parsed_atempo_0' and the filter 'audio format for output stream 0:2'
[AVFilterGraph @ 0x7fa3d9f03bc0] query_formats: 4 queried, 6 merged, 3 already done, 0 delayed
[auto-inserted resampler 0 @ 0x7fa3d9f04ec0] ch:1 chl:1 channels (FR) fmt:s32 r:48000Hz -> ch:1 chl:1 channels (FR) fmt:s16 r:48000Hz
[Parsed_atempo_0 @ 0x7fa3d9c01ec0] Setting 'tempo' to value '1.04166666667'
[graph 3 input from stream 0:3 @ 0x7fa3d9c02660] Setting 'time_base' to value '1/48000'
[graph 3 input from stream 0:3 @ 0x7fa3d9c02660] Setting 'sample_rate' to value '48000'
[graph 3 input from stream 0:3 @ 0x7fa3d9c02660] Setting 'sample_fmt' to value 's32'
[graph 3 input from stream 0:3 @ 0x7fa3d9c02660] Setting 'channel_layout' to value '0x4'
[graph 3 input from stream 0:3 @ 0x7fa3d9c02660] tb:1/48000 samplefmt:s32 samplerate:48000 chlayout:0x4
[audio format for output stream 0:3 @ 0x7fa3d9c02ae0] Setting 'sample_fmts' to value 's16'
[audio format for output stream 0:3 @ 0x7fa3d9c02ae0] auto-inserting filter 'auto-inserted resampler 0' between the filter 'Parsed_atempo_0' and the filter 'audio format for output stream 0:3'
[AVFilterGraph @ 0x7fa3d9f05220] query_formats: 4 queried, 6 merged, 3 already done, 0 delayed
[auto-inserted resampler 0 @ 0x7fa3d9c18300] ch:1 chl:mono fmt:s32 r:48000Hz -> ch:1 chl:mono fmt:s16 r:48000Hz
[Parsed_atempo_0 @ 0x7fa3dc000000] Setting 'tempo' to value '1.04166666667'
[graph 4 input from stream 0:4 @ 0x7fa3d9e00340] Setting 'time_base' to value '1/48000'
[graph 4 input from stream 0:4 @ 0x7fa3d9e00340] Setting 'sample_rate' to value '48000'
[graph 4 input from stream 0:4 @ 0x7fa3d9e00340] Setting 'sample_fmt' to value 's32'
[graph 4 input from stream 0:4 @ 0x7fa3d9e00340] Setting 'channel_layout' to value '0x8'
[graph 4 input from stream 0:4 @ 0x7fa3d9e00340] tb:1/48000 samplefmt:s32 samplerate:48000 chlayout:0x8
[audio format for output stream 0:4 @ 0x7fa3d9e008a0] Setting 'sample_fmts' to value 's16'
[audio format for output stream 0:4 @ 0x7fa3d9e008a0] auto-inserting filter 'auto-inserted resampler 0' between the filter 'Parsed_atempo_0' and the filter 'audio format for output stream 0:4'
[AVFilterGraph @ 0x7fa3d9e01820] query_formats: 4 queried, 6 merged, 3 already done, 0 delayed
[auto-inserted resampler 0 @ 0x7fa3d9e010a0] ch:1 chl:1 channels (LFE) fmt:s32 r:48000Hz -> ch:1 chl:1 channels (LFE) fmt:s16 r:48000Hz
[Parsed_atempo_0 @ 0x7fa3d9c02ee0] Setting 'tempo' to value '1.04166666667'
[graph 5 input from stream 0:5 @ 0x7fa3d9c187a0] Setting 'time_base' to value '1/48000'
[graph 5 input from stream 0:5 @ 0x7fa3d9c187a0] Setting 'sample_rate' to value '48000'
[graph 5 input from stream 0:5 @ 0x7fa3d9c187a0] Setting 'sample_fmt' to value 's32'
[graph 5 input from stream 0:5 @ 0x7fa3d9c187a0] Setting 'channel_layout' to value '0x10'
[graph 5 input from stream 0:5 @ 0x7fa3d9c187a0] tb:1/48000 samplefmt:s32 samplerate:48000 chlayout:0x10
[audio format for output stream 0:5 @ 0x7fa3d9c18b80] Setting 'sample_fmts' to value 's16'
[audio format for output stream 0:5 @ 0x7fa3d9c18b80] auto-inserting filter 'auto-inserted resampler 0' between the filter 'Parsed_atempo_0' and the filter 'audio format for output stream 0:5'
[AVFilterGraph @ 0x7fa3dc1001c0] query_formats: 4 queried, 6 merged, 3 already done, 0 delayed
[auto-inserted resampler 0 @ 0x7fa3d9c19280] ch:1 chl:1 channels (BL) fmt:s32 r:48000Hz -> ch:1 chl:1 channels (BL) fmt:s16 r:48000Hz
[Parsed_atempo_0 @ 0x7fa3d9e03ce0] Setting 'tempo' to value '1.04166666667'
[graph 6 input from stream 0:6 @ 0x7fa3d9e040a0] Setting 'time_base' to value '1/48000'
[graph 6 input from stream 0:6 @ 0x7fa3d9e040a0] Setting 'sample_rate' to value '48000'
[graph 6 input from stream 0:6 @ 0x7fa3d9e040a0] Setting 'sample_fmt' to value 's32'
[graph 6 input from stream 0:6 @ 0x7fa3d9e040a0] Setting 'channel_layout' to value '0x20'
[graph 6 input from stream 0:6 @ 0x7fa3d9e040a0] tb:1/48000 samplefmt:s32 samplerate:48000 chlayout:0x20
[audio format for output stream 0:6 @ 0x7fa3d9e045a0] Setting 'sample_fmts' to value 's16'
[audio format for output stream 0:6 @ 0x7fa3d9e045a0] auto-inserting filter 'auto-inserted resampler 0' between the filter 'Parsed_atempo_0' and the filter 'audio format for output stream 0:6'
[AVFilterGraph @ 0x7fa3d9e013a0] query_formats: 4 queried, 6 merged, 3 already done, 0 delayed
[auto-inserted resampler 0 @ 0x7fa3d9e04d20] ch:1 chl:1 channels (BR) fmt:s32 r:48000Hz -> ch:1 chl:1 channels (BR) fmt:s16 r:48000Hz
[Parsed_atempo_0 @ 0x7fa3d9e04b80] Setting 'tempo' to value '1.04166666667'
[graph 7 input from stream 0:7 @ 0x7fa3d9e05300] Setting 'time_base' to value '1/48000'
[graph 7 input from stream 0:7 @ 0x7fa3d9e05300] Setting 'sample_rate' to value '48000'
[graph 7 input from stream 0:7 @ 0x7fa3d9e05300] Setting 'sample_fmt' to value 's32'
[graph 7 input from stream 0:7 @ 0x7fa3d9e05300] Setting 'channel_layout' to value '0x60000000'
[graph 7 input from stream 0:7 @ 0x7fa3d9e05300] tb:1/48000 samplefmt:s32 samplerate:48000 chlayout:0x60000000
[audio format for output stream 0:7 @ 0x7fa3d9e057e0] Setting 'sample_fmts' to value 's16'
[audio format for output stream 0:7 @ 0x7fa3d9e057e0] auto-inserting filter 'auto-inserted resampler 0' between the filter 'Parsed_atempo_0' and the filter 'audio format for output stream 0:7'
[AVFilterGraph @ 0x7fa3d9d24b40] query_formats: 4 queried, 6 merged, 3 already done, 0 delayed
[auto-inserted resampler 0 @ 0x7fa3d9e05d40] ch:2 chl:downmix fmt:s32 r:48000Hz -> ch:2 chl:downmix fmt:s16 r:48000Hz
Output #0, mov, to '/Volumes/Kevs_GRAID/Downconvert_Tests/TestOutput.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 537199360
    compatible_brands: qt  
    encoder         : Lavf56.15.102
    Stream #0:0(eng), 0, 1/12800: Video: prores (apch) (apch / 0x68637061), yuv422p10le, 720x576 [SAR 64:45 DAR 16:9], 1/25, q=2-31, 200 kb/s, 25 fps, 12800 tbn, 25 tbc (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
      timecode        : 00:00:00:00
      encoder         : Lavc56.13.100 prores
    Stream #0:1(eng), 0, 1/48000: Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, 1 channels (FL), s16 (24 bit), 768 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
      encoder         : Lavc56.13.100 pcm_s16le
    Stream #0:2(eng), 0, 1/48000: Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, 1 channels (FR), s16 (24 bit), 768 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
      encoder         : Lavc56.13.100 pcm_s16le
    Stream #0:3(eng), 0, 1/48000: Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, mono, s16 (24 bit), 768 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
      encoder         : Lavc56.13.100 pcm_s16le
    Stream #0:4(eng), 0, 1/48000: Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, 1 channels (LFE), s16 (24 bit), 768 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
      encoder         : Lavc56.13.100 pcm_s16le
    Stream #0:5(eng), 0, 1/48000: Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, 1 channels (BL), s16 (24 bit), 768 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
      encoder         : Lavc56.13.100 pcm_s16le
    Stream #0:6(eng), 0, 1/48000: Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, 1 channels (BR), s16 (24 bit), 768 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
      encoder         : Lavc56.13.100 pcm_s16le
    Stream #0:7(eng), 0, 1/48000: Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, downmix, s16 (24 bit), 1536 kb/s (default)
    Metadata:
      creation_time   : 2015-01-24 14:13:11
      handler_name    : Apple Alias Data Handler
      encoder         : Lavc56.13.100 pcm_s16le
Stream mapping:
  Stream #0:0 -> #0:0 (prores (native) -> prores (native))
  Stream #0:1 -> #0:1 (pcm_s24le (native) -> pcm_s16le (native))
  Stream #0:2 -> #0:2 (pcm_s24le (native) -> pcm_s16le (native))
  Stream #0:3 -> #0:3 (pcm_s24le (native) -> pcm_s16le (native))
  Stream #0:4 -> #0:4 (pcm_s24le (native) -> pcm_s16le (native))
  Stream #0:5 -> #0:5 (pcm_s24le (native) -> pcm_s16le (native))
  Stream #0:6 -> #0:6 (pcm_s24le (native) -> pcm_s16le (native))
  Stream #0:7 -> #0:7 (pcm_s24le (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
[output stream 0:0 @ 0x7fa3d9c01620] EOF on sink link output stream 0:0:default.s    
[output stream 0:6 @ 0x7fa3d9e04420] EOF on sink link output stream 0:6:default.
[output stream 0:4 @ 0x7fa3d9e00680] EOF on sink link output stream 0:4:default.
[output stream 0:5 @ 0x7fa3d9c18a40] EOF on sink link output stream 0:5:default.
[output stream 0:7 @ 0x7fa3d9e05660] EOF on sink link output stream 0:7:default.
[output stream 0:1 @ 0x7fa3d9f031e0] EOF on sink link output stream 0:1:default.
[output stream 0:2 @ 0x7fa3d9f045e0] EOF on sink link output stream 0:2:default.
[output stream 0:3 @ 0x7fa3d9c02960] EOF on sink link output stream 0:3:default.
No more output streams to write to, finishing.
frame=  143 fps= 80 q=0.0 Lsize=   41605kB time=00:00:05.73 bitrate=59405.7kbits/s    
video:37293kB audio:4297kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.035538%
Input file #0 (/Volumes/Kevs_GRAID/Downconvert_Tests/TestInput.mov):
  Input stream #0:0 (video): 143 packets read (125969472 bytes); 143 frames decoded; 
  Input stream #0:1 (audio): 286 packets read (858000 bytes); 286 frames decoded (286000 samples); 
  Input stream #0:2 (audio): 286 packets read (858000 bytes); 286 frames decoded (286000 samples); 
  Input stream #0:3 (audio): 286 packets read (858000 bytes); 286 frames decoded (286000 samples); 
  Input stream #0:4 (audio): 286 packets read (858000 bytes); 286 frames decoded (286000 samples); 
  Input stream #0:5 (audio): 286 packets read (858000 bytes); 286 frames decoded (286000 samples); 
  Input stream #0:6 (audio): 286 packets read (858000 bytes); 286 frames decoded (286000 samples); 
  Input stream #0:7 (audio): 286 packets read (1716000 bytes); 286 frames decoded (286000 samples); 
  Input stream #0:8 (data): 1 packets read (4 bytes); 
  Total: 2146 packets (132833476 bytes) demuxed
Output file #0 (/Volumes/Kevs_GRAID/Downconvert_Tests/TestOutput.mov):
  Output stream #0:0 (video): 143 frames encoded; 143 packets muxed (38188456 bytes); 
  Output stream #0:1 (audio): 288 frames encoded (275222 samples); 288 packets muxed (550444 bytes); 
  Output stream #0:2 (audio): 287 frames encoded (275391 samples); 287 packets muxed (550782 bytes); 
  Output stream #0:3 (audio): 285 frames encoded (275353 samples); 285 packets muxed (550706 bytes); 
  Output stream #0:4 (audio): 285 frames encoded (273541 samples); 285 packets muxed (547082 bytes); 
  Output stream #0:5 (audio): 285 frames encoded (275235 samples); 285 packets muxed (550470 bytes); 
  Output stream #0:6 (audio): 290 frames encoded (275244 samples); 290 packets muxed (550488 bytes); 
  Output stream #0:7 (audio): 284 frames encoded (275022 samples); 284 packets muxed (1100088 bytes); 
  Total: 2147 packets (42588516 bytes) muxed
2145 frames successfully decoded, 0 decoding errors
[AVIOContext @ 0x7fa3d9d23860] Statistics: 260 seeks, 3475 writeouts
[AVIOContext @ 0x7fa3d9f00000] Statistics: 132931780 bytes read, 4 seeks

**Tags:** ffmpeg, conversion, standards-converter

> **Comments:**
> **username_1**: Are you confident that the player you're using obeys the color matrix signalled in the file?  Or that ffmpeg is signalling the different colorspace correctly in the output file?  I see on input, it says `yuv422p10le(bt709)`.  What does ffmpeg -i say if you run it on the output file of this conversion?  
> **username_1**: IDK what you're feeding the SD video to, but it might make sense to merge the pcm streams into a single multichannel audio stream, and encode that with Opus, or libfdk_aac.  Or FLAC.  Looks like ProRes still takes most of the space, though.  
> **username_0**: Hi Peter, running the output file back through ffmpeg reports to be just yuv422p10le, nothing else, not 601 or 709.  
> **username_1**: I've recently been starting to care about colormatrix for getting colors correct.  Some files signal a colormatrix in the h.264 metadata.  mpv (http://mpv.io/) will correctly react to these flags, otherwise defaulting to BT.601, or BT.709 if `width >= 1280 || height > 576`.  mplayer (which mpv is a fork of) doesn't obey the colormatrix info in an h.264 file.  I haven't tested a lot with ffmpeg reading flagged files, though.  Usually I feed ffmpeg input that's already YUV, and don't want to convert it from one colorspace to another.  

---

## 1 answers

### Answer by username_1 on 2015-01-24. Score: 2

Thanks for posting `-v debug` output. From that, I see the `colormatrix` filter doesn't support high-bit-depth inputs. There's an auto-inserted scale filter downsampling to `yuv422p` (which means 8bit), before it.

You might as well compress the output with an 8-bit-per-component codec, if you need ffmpeg's colormatrix anyway, since ffmpeg already downsampled it. (some codecs, like libx264, get somewhat better compression efficiency operating in high-bit-depth mode, but x264 runs slower that way. If you're encoding to prores, clearly CPU time is more important than bitrate per quality.)

The behaviour you see with the colormatrix filter might actually be due to this [known bug in ffmpeg's swscale](https://trac.ffmpeg.org/ticket/3345#no1). The bug only refers to the unscaled special case, but possible it's happening while downscaling too? More likely that `colormatrix`'s modifications to your data are what causes the tint, and the output video is still being converted back to RGB (by the player) with bt709 coefficients.

If you get correct looking results without the colormatrix filter, then I guess don't use it? Maybe google up whether prores bitstreams, or the containers they go in, have bits to signal the color properties of the YUV data. And how players decide which coefficients to use.

Whether any of the open source players do it correctly, according to whatever specs there are for the format, is a separate issue. Don't assume that all / any players bother to look at color matrix info in the input file. Probably they feed YUV video to the GPU for scaling / RGB-conversion. Presumably the color coefficients are programmable in most YUV-input video APIs, but IDK, not something I've looked in to, except mplayer's opengl output (which does allow variable coefficients).

So it's possible that VLC or whatever other player might show always assume bt709 for prores input, while your NLE might make a different choice. So you can at least test that with the current version of what you're using, you have a process that doesn't bias your colors. Either because it all works right, or because multiple things assume bt709 when they shouldn't -profile:v 3, and your setup would break if one part started obeying the standards. (That's always the danger with just experimental testing that something works now.)

I have no use for prores myself, so I'll leave the detailed digging into it for you. If you find something useful, you could post an answer to your own question. Hopefully this points you in the right direction, though.

re: prores: I assume ffmpeg's implementation of prores is just not very optimized, because on the Sintel trailer, it's no faster than lossless x264. And x264 `-crf 1` or `-crf 5` should get bitrates down to prores levels, while being only slightly lossy.


---

