Hi, It seems to be a bug (maybe by design) when trying to control how the video/color ranges are treated in the "scale" filter. Basically what I need to specify is that the range should NOT be converted when input range == output range, for example: in_range=pc:out_range=pc or in_range=tv:out_range=tv
In my head there should be NO range conversion in either commands. However, this does not seem to be the case. If you look at the test commands below and their output you will see that a range conversion has taken place even though input range and output range are set to be the exact same. The only parameters I change are the scale width and height. I'm using a late august 2021 build. Command: ffmpeg -f lavfi -i smptebars=duration=1:size=720x576:rate=1 -vf "signalstats,metadata=print:key=lavfi.signalstats.YMIN,metadata=print:key=lavfi.signalstats.YMAX,scale=w=1920:h=1080:in_color_matrix=bt709:out_color_matrix=bt709:in_range=pc:out_range=pc,signalstats,metadata=print:key=lavfi.signalstats.YMIN,metadata=print:key=lavfi.signalstats.YMAX" -f null - Raw FFmpeg output: ffmpeg version N-103405-g1930a85e83 Copyright (c) 2000-2021 the FFmpeg developers built with gcc 10.3.0 (Rev2, Built by MSYS2 project) configuration: --disable-static --enable-shared --pkg-config=pkgconf --cc='ccache gcc' --cxx='ccache g++' --disable-autodetect --enable-amf --enable-bzlib --enable-cuda --enable-cuvid --enable-d3d11va --enable-dxva2 --enable-iconv --enable-lzma --enable-nvenc --enable-zlib --enable-sdl2 --enable-ffnvcodec --enable-nvdec --enable-cuda-llvm --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libx264 --enable-libx265 --enable-libdav1d --enable-libaom --disable-debug --enable-fontconfig --enable-libass --enable-libbluray --enable-libfreetype --enable-libmfx --enable-libmysofa --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libwebp --enable-libxml2 --enable-libzimg --enable-libshine --enable-gpl --enable-avisynth --enable-libxvid --enable-libopenmpt --enable-version3 --enable-libsrt --enable-libgsm --enable-libvmaf --enable-libsvtav1 --enable-mbedtls --extra-cflags=-DLIBTWOLAME_STATIC --extra-libs=-lstdc++ --extra-cflags=-DLIBXML_STATIC --extra-libs=-liconv --disable-w32threads --shlibdir=/local64/bin-video libavutil 57. 4.101 / 57. 4.101 libavcodec 59. 6.100 / 59. 6.100 libavformat 59. 4.102 / 59. 4.102 libavdevice 59. 0.101 / 59. 0.101 libavfilter 8. 4.100 / 8. 4.100 libswscale 6. 0.100 / 6. 0.100 libswresample 4. 0.100 / 4. 0.100 libpostproc 56. 0.100 / 56. 0.100 Input #0, lavfi, from 'smptebars=duration=1:size=720x576:rate=1': Duration: N/A, start: 0.000000, bitrate: N/A Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 720x576 [SAR 1:1 DAR 5:4], 1 tbr, 1 tbn Stream mapping: Stream #0:0 -> #0:0 (rawvideo (native) -> wrapped_avframe (native)) Press [q] to stop, [?] for help [Parsed_metadata_1 @ 00000298dcb6c7c0] frame:0 pts:0 pts_time:0 [Parsed_metadata_1 @ 00000298dcb6c7c0] lavfi.signalstats.YMIN=7 [Parsed_metadata_2 @ 00000298dcb6bcc0] frame:0 pts:0 pts_time:0 [Parsed_metadata_2 @ 00000298dcb6bcc0] lavfi.signalstats.YMAX=235 [swscaler @ 00000298dcb7fec0] Warning: data is not aligned! This can lead to a speed loss [Parsed_metadata_5 @ 00000298dcb6b0c0] frame:0 pts:0 pts_time:0 [Parsed_metadata_5 @ 00000298dcb6b0c0] lavfi.signalstats.YMIN=0 [Parsed_metadata_6 @ 00000298dcb6b4c0] frame:0 pts:0 pts_time:0 [Parsed_metadata_6 @ 00000298dcb6b4c0] lavfi.signalstats.YMAX=255 Output #0, null, to 'pipe:': Metadata: encoder : Lavf59.4.102 Stream #0:0: Video: wrapped_avframe, yuv420p(pc, progressive), 1920x1080 [SAR 45:64 DAR 5:4], q=2-31, 200 kb/s, 1 fps, 1 tbn Metadata: encoder : Lavc59.6.100 wrapped_avframe frame= 1 fps=0.0 q=-0.0 Lsize=N/A time=00:00:01.00 bitrate=N/A speed=20.1x video:0kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown If we can trust the signalstats filter, YMIN has gone from 7 to 0, YMAX has gone from 235 to 255 Furthermore, it's not consistent: Command: ffmpeg -f lavfi -i smptebars=duration=1:size=720x576:rate=1 -vf "signalstats,metadata=print:key=lavfi.signalstats.YMIN,metadata=print:key=lavfi.signalstats.YMAX,scale=w=1280:h=720:in_color_matrix=bt709:out_color_matrix=bt709:in_range=pc:out_range=pc,signalstats,metadata=print:key=lavfi.signalstats.YMIN,metadata=print:key=lavfi.signalstats.YMAX" -f null - Washed FFmpeg output: [Parsed_metadata_1 @ 000001ab9f8dc9c0] frame:0 pts:0 pts_time:0 [Parsed_metadata_1 @ 000001ab9f8dc9c0] lavfi.signalstats.YMIN=7 [Parsed_metadata_2 @ 000001ab9f8db3c0] frame:0 pts:0 pts_time:0 [Parsed_metadata_2 @ 000001ab9f8db3c0] lavfi.signalstats.YMAX=235 [swscaler @ 000001ab9f8efec0] Warning: data is not aligned! This can lead to a speed loss [Parsed_metadata_5 @ 000001ab9f8dc4c0] frame:0 pts:0 pts_time:0 [Parsed_metadata_5 @ 000001ab9f8dc4c0] lavfi.signalstats.YMIN=5 [Parsed_metadata_6 @ 000001ab9f8db5c0] frame:0 pts:0 pts_time:0 [Parsed_metadata_6 @ 000001ab9f8db5c0] lavfi.signalstats.YMAX=255 In this case YMIN has gone from 7 to 5, YMAX has gone from 235 to 255 Here are a few more: ffmpeg -f lavfi -i smptebars=duration=1:size=720x576:rate=1 -vf "signalstats,metadata=print:key=lavfi.signalstats.YMIN,metadata=print:key=lavfi.signalstats.YMAX,scale=w=720:h=720:in_color_matrix=bt709:out_color_matrix=bt709:in_range=pc:out_range=pc,signalstats,metadata=print:key=lavfi.signalstats.YMIN,metadata=print:key=lavfi.signalstats.YMAX" -f null - [Parsed_metadata_1 @ 000001fb530bb9c0] frame:0 pts:0 pts_time:0 [Parsed_metadata_1 @ 000001fb530bb9c0] lavfi.signalstats.YMIN=7 [Parsed_metadata_2 @ 000001fb530bb0c0] frame:0 pts:0 pts_time:0 [Parsed_metadata_2 @ 000001fb530bb0c0] lavfi.signalstats.YMAX=235 [swscaler @ 000001fb530cfe80] Warning: data is not aligned! This can lead to a speed loss [Parsed_metadata_5 @ 000001fb530bb2c0] frame:0 pts:0 pts_time:0 [Parsed_metadata_5 @ 000001fb530bb2c0] lavfi.signalstats.YMIN=7 [Parsed_metadata_6 @ 000001fb530bbbc0] frame:0 pts:0 pts_time:0 [Parsed_metadata_6 @ 000001fb530bbbc0] lavfi.signalstats.YMAX=243 ffmpeg -f lavfi -i smptebars=duration=1:size=720x576:rate=1 -vf "signalstats,metadata=print:key=lavfi.signalstats.YMIN,metadata=print:key=lavfi.signalstats.YMAX,scale=w=720:h=719:in_color_matrix=bt709:out_color_matrix=bt709:in_range=pc:out_range=pc,signalstats,metadata=print:key=lavfi.signalstats.YMIN,metadata=print:key=lavfi.signalstats.YMAX" -f null - [Parsed_metadata_1 @ 00000229dd9bc2c0] frame:0 pts:0 pts_time:0 [Parsed_metadata_1 @ 00000229dd9bc2c0] lavfi.signalstats.YMIN=7 [Parsed_metadata_2 @ 00000229dd9bc0c0] frame:0 pts:0 pts_time:0 [Parsed_metadata_2 @ 00000229dd9bc0c0] lavfi.signalstats.YMAX=235 [swscaler @ 00000229dd9cfe80] Warning: data is not aligned! This can lead to a speed loss [Parsed_metadata_5 @ 00000229dd9bb6c0] frame:0 pts:0 pts_time:0 [Parsed_metadata_5 @ 00000229dd9bb6c0] lavfi.signalstats.YMIN=4 [Parsed_metadata_6 @ 00000229dd9bafc0] frame:0 pts:0 pts_time:0 [Parsed_metadata_6 @ 00000229dd9bafc0] lavfi.signalstats.YMAX=251 So again, you can see how the behavior is difficult to control and it seems to be related to the actual scaling of the image. So I'm hoping someone can shed light on this behavior. Thanks -steinar _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".