48 lines
2.0 KiB
Markdown
48 lines
2.0 KiB
Markdown
# slitscan
|
|
slitscan is a script inspired by [this Mastodon
|
|
post](https://fed.qaz.red/@elithebearded/113070315634312301). 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!
|