Converting Data to QR Code Video

One of the things I enjoy about computing is trying something silly, just to see what happens. Ever wonder what a live well of rainbow trout looks like as a QR code video? Well, look no further!

Trout

The tools involved are QREncode, ImageMagick, and MPlayer.

#!/bin/env bash

PREFIX=$$
export PREFIX

cat $1 | base64 -w 0| split -a 4 -b 2048 - ${PREFIX}.

for file in ${PREFIX}.????
do
  echo Converting $file...
  cat $file | qrencode -s 4 -o - | convert - ${file}.jpg
done

mencoder                                \
  mf://${PREFIX}*.jpg -mf fps=30        \
  -ovc x264                             \
  -x264encopts "threads=auto:crf=30:me=umh:me_range=16:subq=2:trellis=0:global_header:level_idc=41:force_cfr"           \
  -o output.mp4

echo Cleaning up...
rm ${PREFIX}.???? ${PREFIX}.????.jpg

Clearly you are wondering why I chose to break up the source file into smaller files 2048 bytes in size? According to the QR Code Wikipedia page, the maximum binary data a QR code can hold is 2,953 bytes. The qrencode utility sqawked with some byte sizes above 2048, so picking a nice binary number seems to play well.

The resulting video file looks like:



The real question is can we fetch sane data from the video file? The answer is yes, and more tools, zbar, and FFMpeg.

The decoding script looks something like:

#!/bin/bash

PREFIX=$$
export PREFIX

ffmpeg -i $1 -r 30 ${PREFIX}-%06d.jpg

for x in ${PREFIX}-??????.jpg
do
  zbarimg -q --raw $x
done | base64 -d - > DATA

Put this under the “why computers are fun” file.

Comments are closed.