/A/ /M/A/G/N/I/F/I/C/E/N/T/ /P/L/A/C/E/ 

May 2015

20:27 Sunday 31 May 2015

Heppy Babs

I've been making a few video recordings of my bicycle rides and playing around with FFMPEG for video processing. I've been wanting to use it to make kaleidoscopic effects but the syntax of the filter chains had so far eluded me. I decided it was time to try and understand the syntax rather than blindly experimenting in frustration.

For some reason I'm somewhat taken by mirroring effects on videos - probably a symptom of my inexperience with video. One of the ideas I wanted to try was to mirror the top two thirds of the left hand side of a video, and the bottom third of the right hand side. The FFMPEG documentation for filtering looks a bit intimidating at first, but with a little effort is not quite as bad as it looks.

On my way to mirroring the LHS of the top 2/3rds of a video, and the RHS of the bottom third, after a few stabs in the near-dark, I decided to simplify the task at hand to slicing the bottom third of the video off and recombining it - if I could not tell any slicing had taken place then all was well. The command below horizontally flips the bottom third however as evidence of the processing that has taken place.

ffplay -i \
   -vf "split [tmp1][tmp2]; \
        [tmp1] crop=iw:(ih/3)*2:0:0, pad=0:ih+ih/2 [top]; \
        [tmp2] crop=iw:ih/3:0:(ih/3)*2, hflip [bottom]; \
        [top][bottom] overlay=0:(H/3)*2"

The split command creates two streams from the single video source naming them [tmp1] and [tmp2]. A stream must have one destination, it cannot have no destination nor more than one destination, hence the split command. [tmp1] is then cropped, using the crop command in the form of crop=width:height:top-left-x:top-left-y. The variable iw means input-width of [tmp1], ih is input height. Padding is then added to the cropped frames so they have the same vertical dimension as the uncropped source. The resulting stream is then named [top]. [tmp2] is then also cropped and then horizontally flipped and the result named [bottom]. Lastly, [bottom] is overlaid onto the bottom third of [top] - this is why the padding was added to [top] - so there was somewhere to overlay [bottom] onto. The overlay command does not use the same naming convention for input dimensions. Here, H is input height, and it is the height of the first input [top].

Once I was satisfied I had the slicing and placement correct I moved onto mirroring the left half of the top, and the right half of the bottom. The command to do that is below. For my own benefit I've ignored the fact that there are shorter ways of writing these commands. You may have also noticed I'm using the ffplay command and not ffmpeg, that was so I could see immediately what effect the processing was having and processing was not intensive enough to be too slow to be performed during playback.

ffplay -i \
   -vf "split [tmp1][tmp2]; \
        [tmp1] crop=iw:(ih/3)*2:0:0, pad=0:ih+ih/2 [top]; \
        [tmp2] crop=iw:ih/3:0:(ih/3)*2 [bottom]; \
        [top] split [tl][tmp3]; \
            [tmp3] crop=iw/2:ih:0:0, pad=iw*2:ih:iw:0, hflip [tr]; \
                [tl][tr] overlay=W/2 [mirrortop]; \
        [bottom] hflip, split [bl][tmp4]; \
            [tmp4] crop=iw/2:ih:0:0, pad=iw*2:ih:iw:0, hflip [br]; \
                [bl][br] overlay=W/2 [mirrorbottom]; \
        [mirrortop][mirrorbottom] overlay=0:(H/3)*2"

I didn't find the end result of the above command particularly appealing so moved on two axis of rotational reflection and then 4 axis of rotational reflection (if that's the correct term for it). Somewhere along the way I ended up with the following code which uses rotation to introduce something vaguely reminiscent of kaleidoscopic effects (neglecting to remember the amount of reflections that take place inside a kaleidoscope) with the end result shown by the video at the top of this post.


ffmpeg -i source.mp4 -vf "\ # video filters
        lutrgb=r=val*1.633587:g=val*1.642:b=val*0.80578, \
        hue=H=2*PI*t/5:s=sin(2*PI*t/4)+1, \
        rotate=2*PI*t/19, \
        crop=iw:ih/2:0:0 [top]; \
        [top] split [tl][tmp1]; \
            [tmp1] crop=iw/2:ih:0:0, pad=iw*2:ih:iw:0, hflip [tr]; \
                [tl][tr] overlay=W/2 [tmp2]; \
        [tmp2] split [tmp3][tmp4]; \
        [tmp3] pad=0:ih*2 [mirrortop]; \
        [tmp4] vflip [mirrorbottom]; \
        [mirrortop][mirrorbottom] overlay=0:H/2, rotate=7.5*sin(2*PI*t/20)" \
        -af "\ # audio filters
        aecho=1.0 : 0.34 : 260|265|270 : 0.25|0.25|0.250, \
        aecho=1.0 : 0.34 : 160|165|170 : 0.25|0.25|0.250, \
        aphaser=0.75 : 0.75 : 4.85 : 0.75 : 0.1,
        aecho=1.0 : 0.34 : 460|465|470 : 0.25|0.25|0.250, \
        aecho=1.0 : 0.34 : 660|665|670 : 0.25|0.25|0.250, \
        compand=.3|.3:1|1:-90/-60|-60/-40|-40/-30|-20/-20:6:4:-90:0.2" -strict -2 heppy-babs.mp4

youtube-upload \
               --title="Heppy Babs" \
               --description="Command line video processing with FFMPEG" \
               --category="Film & Animation" \
               --tags="ffmpeg, linux, mirror" \

As well as the aforementioned rotation, I've also added colour adjustment and some basic audio effects. If you're familiar with FFMPEG you'll also notice I've neglected to explicitly state anything about the video codec to encode the output file with - that might explain why youtube decided not to offer anything better than 360p.

The last thing I want to mention is the screen command which I use as an extra layer of protection against forgetting that there is processing taking place and closing the terminal or logging out - I'm in the habit of closing windows I don't use and sometimes misjudge. If I do either of these things while running ffmpeg under a screen session, screen ensures I do not potentially lose several hours worth or more of processing time. The command continues running and I can simply re-attach to the screen session should I need to see what is going on. This is also why I use the command line tool youtube-upload to upload the video; low bandwidth means this took an hour or so to upload... and I like to pretend I know what I'm doing.

FFMPEG Filters documentation

rackaid screen tutorial (got me started with screen)

youtube-upload on GitHub (view for instruction on getting started)

23:53 Tuesday 19 May 2015

Coin Side Fence











Coin side fence


A random collection of words clatters around making the noise of fingers tapping keys on the keyboard. Yawn. Data. Yawn. Datum occur. Transmits yawn. God I'm so boring. It's why I have no friends, because I'd rather be boring and master technical things so I can have other friends besides the ones I used to have. But I'm no master of technical friends, it's why I have no boring either.

I don't know that my brain will produce enough words tonight to fill out this block. It must deliver something. I need it to deliver more interesting words if I want people to read this. Seriously. Oh what do I care? I'm just trying to make something that looks interesting to read.

Clearly I fail on that count. Perhaps some mumbo jumbo: Wiggling reams of transfer agility, I lather the pillow beneath my telephone directory, hoping I can flinch against the mash potato. The crutch of mumbo jumbo cannot help tonight.

<code>How about some code?</code> Noffle cough the toad. I don't care for code no more. Oh this is really tough. I need enough paragraphs of text to get this block that looks like a page to take on portrait orientation, and there's a long way to go to reach that goal yet.

Still, I have not consulted the dictionary to remind myself of words which are not falling into my immediate vocabulary - but now I have extended my immediate lexicon - see. I am not a fan of the word vernacular. It is a very unappealing word which leaves a bad taste in the mouth, almost distressingly so. Perhaps one could say of those who use it with regularity that these people are not to be trusted. They who speak of the vernacular.

I hope my ignorance is not painfully obvious. I'm not sure about those who are normative either. Perhaps the taste left in one's mouth after dealing with normative people is even more unpleasant than those who scorn those who speak in the vernacular always. My advice is to never be normative nor scorn those who speak in the vernacular.

Luckily for you my brain has almost delivered enough material for the collected words to arrange themselves before you in a portrait orientation. Lucky for me even as I'm starting to bore myself as well as you.

Just this one last paragraph should do it - I better make it a really good paragraph full of ingeneous word arrangements to bedazzle your mind with my extensive lexicon; I'm going to abandon the vernacular all together for this, it's going to be really fabulous, I can't wait.












21:11 Monday 18 May 2015

August Toed Rover














High chair, lease let mich introvert deuce my shelf irregularity polyjovial shear. Eye mutton of tetrahedroning on and on nan gone can long ham chronic shambling weltering cosplay. Basking and flouncing in the confused multitude of things I take from the command line dictionary, dict, lookup

Loop ketchup a rung often I'm so much gladder than buy clacksy hide fleace sing deed keyed microphones hark ring bird clay n all stalls of stools in the constantly choreographed absurd noon integer which one? folloing on from theological resolution from the command line dictionary, dict, lookup

Iron knee calling my forty tudors in chewy climates, geo stationary stickle gram of apple jesting, wriggling, gloopified heavy duty ostrich buffer. Open source rich guff cuffs roughed mince stereo clam hammer fullfilment raven gored open source decimal tazer gently for singing lichen eyebrowed rain gel soul derailment, from the command line dictionary, dict, lookup

Irradiating potatoes pain duration erata, an enourmous flute plip plop hay drone conical call. Lute tip rupee cup dicking deep dock leaves are glouring over ingesting my laced mice race across spice faced tri-encased mental apparitions. Try entering rusting climates by climbing the gates of my mates stately homes. Justly fry and knit flitting writs enlarged.

View winding dough we bow brows, sir. Carnage tottering instantly sewn seas flown blee of the warren tea may kinship wringing grease reigned steam trowels fall eloping rubels boobs scoping blue bells chew bus know curing flouted pea ham. de-kick up distilled pose.

Won hard laughing stutter remaking sense of electrical pickle ware heron comes ploding singing the common city ditty.
















view in web browser


Ingressed Pointilism


Listen to the flogging of clanging sprockets dropping slowly in a vacuum. Adjust your shoe buckle if necessary, while the interim is upon your onion skin. Collect dead leaves from around the pool of still water topped with pond weed and algae.

Pretend your age is more or less than what it is but make sure you don't fool others. Do not kill any other living being including plants and insects. Live only on water and air but make sure you do not kill any other living being including algae and plankton.

Stop raining down a storm on the back of the plight of the hamster. Reduce carbon copied permissiveness. Take a log from a sawn oak tree to your mother once in a purple moon, spruced up and dapper. Take a cup of mud to the dentist and claim it came from your teeth but fell out of your ear.

Do all these things and do them with any degree of appropriateness deserving of the plenitude of forgiven thunderbugs*.



*As in a thrifty day for gas collection.






Regrinding the flour toll


Capital tax pains colliding with repair work for autistic soilders of fortune.

Preparing for the long summer with questions not for ventriloquists nor their dummies. Scratching about kicking up a slurry of frog spawn.

Addititive synthetic clicking prompted empty noises from a far away land. A quick response is required.

Work the land well into the ground peppercorn on the doorstep ping stone down the corridor of powdered skimmed milk king of the dreamers wilderness*.

Crumbling cloud masses fixated on stealth manouvers and the verses of nano bot hive mind poetry. Fungicide hides undulating adultery rapidly outgrowing kilowatt generation excavation of testicles and gas vent flanges.

The long whole line into the galaxy hanging pendulously amongst the glimpses of obscured cinematically fleeting imaginings dropping like leaden weights into thick opalescent gravy.

Creative arrangements of words amongst space characters



*Distance-wise, there is cause for concern here.







seamlessly sewing strips of cotton backed frappe. Quilted finger skin protruding from evergreens. Skipping trance track.

The difficulty drift causes clopping effects to ring past the tantrum haulage rosette hanging on the moustache of quantum rinse mechanics.

Help me I don't know what my application could behind recession reversable continuum retalliative purple lexicon. Help me help the tumbling tradesman keep smart watches in the public interest of torpedo freight giddying lemur tank.

Flumuxed by your sense of ingratitude I speak to you directly you you you flumuxed buy your purchase of skimmed clique bowtie curdles and net curtain overlaid upon the chest freezer with, hideously growing within it, a temporary niche of infinite filament.

Control of the lifted fracture twerp cancellation negates evaporation and wicks contested quarter wench praxis.

Praxis Praxis Praxis shifted by taxis he's forgotten to pack his tax disc but wracks his mind when he's inclined to define a fact he's behind in a way his minds on an axis of decline*.



*Never let cattle grids spontaineously criticise the demographics of dermatological hydraulics.






Cohesive Leg Draft


Wrack mounted rip lunch hut redressing stamped out ocre velvet perfume. Concked in hushing fumble dick clamped hover mower. Matte dashed fever speckled vision reaching inter-calamity tissue root beer. Windy hair escarpment flip grapples vacuum-packed hideousness in elevations of vindictive rubble strewn overcoats.

Tripped up tropes tangled in ivy, hawthorne, and wild indecision creep eventually asunder. Reactions hampered by truffles in orbit around merriment organize flatulent haggling lipid vanishings.

Desperately cutting old rope into granny knot wonderment.

Unguidedly hewn together frommage causes a commotion only lessened by elatedly fractured pathogenic lotion ingested with patient devotion to smouldering rogue log velocity credit*.


James W. Morris

May 2015


*Benefits befitting befuddlement.





Handsome detriments amongst other things clump together in the night like clocks arguing amongst the tents of claggy braided dragon slayers. Me and my posse clamber with constant correctness dictating to one person chosen at random for a period of thirty seven and a half years the importance of relaxation during the act of ghost hunting.




Their warmed worn-out squaggly puzzle gust squatting red compass!


What help is coming when capsules of fingernail trickling down the neck of a screwdriver prevent fickle minded temptresses from hiding behind curtains of rock and moss?

Resillience is never helpful if the yelps of tesselation coincide with the alignment of teaspoon and teabag while the forthcoming rapture ends needlessly before it begun. Yet, when reaching the cliff edge, if you can tie up your shoelaces without fear, you might stand a chance in this life.


Infernal percentages of quality controlled pissant stampedes

Greatness resides in toiletry bags emptied of their humdrum commodities by a calculating entity composed of the thoughts of a populace within any given council district.

It is given by ten boulders ordered to collapse into many fragments by the stone-throw of a donkey scared of by its own imaginings of a helpless pigeon with its wings and feet wrapped in clingfilm on a dockyard in the sun.


Whitehall develops tetris gulf wrap wrongly and stifles dufflebags

Quickly non stick freedom grates against the personalization of the first thoughts of the day. It happens most days when hopping on one foot can lead to hemlines scooping chain gangs along the perimeter of an elliptical flower bed.

Whatever candles can say about static electricity is recorded for posterity by one ant and one ant alone.


Multiplication by ten derelict tower blocks leaves osmosis under seige.

Rebuilding a blagging boat's corrupt offal rich fondant stimies voters at election time drowning in the upcoming sorrowful extinction of honey bees. The residue of covert surveillance forms underneath the heel of elderly athletes.

Continuing the form, collating images of chickens pecking mint bushes, victims of pencil theft voice their concerns about patriarchical atom smashers.


Quicken the pulse of resolute wine makers quaffing heated treacle.

In terms of stopping what can temporarily hinder cucumber sandwich making from overtaking political discourse as a popular pass time, what they're talking about is in timid terms, yapping like a dog with its leg caught in a cat flap.

In other words, you can always find the same old letters scattering your thoughts here and there as if by a gust of psychic wind bristling the leaves of the mental equivalent of cauliflower plants after harvest near the end of the season.


Don't worry too much that the leaves are falling off the trees when Autumn comes, keep your mind on other worries, delicately balanced; your thoughts far from the tipping point, so that you may tiptoe among the daisies and clouds and green grass and never be chased by the giant of your drug-enhanced memories of childhood dreams.

Exercise your eyelashes. Wash your dashboard. Fold your place matts (if they may be folded). Keep in touch with negative space. Hold on tightly to words squeezed through fine meshed gauzes held aloft by the corpuscles of timely endeavours.




You can't keep kippers in relenting custodial virtuality, not when they snap at your empty potato peelings carrier bag. So you shake the quiet timing molecule until it rattles faintly between the first and second hairs of your left eyebrow, looking upward and feeling as if you should be praying to an unknown and probably non-existant god.




A page detailing new stuff and other random noise.

The journal is a general place for writing about what I am doing, or for making more official announcements concerning the things I do. It's also a place where I can write freely about my ideas, or just play with words and language.

DISCLAIMER: The opinions and attitudes of James W. Morris as expressed here in the past may or may not accurately reflect the opinions and attitudes of James W. Morris at present, moreover, they may never have.

this page last updated:29th April 2013 (C) 2003 - 2017 James W. Morris

script time:0.0465