[FFmpeg-user] remap filter, unmapped pixels

Michael Koch astroelectronic at t-online.de
Thu Feb 20 14:04:39 EET 2020


Am 20.02.2020 um 12:49 schrieb Paul B Mahol:
> On 2/20/20, Michael Koch <astroelectronic at t-online.de> wrote:
>> Am 20.02.2020 um 11:07 schrieb Paul B Mahol:
>>> On 2/20/20, Michael Koch <astroelectronic at t-online.de> wrote:
>>>> I'd like to understand how the new "fill" option in the remap filter
>>>> works.
>>>> What is an "unmapped pixel"? How is it possible that pixels are
>>>> unmapped, if the xmap and ymap files have the same size as the output
>>>> image? Is a pixel "unmapped" if it has invalid coordinates (negative or
>>>> too big) in the xmap or ymap files?
>>> Previously all unmapped pixels were set to black for rgba or dark
>>> green for y420p.
>>> It is very obvious to understand even for every little kid in the block.
>> Finally I got it working. A pixel can be declared as "unmapped" by
>> setting the values to 65535 in the xmap and ymap files. However using a
>> negative value (for example -1) doesn't work. In this case the pixel is
>> mapped to the top left pixel of the input image.
>> This behaviour might be obvious for little kids, but not for me. Should
>> be added to documentation.
> Nope. Documentation does not need trivial information.
> Obviously by having even limited programming experience one would
> found out that remaps are unsigned short, thus can not be negative.
> You never showed your map files. so I assume everything is wrong on
> your end.

This is an example that produces a crash abort in the third command 
line. All pixels are mapped to themselves, except pixel (1,1) which is 
mapped to (65535,65535)

c:\ffmpeg\ffmpeg -f lavfi -i nullsrc=size=20x20 -vf 
format=pix_fmts=gray16le,geq='if(bitand(eq(X,1),eq(Y,1)),65535,X)' 
-frames 1 -y xmap.pgm
c:\ffmpeg\ffmpeg -f lavfi -i nullsrc=size=20x20 -vf 
format=pix_fmts=gray16le,geq='if(bitand(eq(X,1),eq(Y,1)),65535,Y)' 
-frames 1 -y ymap.pgm
c:\ffmpeg\ffmpeg -f lavfi -i color=blue:size=20x20 -i xmap.pgm -i 
ymap.pgm -lavfi "format=pix_fmts=rgb24,remap=fill=red" -frames 1 -y out.png

Console output for third command line:

F:\Wormhole_2020>c:\ffmpeg\ffmpeg -f lavfi -i color=blue:size=20x20 -i 
xmap.pgm
-i ymap.pgm -lavfi "format=pix_fmts=rgb24,remap=fill=red" -frames 1 -y 
out.png
ffmpeg version git-2020-02-18-ebee808 Copyright (c) 2000-2020 the FFmpeg 
develop
ers
   built with gcc 9.2.1 (GCC) 20200122
   configuration: --enable-gpl --enable-version3 --enable-sdl2 
--enable-fontconfi
g --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d 
--enable-libb
luray --enable-libfreetype --enable-libmp3lame 
--enable-libopencore-amrnb --enab
le-libopencore-amrwb --enable-libopenjpeg --enable-libopus 
--enable-libshine --e
nable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame 
--enable
-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 
--enable-libx265 -
-enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib 
--enable-gmp --enab
le-libvidstab --enable-libvorbis --enable-libvo-amrwbenc 
--enable-libmysofa --en
able-libspeex --enable-libxvid --enable-libaom --enable-libmfx 
--enable-ffnvcode
c --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec 
--enable-dxva2 -
-enable-avisynth --enable-libopenmpt --enable-amf
   libavutil      56. 41.100 / 56. 41.100
   libavcodec     58. 70.100 / 58. 70.100
   libavformat    58. 38.101 / 58. 38.101
   libavdevice    58.  9.103 / 58.  9.103
   libavfilter     7. 76.100 /  7. 76.100
   libswscale      5.  6.100 /  5.  6.100
   libswresample   3.  6.100 /  3.  6.100
   libpostproc    55.  6.100 / 55.  6.100
Input #0, lavfi, from 'color=blue:size=20x20':
   Duration: N/A, start: 0.000000, bitrate: N/A
     Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 20x20 
[SAR 1:1 DA
R 1:1], 25 tbr, 25 tbn, 25 tbc
Input #1, pgm_pipe, from 'xmap.pgm':
   Duration: N/A, bitrate: N/A
     Stream #1:0: Video: pgm, gray16le, 20x20, 25 tbr, 25 tbn, 25 tbc
Input #2, pgm_pipe, from 'ymap.pgm':
   Duration: N/A, bitrate: N/A
     Stream #2:0: Video: pgm, gray16le, 20x20, 25 tbr, 25 tbn, 25 tbc
Stream mapping:
   Stream #0:0 (rawvideo) -> format
   Stream #1:0 (pgm) -> remap:xmap
   Stream #2:0 (pgm) -> remap:ymap
   remap -> Stream #0:0 (png)


More information about the ffmpeg-user mailing list