Brutal Doom: Stablised

Zandronum window stablised using default 'VidStab' stablisation settings via FFmpeg.

more info:

Russia needs to get its act together

An image comparing two news stories. On the top left: 19-year-old mass-shotting killer Nikolas Cruz being arrested on the ground. The ground is replaced with the american flag and the image of an AR-15 assault rifle is included. Underneath are the stats: 'AMERICAN TEEN, SPORTING EQUIPMENT, AMERICAN HIGH SCHOOL, 17 DEAD'. On the top right-hand side of the image: A silly-looking Владимир Путин (Vladimir Putin) stands in front of St. Basil's Cathedral. In his hand, an open tin-can with noxious green fumes emanating from it. THe tin-can has warning symbols and 'NOVICHOK' labels. At the bottom of the can in hand writing are the words: '100% cyka blyat!'. Underneath are the stats: 'RUSSIAN FEDERATION,MILITARY GRADE NERVE AGENT, ENGLISH PARK BENCH, 0 DEAD.'

While our American friends show how it's really just child's play, Vova, with his persistent love of Rube Goldberg mechanics, makes himself look like a really bad Bond villain...

James Bond: "Do you expect me to talk?"
Bond villain: "Haha no Mr. Bond, I expect you suffer a suspicious, but recoverable, ailment in a public place, using an easily traceable substance, in the middle of the most tense geopolitical situation since the Cold War, weeks before my country hosts the FIFA World Cup."


A silly-looking Владимир Путин (Vladimir Putin) stands in front of St. Basil's Cathedral. In his hand, an open tin-can with noxious green fumes emanating from it. THe tin-can has warning symbols and 'NOVICHOK' labels. At the bottom of the can in hand writing are the words: '100% cyka blyat!'

FFmpeg: Colour animation from macroblock motion-vectors

The animation is created from styling the macroblock motion vectors, as displayed by FFmpeg, rather than by manipulating the actual video content. The blocks of colour are created by stacking 'dilation' filters on the motion-vector layer. Before being dilated, the colouring of the arrows is extracted from the original video by 'colorkey' overlay. Based on an earlier filtergraph experiments.¹

# Generate stylised animation from video macroblock motion vectors, 
# and present in a side-by-side comparison with original video. 
# version: 2018. 
# source: 

cropSize="640:ih:480:0" # Adjust area and dimensions of interest

ffplay \
   -flags2 +export_mvs \
   -i "$1" \
   -vf \
         split [original][vectors];
         [vectors] codecview=mv=pf+bf+bb,
                   crop=$cropSize [vectors];
         [original] crop=$cropSize,
                    split=3 [original][original1][original2];
         [vectors][original2] blend=all_mode=difference128,
                              split [vectors][vectors1];
         [vectors1] colorkey=0xFFFFFF:0.9:0.2 [vectors1];
         [original1][vectors1] overlay,
                               eq=contrast=1.4:brightness=-0.09 [pixels];
         [vectors][original][pixels] hstack=inputs=3

¹ see also:
source video: りりあ (LILIA) (used without permission) m(_ _)m

Bash: Seven applications designed to display images in a terminal

Personal notes on seven programs that provide some ability to display images in a POSIX terminal interface [bash environment specifically]. This is in no way an exhaustive list, nor does it claim to highlight the best applications available. These are merely notes made recently while investigating a solution for such a task.

source image: '"Michael Gehlert" by Harald Peter'

Review: Winter Olympics 2018

High above the Olympic village, dastardly Vova Putin flies upon his diabolical meldonium powered Dope Rocket™, sprinkling athletes with his dope juice. - February 26, 2018

The 'Games' this year seemed a bit dull and uninspiring. Perhaps that is just my own perception though. Perhaps there weren't enough Time magazine covers with barbed wire Olympic rings, stories about weird toilets, warnings of 'Black Widows' blowing up planes with toothpaste bombs, or comparisons to the 1936 Berlin Games with premonitions of homosexuals being exterminated, to heighten my attention and excitement. The only bit of drama came from the ever persistent 'Russian Doping Scandal' story.

'Doping' seems to mean a lot of things these days. If you rub the wrong boil ointment on your arse, it's classed as 'doping'. It doesn't mean unusual amounts of asthma medication, or Japanese figure skaters winning gold medals 'doped' up on pain killers though.* Sport is filled with the dopes: the athletes, the officials, the journalists.¹

I liked the pre-recorded 'drones' section of the opening ceremony. Although what I missed was the outrage and accusations of 'State media censorship' when they switched to it, like there was when a back-up recording was used in the 2014 Sochi Games after there was a malfunction in the most important image of the Games: The appearance of the Olympic rings. That meant there was no similar 'feel-good' moment in the closing ceremony, like in Sochi when the organisers mocked themselves over the malfunctioning Olympic rings and the West collectively gasped: 'oh my goodness, Russians must be human too?'.

I thought it very nice that the USA sent vice-president Pence to the games, to sit next to the DPRK representative. The DPRK; the most sanctioned country in the world; the country, we're told, who might blow up the planet at any moment! The USA were unable to send anyone to Sochi though, because "Russia".²

There was no snow in the Republic of Korea, so they manufactured it all. Again [like a broken record]: Four years ago, we heard complaint, ridicule, and mockery, about how the Sochi snow wasn't 'real snow' and how embarrassing it was to have to put it there artificially.³

Alpine skiing: Not bad. Personally, it was a bit of a flop due the German women's team not doing so well. More importantly, their racesuit was the worst I've ever seen (and we thought the 'go faster stripes' of Sochi were bad!). Highlights: Poor American performance; Super-G race where Ester Ledecká pipped Anna [Fenninger] Veith for the gold medal.

All in all, a lackluster Games; very utilitarian. Russia didn't exist; America and China results were woeful.


¹ I find the whole topic of "drug" use in sport difficult to resolve. Humans are electro-chemical machines, we exist in, and are, chemistry. We can't be measured like the length of a ski, or number of bullets in the magazine of a biathlon rifle. "Drugs" seem like an intangible thing to track without some level of hypocrisy. As an example, there's already a potent stimulant that's classed as uncontrollable: Trimethylxanthine, aka, caffeine. Maybe its legal status is helped by the fact that all these sporting events are sponsored by caffeinated beverages.

² "the 1980's are now calling to ask for their foreign policy back" - Barack Obama.

³ How much energy was used to generate this snow? We'll be lambasted with Global Warming warnings, and how traditionally snowy areas are now snowless due to rising temperatures, meanwhile we'll burn up the planet to put snow back into these places. It seems like a downward spiral.


— OIOIIOOIXIII (@oioiiooixiii) February 15, 2018

⁴ How uninspired do you have to be to write "Germany" in faux Hangul script and stick it down the front of a racesuit 4 times. This is truly their worst. The blank one in 2010 was sublime in comparison.

— OIOIIOOIXIII (@oioiiooixiii) February 18, 2018

see also:

ImageMagick: Reversible Image Masking for lossy image formats

A demonstration of an image masking procedure using ImageMagick, presented as a Bash script. The concept is to obfuscate an image such that it becomes meaningless to the observer (human or machine) but that can be easily recovered using the correct steps. Since it is based on visual alterations rather than altering the file itself, it does not suffer from informational corruption if the image is resaved and/or resized.

In its current form, it's deemed as weakly cryptographic. It could be reversed via brute force study of patterns and edges (as was seen with VideoCrypt, the analogue video encryption used with satellite television¹). Image masking is an old idea that may still have some value today. Further notes are found within the bash script below.
# Demo implementation of reversible image obfuscation for lossy file formats 
# (jpeg), based on ImageMagick[6] command chains.
# USAGE: ['hide'/'recover'] ['image']
#        (Images cropped to multiples of 64 in this implementation.)
# * See 'NOTES' at bottom of script for further information and ideas.
# N.B. Regarding cryptography: reversible by brute force, edge-analysis ,etc.
# Designed for privacy from casual scanning (human/machine). Inspired by
# previously developed image masking systems: (GMask, JMask, VideoCrypt, etc.)
# Source:
# Version: 2018.

function obsfucate() # Takes: 'filename', 'width', and 'height'
   local width="$2" height="$3"
   # Crop into 64x64 blocks, rotate 90 degrees, and negate 1/4.
   # Tile blocks in reversed image orientation (Height x Width).
   # Crop into 16x16 blocks, rotate 90 degrees, and negative 1/4.
   # Tile blocks in reversed image orientation (Height x Width).
   # One extra 'rotate' at end to return to original orientation.
   convert "$1" -crop 64x64 -rotate 90  \
      \( +repage -region 32x32+0+0 -negate \) miff:- \
   | montage miff:- -mode concatenate \
      -tile "$((height/64))"x"$((width/64))" miff:- \
   | convert miff:- -crop 16x16 -rotate 90 \
      \( +repage -region 8x8+0+0 -negate \)  miff:- \
   | montage miff:- -mode concatenate \
      -tile "$((height/16))"x"$((width/16))" miff:- \
   | convert miff:- -rotate 90 ${1%.*}_HIDDEN.jpg

function deobfuscate() # Takes: 'filename', 'width', and 'height'
   local width="$3" height="$2"
   # width,height values swapped, 270 rotate to match 'obfuscate' re-orientation
   convert "$1" -rotate 270 -crop 64x64 -rotate 270 \
      \( +repage -region 32x32+0+32 -negate \) miff:- \
   | montage miff:- -mode concatenate \
      -tile "$((height/64))"x"$((width/64))"  miff:- \
   | convert miff:- -crop 16x16 -rotate 270 \
      \( +repage -region 8x8+8+8 -negate \) miff:- \
   | montage miff:- -mode concatenate \
      -tile "$((height/16))"x"$((width/16))" ${1%.*}_RECOVERED.jpg

function main()
   local width="$(identify -format "%w" "$2")"
   local height="$(identify -format "%h" "$2")"    

   # Crude method of making the image dimensions multiples of 64
   if [[ "$((width%64))" -gt 0 || "$((height%64))" -gt 0 ]]
      local width="$(((width/64)*64))"
      local height="$(((height/64)*64))"
      convert "$2" -crop "$width"x"$height"+0+0 +repage "${2%.*}_CROPPED.png"
      local filename="${2%.*}_CROPPED.png"

   [[ "$1" == "hide" ]] && obsfucate "${filename:-$2}" "$width" "$height"
   [[ "$1" == "recover" ]] && deobfuscate "${filename:-$2}" "$width" "$height"

main "$@"

### NOTES ###################################################################

# The command chain 'algorithm' demonstrated here, is just one particular way of
# rearranging an image, using rotation, negation, and altering aspect ratios. 
# More complex chaining as well as extra measures will result in more obscurity.
# Saving files at interim stage and reordering blocks allows for greater 
# manipulation and security (e.g. unique block ordering based on pass phrases). 
# Advantages and uses: survives rescaling and re-compression, with minimal 
# additional losses due to principles of DCT quantisation. It allows for images 
# to be stored on-line using public/private 'cloud' services that destroy 
# cryptographic information by rescaling/compressing the image. Reversible via 
# alternate means (e.g. Python PIL etc.) if software becomes unavailable. 
# Cons: Relatively slow, cumbersome, non-dynamic way to browse images.
# A side-effect of the procedure is the removal of EXIF information from the 
# image, thus no need for including the '-strip' argument such was desired.

To show the differences created when the image is resaved [with heavy compression] while in a state of obfuscation, the following was completed: The image was masked and saved as a jpeg with quality set to '25'. The original image was also saved as a jpeg with quality set to '25'. Both of these images were 'differenced' with the original, and the result of each were 'differenced' with each other. This image was then normailised for clarity. N.B. "Difference" does not imply quality loss but variance in compression artifacting.

Below left: Differences between original and image that underwent obfuscation then deobfuscation.
Below right: Differences [normalised] between heavily compressed images, as mentioned above.

more info:
see also:
image source: c⃠
image source: c⃠,_Krasnaya_Square,_Sunset.jpg