Szaturnusz, Cassini-rés. MC 102/1300, 268 frame-ből válogatott a Registax

Szaturnusz, Cassini-rés. MC 102/1300, bolygókamera, 268 frame-ből válogatott a Registax

Némi nosztalgiával emlékszem vissza azokra az időkre, amikor még nagyon botladozott az internet. Épphogy döcögött a keresőmotor, ami még messze predatálta a maiakat. Ékezetekkel és ragozott magyar szavakkal természetesen nem működött, de amúgy is szinte csak angolul volt tartalom a hálón. Ami viszont fenn volt, az jó volt. Működött és megbízható volt.  Nem így ma, amikor majdnem minden bundle és/vagy bloat, esetleg még trójai is; no meg a keresési eredmények mérgezett volta (fekete kalapos SEO).

A fentiekkel természetesen akkor is találkoztam, amikor egy becsületes GIF-et szerettem volna létrehozni avi-ból vagy egy rakás fotóból. Amatőr csillagászkodáskor (lásd bolygózás, Vénusz-tranzit) vagy bármilyen más munkafolyamatban (lásd naplemente-sorozat) lehet ilyesmire szükség. Némi túrás-keresés után azt mondom, nem érdemes vesződni a mindenféle bundled bloatware crapplet vackokkal, hanem két ingyenes szoftvercsomagot kell letölteni és megtanulni használni őket:  ffmpeg és ImageMagick. Kevésbé tapasztaltaknak (Windows) fejtörést okozhat a parancssor használata, ám garantálom, hogy megéri. Linuxosok valamelyes előnyben vannak :)

Feladat:
1) emeljük ki egy videóból a képkockákat
2) készítsünk gif formátumú animációt, vagyis animgif-et tetszőleges képsorozatból, például az iménti képkockákból
Vegyük ezeket sorra, ezesetben Windows alatt.

Extra: a cikk végén van egy letölthető frontend, amivel ha igaz, kevesebbet kell vesződni, de nem is tud mindent.

1) Képkockák kimentése a videóból: ffmpeg. Ez a szoftvercsomag rengeteg helyen felbukkan az interneten, több programnak az ffmpeg alkotja a magját. Az ImageMagick többnyire hozza magával, külön pedig  innen tölthető le. Én ezt a parancsot szoktam használni:

ffmpeg -i video.avi -qscale 0 frame%03d.jpg

Ahol:
ffmpeg a program neve. Ennek elérési útvonala például így néz ki: C:ffmpeg-20131205-git-9ca32b2-win32-staticbinffmpeg.exe
-i  a képkockák kiemelésére szólít fel
video.avi a feldolgozandó videó fájl. Ebben az esetben a videó ott van az exe mellett.
-qscale 0 ez egy hosszabb történet volna, maradjunk annyiban, hogy minden egyes képkockának megtartja az eredeti minőségét
frame%03d.jpg a kimeneti fájlok helye és neve. Általában nem vesződök az útvonal beállításával, szülessenek meg a képek, aztán utólag majd áthelyezem őket ahová kell. A pirossal jelölt rész a fájlnév eleje. Sárgával emeltem ki a sorszámot és hogy hány számjegy hosszú legyen. A %03d legkevesebb 3 számjegyet eredményez (például frame009.jpg). Zölddel a kívánt fájltípust jelöltem meg. A JPG veszteséges tömörítés, ám ezt most elhanyagolhatjuk.

képkocka

képkocka

képkocka

képkocka

képkocka

képkocka

képkocka

képkocka

2) Animált GIF készítése képkockákból: ImageMagick. Az ImageMagick ugyancsak ingyenes szoftvercsomag és számos program képfeldolgozó magját képezi, hozhat magával ffmpeg-et is, innen tölthető le. Nagyon robusztus, a poén kedvéért kinyomtam  a convert helpjét (convert >a.txt), nehezen emészthető a járatlan felhasználó számára.

Version: ImageMagick 6.8.8-2 Q8 x86 2014-01-09 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC
Features: DPC OpenMP
Delegates: bzlib cairo freetype jbig jng jp2 jpeg lcms lqr pangocairo png ps rsvg tiff webp xml zlib

Usage: convert.exe [options ...] file [ [options ...] file ...] [options ...] file

Image Settings:
  -adjoin              join images into a single multi-image file
  -affine matrix       affine transform matrix
  -alpha option        activate, deactivate, reset, or set the alpha channel
  -antialias           remove pixel-aliasing
  -authenticate password
                       decipher image with this password
  -attenuate value     lessen (or intensify) when adding noise to an image
  -background color    background color
  -bias value          add bias when convolving an image
  -black-point-compensation
                       use black point compensation
  -blue-primary point  chromaticity blue primary point
  -bordercolor color   border color
  -caption string      assign a caption to an image
  -channel type        apply option to select image channels
  -clip-mask filename  associate a clip mask with the image
  -colors value        preferred number of colors in the image
  -colorspace type     alternate image colorspace
  -comment string      annotate image with comment
  -compose operator    set image composite operator
  -compress type       type of pixel compression when writing the image
  -define format:option
                       define one or more image format options
  -delay value         display the next image after pausing
  -density geometry    horizontal and vertical density of the image
  -depth value         image depth
  -direction type      render text right-to-left or left-to-right
  -display server      get image or font from this X server
  -dispose method      layer disposal method
  -dither method       apply error diffusion to image
  -encoding type       text encoding type
  -endian type         endianness (MSB or LSB) of the image
  -family name         render text with this font family
  -fill color          color to use when filling a graphic primitive
  -filter type         use this filter when resizing an image
  -font name           render text with this font
  -format "string"     output formatted image characteristics
  -fuzz distance       colors within this distance are considered equal
  -gravity type        horizontal and vertical text placement
  -green-primary point chromaticity green primary point
  -intensity method    method to generate intensity value from pixel
  -intent type         type of rendering intent when managing the image color
  -interlace type      type of image interlacing scheme
  -interline-spacing value
                       set the space between two text lines
  -interpolate method  pixel color interpolation method
  -interword-spacing value
                       set the space between two words
  -kerning value       set the space between two letters
  -label string        assign a label to an image
  -limit type value    pixel cache resource limit
  -loop iterations     add Netscape loop extension to your GIF animation
  -mask filename       associate a mask with the image
  -matte               store matte channel if the image has one
  -mattecolor color    frame color
  -moments             report image moments
  -monitor             monitor progress
  -orient type         image orientation
  -page geometry       size and location of an image canvas (setting)
  -ping                efficiently determine image attributes
  -pointsize value     font point size
  -precision value     maximum number of significant digits to print
  -preview type        image preview type
  -quality value       JPEG/MIFF/PNG compression level
  -quiet               suppress all warning messages
  -red-primary point   chromaticity red primary point
  -regard-warnings     pay attention to warning messages
  -remap filename      transform image colors to match this set of colors
  -respect-parentheses settings remain in effect until parenthesis boundary
  -sampling-factor geometry
                       horizontal and vertical sampling factor
  -scene value         image scene number
  -seed value          seed a new sequence of pseudo-random numbers
  -size geometry       width and height of image
  -stretch type        render text with this font stretch
  -stroke color        graphic primitive stroke color
  -strokewidth value   graphic primitive stroke width
  -style type          render text with this font style
  -support factor      resize support: > 1.0 is blurry, < 1.0 is sharp
  -synchronize         synchronize image to storage device
  -taint               declare the image as modified
  -texture filename    name of texture to tile onto the image background
  -tile-offset geometry
                       tile offset
  -treedepth value     color tree depth
  -transparent-color color
                       transparent color
  -undercolor color    annotation bounding box color
  -units type          the units of image resolution
  -verbose             print detailed information about the image
  -view                FlashPix viewing transforms
  -virtual-pixel method
                       virtual pixel access method
  -weight type         render text with this font weight
  -white-point point   chromaticity white point

Image Operators:
  -adaptive-blur geometry
                       adaptively blur pixels; decrease effect near edges
  -adaptive-resize geometry
                       adaptively resize image using 'mesh' interpolation
  -adaptive-sharpen geometry
                       adaptively sharpen pixels; increase effect near edges
  -alpha option        on, activate, off, deactivate, set, opaque, copy
                       transparent, extract, background, or shape
  -annotate geometry text
                       annotate the image with text
  -auto-gamma          automagically adjust gamma level of image
  -auto-level          automagically adjust color levels of image
  -auto-orient         automagically orient (rotate) image
  -bench iterations    measure performance
  -black-threshold value
                       force all pixels below the threshold into black
  -blue-shift factor   simulate a scene at nighttime in the moonlight
  -blur geometry       reduce image noise and reduce detail levels
  -border geometry     surround image with a border of color
  -bordercolor color   border color
  -brightness-contrast geometry
                       improve brightness / contrast of the image
  -cdl filename        color correct with a color decision list
  -charcoal radius     simulate a charcoal drawing
  -chop geometry       remove pixels from the image interior
  -clamp               keep pixel values in range (0-QuantumRange)
  -clip                clip along the first path from the 8BIM profile
  -clip-path id        clip along a named path from the 8BIM profile
  -colorize value      colorize the image with the fill color
  -color-matrix matrix apply color correction to the image
  -contrast            enhance or reduce the image contrast
  -contrast-stretch geometry
                       improve contrast by `stretching' the intensity range
  -convolve coefficients
                       apply a convolution kernel to the image
  -cycle amount        cycle the image colormap
  -decipher filename   convert cipher pixels to plain pixels
  -deskew threshold    straighten an image
  -despeckle           reduce the speckles within an image
  -distort method args
                       distort images according to given method ad args
  -draw string         annotate the image with a graphic primitive
  -edge radius         apply a filter to detect edges in the image
  -encipher filename   convert plain pixels to cipher pixels
  -emboss radius       emboss an image
  -enhance             apply a digital filter to enhance a noisy image
  -equalize            perform histogram equalization to an image
  -evaluate operator value
                       evaluate an arithmetic, relational, or logical expression
  -extent geometry     set the image size
  -extract geometry    extract area from image
  -features distance   analyze image features (e.g. contrast, correlation)
  -fft                 implements the discrete Fourier transform (DFT)
  -flip                flip image vertically
  -floodfill geometry color
                       floodfill the image with color
  -flop                flop image horizontally
  -frame geometry      surround image with an ornamental border
  -function name parameters
                       apply function over image values
  -gamma value         level of gamma correction
  -gaussian-blur geometry
                       reduce image noise and reduce detail levels
  -geometry geometry   preferred size or location of the image
  -grayscale method    convert image to grayscale
  -identify            identify the format and characteristics of the image
  -ift                 implements the inverse discrete Fourier transform (DFT)
  -implode amount      implode image pixels about the center
  -interpolative-resize geometry
                       resize image using 'point sampled' interpolation
  -lat geometry        local adaptive thresholding
  -level value         adjust the level of image contrast
  -level-colors color,color
                       level image with the given colors
  -linear-stretch geometry
                       improve contrast by `stretching with saturation'
  -liquid-rescale geometry
                       rescale image with seam-carving
  -magnify             double the size of the image with pixel art scaling
  -median geometry     apply a median filter to the image
  -mode geometry       make each pixel the 'predominant color' of the
                       neighborhood
  -modulate value      vary the brightness, saturation, and hue
  -monochrome          transform image to black and white
  -morphology method kernel
                       apply a morphology method to the image
  -motion-blur geometry
                       simulate motion blur
  -negate              replace every pixel with its complementary color
  -noise geometry      add or reduce noise in an image
  -normalize           transform image to span the full range of colors
  -opaque color        change this color to the fill color
  -ordered-dither NxN
                       add a noise pattern to the image with specific
                       amplitudes
  -paint radius        simulate an oil painting
  -perceptible epsilon
                       pixel value less than |epsilon| become epsilon or
                       -epsilon
  -polaroid angle      simulate a Polaroid picture
  -posterize levels    reduce the image to a limited number of color levels
  -profile filename    add, delete, or apply an image profile
  -quantize colorspace reduce colors in this colorspace
  -radial-blur angle   radial blur the image
  -raise value         lighten/darken image edges to create a 3-D effect
  -random-threshold low,high
                       random threshold the image
  -region geometry     apply options to a portion of the image
  -render              render vector graphics
  -repage geometry     size and location of an image canvas
  -resample geometry   change the resolution of an image
  -resize geometry     resize the image
  -roll geometry       roll an image vertically or horizontally
  -rotate degrees      apply Paeth rotation to the image
  -sample geometry     scale image with pixel sampling
  -scale geometry      scale the image
  -segment values      segment an image
  -selective-blur geometry
                       selectively blur pixels within a contrast threshold
  -sepia-tone threshold
                       simulate a sepia-toned photo
  -set property value  set an image property
  -shade degrees       shade the image using a distant light source
  -shadow geometry     simulate an image shadow
  -sharpen geometry    sharpen the image
  -shave geometry      shave pixels from the image edges
  -shear geometry      slide one edge of the image along the X or Y axis
  -sigmoidal-contrast geometry
                       increase the contrast without saturating highlights or
                       shadows
  -sketch geometry     simulate a pencil sketch
  -solarize threshold  negate all pixels above the threshold level
  -sparse-color method args
                       fill in a image based on a few color points
  -splice geometry     splice the background color into the image
  -spread radius       displace image pixels by a random amount
  -statistic type geometry
                       replace each pixel with corresponding statistic from the
                       neighborhood
  -strip               strip image of all profiles and comments
  -swirl degrees       swirl image pixels about the center
  -threshold value     threshold the image
  -thumbnail geometry  create a thumbnail of the image
  -tile filename       tile image when filling a graphic primitive
  -tint value          tint the image with the fill color
  -transform           affine transform image
  -transparent color   make this color transparent within the image
  -transpose           flip image vertically and rotate 90 degrees
  -transverse          flop image horizontally and rotate 270 degrees
  -trim                trim image edges
  -type type           image type
  -unique-colors       discard all but one of any pixel color
  -unsharp geometry    sharpen the image
  -vignette geometry   soften the edges of the image in vignette style
  -wave geometry       alter an image along a sine wave
  -white-threshold value
                       force all pixels above the threshold into white

Image Sequence Operators:
  -append              append an image sequence
  -clut                apply a color lookup table to the image
  -coalesce            merge a sequence of images
  -combine             combine a sequence of images
  -compare             mathematically and visually annotate the difference between an image and its reconstruction
  -complex operator    perform complex mathematics on an image sequence
  -composite           composite image
  -crop geometry       cut out a rectangular region of the image
  -deconstruct         break down an image sequence into constituent parts
  -evaluate-sequence operator
                       evaluate an arithmetic, relational, or logical expression
  -flatten             flatten a sequence of images
  -fx expression       apply mathematical expression to an image channel(s)
  -hald-clut           apply a Hald color lookup table to the image
  -layers method       optimize, merge, or compare image layers
  -morph value         morph an image sequence
  -mosaic              create a mosaic from an image sequence
  -poly terms          build a polynomial from the image sequence and the corresponding
                       terms (coefficients and degree pairs).
  -print string        interpret string and print to console
  -process arguments   process the image with a custom image filter
  -separate            separate an image channel into a grayscale image
  -smush geometry      smush an image sequence together
  -write filename      write images to this file

Image Stack Operators:
  -clone indexes       clone an image
  -delete indexes      delete the image from the image sequence
  -duplicate count,indexes
                       duplicate an image one or more times
  -insert index        insert last image into the image sequence
  -reverse             reverse image sequence
  -swap indexes        swap two images in the image sequence

Miscellaneous Options:
  -debug events        display copious debugging information
  -distribute-cache port
                       distributed pixel cache spanning one or more servers
  -help                print program options
  -list type           print a list of supported option arguments
  -log format          format of debugging information
  -version             print version information

By default, the image format of `file' is determined by its magic
number.  To specify a particular image format, precede the filename
with an image format name and a colon (i.e. ps:image) or specify the
image type as the filename suffix (i.e. image.ps).  Specify 'file' as
'-' for standard input or output.

Az alábbi parancsot szoktam használni, a paramétereket persze a feladathoz finomhangolva:

convert -fuzz 4% -delay 1×30 input2*.jpg -coalesce -layers OptimizeTransparency outputanimacio.gif

Ahol:
convert Ez az ImageMagick egyik exe fájlja. Ennek elérési útvonala az én gépemen: C:Program FilesImageMagick-6.8.8-Q8convert.exe  Az egyszerűség kedvéért ebben a könyvtárban helyeztem el a bemeneti könyvtárat a jpg fájlokkal és a kimeneti könyvtárat is.
-fuzz 4% Ez a paraméter tömörítést tesz lehetővé, ezesetben 4 százalékos eltérésen belül azonos színűnek tekinti a pixeleket. Hasznos, hogy a fájl ne lépje túl az ésszerű méretet – 1 MiB fölött a gif szerintem túlzás.
-delay 1×30 Ez adja meg a lejátszási sebességet. Nagy képeket gyorsan váltogatni erőforrásigényes, ezért a böngészők 25-30 kockánál többet nem igazán mutatnak egy másodpercben. Az 1x után azt adtam meg, hogy hány képkocka legyen egy másodpercben. Ez a 30 történetesen pont annak a sebességnek felel meg, amivel a Scopium bolygókamera rögzíti a bolygóképeket.
input2*.jpg Itt vannak a képkockáim. A convert fájl mappájába tettem őket az input könyvtárba, hogy ne kelljen kilométeres útvonalat gépelnem. Kényelmi megoldás. Majd átteszem őket más helyre, ha befejeztem velük a munkát.
-coalesce Ez kell, hogy az animáció éljen.
-layers OptimizeTransparency A GIF létrehozásához még egy kis optimalizálás. Ha egy adott pixel nem változik két képkocka között, akkor átlátszóvá teszi a másodikat, és sok ilyen pixel esetén csökken a kimeneti fájl mérete
outputanimacio.gif A kimeneti fájl. Az output mappát előzőleg már létrehoztam.

Ebben az esetben a kimenet mindösszesen ennyi: megmutatni, milyen volt 2013. július 19-én a Szaturnusz rögzítése. A 102-es MC-ben kevés volt a fény, emiatt sok a zaj is. A nyugodtság sem volt valami kedvező. A Registax-szal kihozott végeredmény pedig a cikk elején lévő Szaturnusz. Jó ürügy egy rendes animgif elkészítésének útmutatójául.

PS: Némi programozói humor tartozik az ImageMagick-hez, a parancssor-változattól ebben a formában kár visszajelzést várni: fekete ablak látszik, semmi jele annak, hogy valami történne, de történik, s mikor az ablak bezárul, kész a gif.

A videó: ilyen volt a légkör, ennyire kevés a fény

A videó: ilyen volt a légkör, ennyire kevés a fény

Illetve egy ráadás:
kolozsvari_analemma_animgif

Frontend
Lazarus (delphi-klón) alatt fejlesztettem egy frontend-et az imagemagick fenn tárgyalt funkcióihoz. Kicsit más opciókat hív, kicsit másképp dolgozik, de az eredményével meg vagyok elégedve. Fogja a kijelölt videókat és temporális folderbe kicsomagolja a képkockáit, majd beemeli őket képekként. Fogja a kijelölt képeket (amik lehetnek képek vagy jöhetnek kicsomagolt videóból), temporális folderbe másolja őket, a másolatokat feldolgozza majd az eredményt kimenti a kért helyre/fájlba. Innen tölthető le, windows xp és 7-es alatt teszteltem. Ha még van benne bug, jelezzétek s kijavítom.

facebooktwittergoogle_plusredditpinterestlinkedinmail