Name by the awesome @tbodt
Are you a terminal fanboy like me?
Sure, but do you ever watch YouTube? In your terminal?
termplay
is the tool to convert images to ANSI sequences.
But it also supports playing videos... and YouTube...
Written in the systems language Rust, it has some solid performance.
When playing a video:
- Concurrency
- It's converting to ANSI while ffmpeg
is still processing!
- Audio/Frame Sync
- If one frame in takes longer to load and the audio continues on,
- don't just pretend nothing happened! Skip a few frames!
- Get back on track!
- Controls
- Pause video with space
- Control volume without arrow up and down keys
- Cancel video with Ctrl+C
Or if you want to maintain ratio
(Landscape image from pexels.com)
This tool is tested in GNOME Terminal, Konsole and alacritty (glitchy but amazing framerate).
Might not be fully or supported at all by whatever terminal you use.
``` termplay-image Convert a single image to text
USAGE:
termplay image [FLAGS] [OPTIONS]
FLAGS: -k, --keep-size Keep the frame size. Overrides -w and -h --help Prints help information -V, --version Prints version information
OPTIONS:
-w, --width
ARGS:
``` termplay-video Play a video in your terminal
USAGE: termplay video [FLAGS] [OPTIONS]
FLAGS: -k, --keep-size Keep the frame size. Overrides -w and -h --help Prints help information -V, --version Prints version information
OPTIONS:
-w, --width
ARGS:
Replace video
with ytdl
, and supply a URL as VIDEO, and boom!
Watch from YouTube directly!
Also has --format
(short -f
) to supply formats to youtube-dl to change quality and stuff.
If termplay is compiled with screen support (enabled by default) and you use X11, you can watch a specific window... Live!
A hacky and barely functional screen_control
feature (disabled by default) can also forward keypresses to that window.
This isn't very useful, but it's definitely cool!
TIP: To find your window ID, use
echo "ibase=16;$(xwininfo | grep "Window id:" | cut -d ' ' -f 4 | cut -c 3-)" | bc
``` termplay-screen Mirror your screen to the terminal
USAGE:
termplay screen [FLAGS] [OPTIONS]
FLAGS: -k, --keep-size Keep the frame size. Overrides -w and -h --help Prints help information -V, --version Prints version information
OPTIONS:
-w, --width
ARGS:
If you feel like playing a video multiple times on the same settings,
you can pre-process a video.
That means doing all the processing part separately, so you can skip it if you do it multiple times.
Example:
```
$ termplay preprocess video.mp4
Checking ffmpeg... SUCCESS
Creating directory... Starting conversion: Video -> Image... Started new process. Converting: Image -> Text Processing frame622.png Seems like we have reached the end Converting: Video -> Music Number of frames: 621 $ termplay video termplay-video 621 # 'termplay-video' is the default name for the processed folder. ```
Fun fact:
If you change the rate, you have to do it on both while pre-processing and while playing.
Or... don't. And enjoy playing the video in fast or slow motion.
... That said, it comes with a slight flaw. For now, you have to compile this yourself.
Rust v1.18 or more is required. See your Rust version with
rustc --version
Update rust with
rustup update stable
Other than that, this project is hosted on crates.io.
So to install you just need to run
cargo install termplay
Default features:
Disabled features:
To disable default features, run
cargo install termplay --no-default-features
To enable specific features, run
cargo install termplay --features "..."
where ...
is a comma separated list of features.
If you just want to get this running with default features, you can use the
AUR Package
Example:
sudo apt install libopenal-dev libsndfile1-dev libsixel youtube-dl
cargo install termplay