[FFmpeg-devel] New filter: remap (usecase is fisheye video)
F.Sluiter
fsluiter at gmail.com
Tue Apr 5 01:40:56 CEST 2016
Dear all,
I wrote a new filter for ffmpeg and would value your comments. Files
attached are not proper git or diff patches, but the filter itself is only
a single file.
My usecase was to create a filter that would allow me to process video shot
with a 180 fisheye lens, but this filter is very generic and can also be
used in many other usecases.
I included two examples:
- a simple 180 degree rotation
- a fisheye to equirectangular remap (or projection)
Other use cases can be:
rotate/scale/mirror/cutout/duplicate/stretch/shrink/caleidoscope/etc
It basically is a matter of creating the right xy_mapfiles for your usecase.
See readme for commands to generate the examples.
Description:
* Pixel remap filter
* This filter copies pixel by pixel a source frame to a target frame.
* It remaps the pixels to a new x,y destination based on two files
ymap/xmap.
* Map files are passed as a parameter and are in PGM format (P2 or P5),
* where the values are y(rows)/x(cols) coordinates of the source_frame.
* The *target* frame dimension is based on mapfile dimensions: specified
in the
* header of the mapfile and reflected in the number of datavalues.
* Dimensions of ymap and xmap must be equal. Datavalues zero or higher as
they
* are used as coordinates. Any datavalue in the ymap or xmap which value
is higher
* then the *source* frame height or width is silently ignored, leaving a
* blank/chromakey pixel. This can safely be used as a feature to create
overlays.
*
* Algorithm digest:
* Target_frame[y][x] = Source_frame[ ymap[y][x] ][ [xmap[y][x] ];
Obvious points to improve:
- test and add other video formats, I did not have the knowledge on all of
them.
- I was struggling a bit with C (I used to code in C++ long time ago) and
pixelformats, so the function I adapted contains some ugly code for 8bit
character reads and 16bit read for binary PGM files. Not proud of it, would
welcome improvements greatly.
Possible additions for version 2.0:
- Anti aliasing, remapping can cause lots of jagged edges.
- possibility to read a sequence of ymap/xmap files. For this most
convenient would be to read those files as inputs to ffmpeg, and not as a
parameter to the fillter. This could create a possibility for usecases to
dynamically
rotate/scale/mirror/cutout/duplicate/stretch/shrink/caleidoscope/etc videos
Kind regards,
Floris Sluiter
-------------- next part --------------
A non-text attachment was scrubbed...
Name: remap.tgz
Type: application/x-gzip
Size: 175493 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20160405/60059813/attachment.bin>
More information about the ffmpeg-devel
mailing list