A while ago i had the “need” to make a non removable “no advertisements” “sticker. To do that i tried several different methods to print on and etch metal. The methods where roughly based on various youtube videos for making other things. Its a while ago so i hope i dont misremember the details, i should have written this immedeately…
All the methods start out with a laser printer and then transfer the toner onto the object as a mask for etching.

Cold toner transfer

The image to be transferred is printed on normal paper. the object its intended to be transferred to is placed flat on a table and is wetted with a mix of ethanol and acetone something like 8:5 vol. Pure ethanol will do nothing, pure acetone will smear the toner. Then the printout is placed on top avoiding air bubbles and some timespan like 20sec is waited for the toner to soften. Next the printout is firmly pressed by some means (i used 2 pieces of wood and clamps) for some time (i waited 3 min). next the pressure is removed and one waits for it to fully dry. Next it is soaked in water for some time (3min in my case) and then with luck one can peel the paper off while the toner still sticks to the object one wants to transfer it too. Depending on the toner and paper different procedures are likely optimal. Using this to place a mask onto a piece of scrap aluminum worked so-so, some parts of the toner didnt like sticking on my first attempts. Also this method is only suitable for creating a mask for further processing, you would not want to use this to print onto metal as a final step as there is still paper sticking to the toner.


Hot toner transfer

The image to be transferred is printed on “toner transfer paper” (from ebay). The object to be printed upon is heated to slightly above the melting point of the toner (likely around 100°C) (i used a kitchen hot plate). Its important to get the temperature approximately right, too hot and the paper will be burnt. Also IR thermometers do not work accurately on shiny metal surfaces. The paper is then placed on the hot object and pressed firmly onto it (i used a silicon tube with a glass rod in it rolling over the paper several times). Next the object is taken off the hot plate and let cool. When cool the paper is removed, the toner mostly sticks fine, some individual tiny holes may be present in the transferred toner. To ensure good adhesion i reheated the object to >50°C above the melting point of the toner.

Heres an example of the result of this method using the last piece of scrap aluminum i had laying around:

Printing multiple times (if you can get the alignment right) or otherwise increasing the toner density improves the results of both methods. Also if there are defects, tiny holes or other you want to paint over them with something before etching. You also can apply some surface treatment like sanding or brushing to the metal before the toner transfer …


For the aluminum scrap pieces i had i used simple water and table salt as electrolyte, both anode and kathode where aluminum, separated by Plastic clothespins and held together by sticky tape. After several tries i learned that lower currents and voltages seem to work better. that is for the small piece i had something like 1.8V and i think 100mA for 2 hours. (Note, if you attempt to repeat this, you do so at your own risk, Electrolysis of water and table salt produces different things depending on the condition and electrode materials. Other electrolytes may be a better choice even though NaCl seems safe in this setup.)
After etching the toner mask needs to be cleaned off (unless it fell off already which it sometimes did and sometimes it stuck really
well) it can be removed with acetone or with patience also with other random things.

The electrodes with the cut up pieces of a clothespin and tape:

The results of several attempts

Transfer without etching

One can of course also skip the etching and keep the “mask” as the final result even with color or even as a addition to a previous etching step. This also works on glass (if you can heat and cool it without it shattering)

The results from my attempts for this:

After this i had no scrap pieces of aluminum left nor really time and the problem i was trying to solve (someone repeatly removing my fathers no advertisement sticker from his mailbox … to collect more free coupons or paper … solved itself as she stopped)

The Loongson 3A box i have is loud, which was a bit of a surprise to me. Subjectively the noise from its CPU fan is significantly louder than my 2 overclocked 6core i7 boxes together though nowhere near the hurricane level of the powermac.
Originally i had planned to run the box 24/7 or similar and submit results to fate.ffmpeg.org. But for a box standing in my living room the noise level was too high for that.
Obvious solution rip the fan out and stick a less noisy one in,
its a standard 60x60x15.5mm fan, i choose the Noctua NF-A6x25 FLX as replacement, i didnt pick the PWM variant because for some reason the 4pin cpu fan connector was unused and the old fan used a 3pin sys fan connector, so it felt safer to me to use the same.
To remove the old fan t he board must be removed, as the screws cant be undone without holding their behind.
With the screws and the fan, the heatsink comes off too:
The old thermal compound seemed not entirely uniform, part of it looked more solid than the rest. I intended to apply new anyway so that doesnt matter though, with the stuff cleaned off it looked this way:
As the noctua fan is thicker the screws cant be put all the way through the fan as they would be too short, putting them only through the bottom part makes them stick out at the bottom of the main board a bit more but there is enough space, ive also slightly bent the outtermost heatsink fins a tiny bit inward so they rest on the rubber part of the fan and added some o rings around the screws for a bit of extra vibration decoupling which was probably useless.
Thats how the result lookes:
and theres the old fan:

Does it still work ? yes and it still passes fate
What about heat? before /proc/cputemp was between 40 and 42°C and now its between 38 and 41 °C both while running fate.
For noise testing i put a microphone 3cm in front of the closed box (thats far away from all fans). I was too lazy to switch my other boxes off though:

sys-off-spectrum old-spectrum


Loongson Box switched off Original (AVC) fan New (Noctua) fan

After the patches from loongson yesterday, FFmpegs full fate testset passed.

time make fate -j4 -k >& fatelist8
real 28m32.631s
user 98m50.422s
sys 12m53.547s

Loongson very generously donated a MIPS box with “ICT Loongson-3A V0.5 FPU V0.1” CPU, 500gb 7200rpm WD Caviar Blue HDD, 4gb RAM and a power cable with Chinese plug to FFmpeg. Picture of the inside of the box:
Quick power meassurments show

  • ~1W when OFF
  • ~44W when IDLE
  • ~48W when running fate tests

Quick FFmpeg build benchmark with gcc (GCC) 4.8.3 20140624 (Red Hat 4.8.3-1):

  • 4m49.192s for time ./configure --enable-gpl --enable-pthreads --samples=/home/loongson/fate/ --enable-nonfree --enable-version3 --assert-level=2 --cpu=loongson3a --enable-loongson3
  • 19m31.114s for make -j4

Most of the x86 fate clients i did run, where run as VMs on a aging 2 core Westmere/Clarkdale i5 @ 3.33ghz. As ive added more and more virtual machines and configurations and the list of tests done by fate increased over the last 3 years, the box started to show its age, over these 3 years 1 HDD nearly failed, 1 SSD failed in it and as the amount of tests run kept increasing the time between tests being repeated kept getting longer.
About a week ago i ordered a new box to replace it finally. To my surprise the shop (in germany) refused to ship the HDD&SSD to austria, after a few minutes research on the matter i learned that apparently austromechana threatens german shops who dont pay them a fee on storage media thats sold to someone in austria. I guess one could also say European union & free trade at its finest.

But back to the topic, most of my x86 fate clients now run on a shiny new 6 core haswell @4.3ghz + samsung SSD. So the affected clients should be alot faster now and there are also already more tests being run, ive changed many of my clients to test the 3 currently maintained release branches in addition to git master.
Also, if you have some platform that supports FFmpeg and isnt on fate.ffmpeg.org, and you want to help FFmpeg, please setup a fate client (See the fate documentation).

In the last few weeks FFmpegs huffyuv codec has grown the ability to encode and decode a much broader list of pixel formats. From planar rgb variants 4:4:4 YUV to 4:1:0 YUV and bit depths up to 16bit and alpha support.
One might ask why anyone cares about all this, the awnser is simple

1 thread YUV420 10bit, matrixbench
FFv1 Huffyuv
encode fps 63fps 281fps
decode fps 82fps 418fps
filesize 478mb 765mb

Encoding parameters used:
-an -threads 1 -pix_fmt yuv420p10le -strict -2 -vcodec ffvhuff -context 1
-an -threads 1 -pix_fmt yuv420p10le -strict -2 -vcodec ffv1

6 threads YUV420 10bit, matrixbench
FFv1 Huffyuv
encode fps 269fps 1173fps
decode fps 386fps 2675fps
filesize 480mb 771mb

Encoding parameters used:
-threads 6 -an -pix_fmt yuv420p10le -strict -2 -vcodec ffvhuff -pass 2 test.nut
-threads 6 -an -pix_fmt yuv420p10le -strict -2 -vcodec ffv1 -level 3 -slices 6 test1.nut

As can be seen above huffyuv while it doesnt even get close to ffv1 in terms of compression even though i used per frame huffman tables and 2pass mode in the 2 tests, its simply much faster.

About a month ago we (the ffmpeg team) voted about which name our NGO to which people soon will be able to donate should have. A sideeffect of that is that the world now has one more application to count votes using various condorcet methods, borda count and instant runoff voting. Get it from svn://mplayerhq.hu/michael/trunk/ffvotetov with your favorite command line svn client while its still fresh ;).

The vote itself went pretty well, we had a huge participation and it was quite fun :). Less funny was that murphy hit us and the winning choices “FFmedia/Foundation for free multimedia” domain name was already taken by some anonymous person through domaimsbyporxy, who asked us for cash even to just forward a message. Luckily the 2nd most popular choice “FFMTech/Foundation for free multimedia technolgies” didnt had that problem and was just by 1 vote behind so we picked that.

About which voting method is best, i dont know, but for our vote at least they all produced the same result most of the time while people added their votes. In that sense i wonder if any vote in reality that used a condorcet method actually ever needed rules beyond condorcet like the popular schulze method? Anyone knows? i checked debians past votes but it seemed they all had a condorcet winner

There are SVQ3 files that ffmpeg cannot decode yet, the ones iam speaking of contain a image or watermark, often a logo in a global header (extradata in ffmpeg, QT has its own funky terminology for it). The binary decoder displays this watermark over the actually decoded video.

FFmpeg is in principle fully capable to decode these videos (and of course without these watermarks), the only problem is that 32bit of the header and following bitstream are modified by xoring them with a per file constant. Our problem is we do not know how the binary decoder calculates this constant. A example SVQ3 video and the corresponding constant of 0xA2A2A2A2 for this file as well as a bugreport on our tracker exist as well

The puzzle is to figure out how the binary decoder finds the constant, its likely not very hard for one knowing how to use a debugger, hint: memory breakpoint at the input data and a cup of coffee or tea or a can with cola.

Another week has passed in the ffmpeg universe.

  • Mans added -Bsymbolic, everyone wonders why this isnt default and what the ELF designers were smoking. Shared libav* becomes smaller, faster and more secure due to this change.
  • Mike fixes a security issue in the mov/mp4 demuxer. Noone writes a security advisory, like always.
  • Dave Yeo restores OS/2 support
  • RV30/40 work by kostya
  • VC1 improvments by kostya
  • removing globals used in API by me and mans (due to issues with -Bsymbolic)
  • export sha1 implementation in libavutil to the world (actually we just forgot to install the header) by Diego Pettenò
  • Various h264 fixes by jeff
  • Make mov useable over http by elupus and baptiste
  • Support overriding codec id for input files by me
  • Generic global header support for mov by baptiste
  • User adjustable dynamic range compression for AC3 by justin
  • djgpp support by Michael Kostylev
  • PC Paintbrush PCX image decoder by ivo
  • Sun Rasterfile decoder by ivo
  • Extract aspect ratio from ODML-avis by me
  • TechnoTrend PVA Demuxer by ivo
  • support removing elements from the AVL tree in libavutil and make it independant of malloc() by me
  • improve CRC API and install crc.h (another forgotten header) by aurel
  • various request_channels related fixes by justin
  • Linux Media Labs MPEG-4 (LMLM4) demuxer by ivo
  • support for libdc1394 v.2 by Alessandro Sappia
  • Do not install rtp.h (which should have never been part of the public API) by luca#1
  • User specifyable maximum amount of memory to use for the index. by paul kelly
  • libav-user was created by root
  • Add support for H.264 video in the RTP muxer by luca#1
  • ugly hack to support multicodec stsd in mov by me
  • subtitle support in mov improvmets by me and reimar
  • support for Matroska attachments by eugeni stepanov
  • ICC support by reimar
  • SMPTE 421 Annex L format demuxer by kostya
  • The monthly flames, accusations and insults, a vote about fixing warnings and me, baptiste and many others fixing many. Some gcc bugs in -Werror being found, all decoders being changed to have const input by me …
  • support for ogg text subtitles by reimar
  • mbaff spatial direct support by loren
  • many optimizations by loren
  • parallel regression tests by mans
  • various nut fixes by oded
  • support for speex in ogg by reimar
  • The first parts of libavfilter hit svn by bobby and vitor
  • MANY bugfixes, ive ignored most due to lazyness and i think its not that interresting for most readers anyway
  • Lots of cleanup by various people
  • myself loosing the ability to reliably capitalize words correctly as i move toward the end of this entry, also note, nothing has been spellchecked as its almost 6 in the morning here …

What has happened in the last ehm week since the previous weekly news, well alot …

  • some ffserver-IPv6-linux fix by Nicolas George
  • some ffserver-IPv6-macosx fix by Ronald S. Bultje
  • flv files with invalid headers work again after a fix by me
  • a vorbis decoder crash after “floor0 dec: booknumber too high” has been fixed by me
  • make ffmpeg stop if writing fails instead of continuing by me
  • split adx into adxenc.c and adxdec.c by aurel
  • improvements to the mpeg-ps detection which fix several mp3 files which where misdetected as mpeg-ps, by me
  • make the NellyMoser decoder use our generic mdct, finding out how to do this and doing it by fabrice
  • Electronic Arts XAS ADPCM decoder by peter ross and aurel
  • Electronic Arts .cdata demuxer by peter ross and aurel
  • RICE2 entropy coding and variable block size for flac support by Josh Coalson
  • reorder codec registration to prefer native implementations by diego
  • Warn user if bitrate parameter is too low by ramiro (using 100 instead of 100k was a pretty common cause of silly bug reports …)
  • List enabled code in configure output by ramiro
  • Remove libvorbis Vorbis decoding support by diego (our vorbis decoder IS bugfree :) at least as far as we know)
  • fix interlaced_frame flag for h.264 by jeff downs and Reinhard Nissl
  • dont send hundreads of RTCP packets by luca abeni
  • adpcm-ima encoder bugfix by Timofei V. Bondarenko
  • some of the MMS patches by Björn Axelsson hit svn, still quite a few to go
  • various h.264 fixes by Jeff Downs
  • Musepack SV8 demuxer and decoder by kostya
  • a-law/mu-law/16bit PCM support in SDP by luca abeni
  • ipv6/ipv4 udp cleanup by luca abeni
  • MPEG2 in RTP muxer support by luca abeni
  • split audio and video grabbing code into libavdevice by luca abeni
  • split wmv2 in its own files by aurel
  • intrax8 decoder by “someone”, now finally we can decode all wmv2 files
  • export top_field_first flag for h.264 by Reinhard Nissl
  • our own ogg muxer written by Baptiste, now finally you can store your music and videos in the worst container ever designed without having to depend on libogg
  • remove libogg support by Baptiste
  • 44.1kHz support and various other small improvements for our nellymoser decoder by alex
  • flv v9 32bit pts support by alex
  • remove important functions from snow by diego
  • mpegts demuxer segfault fix by jeff
  • Optimize memory management and some cleanup of the rm demuxer by roberto
  • remove perror() usage and take meassures against its reintroduction by luca abeni
  • dynamically allocate ByteIOContext in AVFormatContext so changes to it dont break the ABI by Björn Axelsson
  • VC-1 MMX DSP functions by Christophe GISQUET
  • part of the RV30/RV40 patchset from kostya hit svn, the rest should likely hit svn soon as well assuming i and kostya arent too lazy
  • pcm_s16le_planar support for electronicarts files by aurel
  • some stuff needed for OS/2 support by Dave Yeo
  • split vc1dsp_mmx out into its own compilation unit by aurel
  • MLP/TrueHD parser by Ian Caulfield
  • pause/play/seek support for the protocol API by Björn Axelsson
  • wma sound artefact fix by reimar
  • change british english to amerikan by diego and others, yes we all hate british english :)
  • make our rm muxer generate files playable by realplayer by kostya, i guess this once worked already in the past …
  • dnxhd 720p encoding and decoding support by baptiste
  • improvments to the mp3 detection by me
  • fix asf muxer so that asf files work better on win ce by me
  • Adpcm_swf regressions tests by benjamin
  • several segfault fixes in the mov demuxer by baptiste and takis
  • Many small fixes by various people ive been too lazy to list

Missing things, duplicated entries and wrong entries as well as spelling errors are unintended, if you find anything missing/wrong/duplicated tell me and ill fix it, dont bother telling me that every second word contains a typo i do know that already :)