Oliver Hagen

Making

SSTV Video Filter

The slowest to apply video effect ever.

Introduction

Slow-scan Television is a pretty cool old technology that encodes and decodes pictures into sound, suitable for transmission over radio. The uses nowadays are probably exclusively recreational; ham radio enthusiasts sometimes use it to send and recieve pictures, with notable participation from the International Space Station, who also seem to occasionally chat regularly with ham operators.

There's a small community of people who don't send and recieve SSTV over the radio, but still think that it's neat tech- I'm among this crowd. Searching 'SSTV image' on Soundcloud or YouTube reveals a bunch of videos featuring the trademark bleeping and fizzing noises, and the r/SSTV subreddit has some interesting posts. After familiarising myself with the basic use of the technology, I found amusement in intentionally distorting photos by introducing noise into the signal:

(Pardon me digging up evidence of my old SCP phase)

The effect of transmission is clear- reduced resolution and colours impart a pleasing lo-fi look, not unlike that found on a VHS tape. Introducing additional noise messes with the image to a significant degree. The next interesting thing I found was on the aforementioned subreddit, and it was a user who processed every frame of a music video with SSTV and then stuck the whole thing back together to create the exact VHS vibe described above. Here's the video they made:

The only non-awesome thing about this is that it took them an incredibly long time to do, as each frame was manually loaded up, broadcasted and recieved. My instinct straight away was to automate this so that I could run the process through without using up an entire day on it.

Implementation

As per my old coding projects, it's awful. One script separates a given video file into frames. Another one uses a Python library by someone clever to convert each generated image file into an SSTV sound file, using the robot36 mode to preserve decent enough quality while keeping transmission time to under a minute. A third script plays each of these files in order, with a two-second spacer file played in between each to make sure the SSTV programme in use recognises the end of each image. The fourth concatenates all of the images generated from the signals recieved by the SSTV programme, yielding the desired VHS-like video. The second, third and fourth script each delete the masses of files created by their predecessor, leaving a fairly clean working directory.

To stop me going crazy from the noise, I used the programme BlackHole to route the audio internally. I played a ten-hour white noise YouTube video quietly at the same time in order to add distortion to the images, and then let the programme run overnight. It took a Long Time to get any results, although this could be sped up by reducing the framerate of the input video. Still, for a three-minute video at 12fps, the process takes about 40 seconds per image transmission. This works out to about a day of waiting (180 seconds * 12fps * 40 seconds transmission time / 60 for minutes / 60 for hours), which is insane. I don't recommend this for literally anything, but it was fun to force this old technology into an application it's so ill-suited to (it is, after all, Slow-scan Television).

Miscellany

After finding the cool SSTV music video above, I left a comment on the creator's reddit post saying that I was planning to automate the process. Another redditor did the same, and the two of us had a fun race to making it work. The other user solved the problem faster than me and more neatly- here's my version, and here's theirs. They also commented in the initial post that made us both give the idea a go, which contains some of their code.

The only way to make this practical would be to write a decoder that doesn't need to hear the entire file out loud, but can speed-read it like the encoder library I utilised does. Some sort of white noise could be quickly added to each audio file to keep the element of static and distortion, and bring the whole thing a little closer to sanity. Maybe I'll try this, probably I won't.

Where to find

The horrible collection of scripts I used can be downloaded here, and you'll need an SSTV programme for your platform too. I use MultiScan 3B for macOS.


Last updated 2024-11-02