e94a9cf2a3 | ||
---|---|---|
LICENSE | ||
README.md | ||
slitscan.py |
README.md
slitscan
slitscan is a script inspired by this Mastodon post. It takes a video file as input and allows you to "transpose" the frames of the video to view along the height or width axes instead of the "time" axis you normally watch a video along.
Usage
Say you have a video file foo.mkv
. To transpose along the height axis and save
to bar.mkv
, run
python slitscan.py foo.mkv bar.mkv --height
Similarly, to transpose along the width axis, run
python slitscan.py foo.mkv bar.mkv --width
Details
Uh... what does this do?
Check the linked post for another explanation and examples.
To elaborate, you can think of a video as a 3D array of pixels. Say the axes of the array are the frame, height, and width, in that order. Then the entry (24, 500, 900) gives you the pixel in the 499th row and 899th column of the 23rd frame of the video (we're 0-indexed). You can imagine "watching" a video as just iterating through the frame axis of that array and displaying each 2D slice.
This program transposes that 3D array so you're instead iterating over the height or width axis and displaying those 2D slices. For instance, if you transpose along the height axis, then the first frame of the output video consists of the top row of pixels of every single frame of the original video. The second frame is then the second row of every single original frame, and so on. Instead of viewing each original frame one by one, it's like you're viewing them all at once, but only one horizontal line of pixels at a time.
But why?
The author of that Mastodon post mentioned that he wrote a bash script to do this that took a couple of days to run for a short clip. I wanted to see if I could make it faster (and I did - this runs on the order of a few minutes for similarly short clips). It might be possible to make this script even faster, but I couldn't figure out how without the script using too much memory.
Is this even useful?
I would love to find out that it is!