#media-player #ascii-art #terminal #youtube #video-player #command-line

应用 tplay

一个在终端中直接将图像和视频以ASCII艺术形式可视化(带声音)的多媒体播放器

12 个版本

0.5.0 2024年3月26日
0.4.5 2023年8月9日
0.4.4 2023年5月22日
0.3.1 2023年5月2日
0.1.1 2023年4月15日

#40 in 视频

MIT 和可能 LGPL-2.1

105KB
1.5K SLoC

Image description

终端媒体播放器

Crates.io Crates.io License Aur

在终端中直接以ASCII形式查看图像、视频(文件或YouTube链接)、网络摄像头等。您下面看到的所有图像都只是由终端命令行上的字符制作而成,绘制得非常快。

目录

适合谁?

  • 您真的不喜欢图形应用程序,或者在没有图形能力的情况下工作。
  • 您正在寻找一种快速将视觉媒体转换为ASCII艺术的方法。
  • 您想在终端中观看视频,但不想使用 mpvvlc,因为它们太主流了。
  • 您想向您的朋友展示您的终端技能,并让他们认为您是一名黑客。

功能

这个 crate 仍在早期开发阶段,但它已经有很多功能。以下是它能够或不能做什么的列表

  • 将任何媒体转换为ASCII艺术并在终端中显示
  • 支持图像/gifs/视频/网络摄像头和 YouTube 链接
  • 任何分辨率、纵横比和帧速率
  • 使用您的终端支持的任何字符集
  • 方便的暂停/播放和字符映射选择 控制
  • RGB 颜色(在支持RGB颜色的终端上)
  • 播放声音
  • 带来快乐
  • 完整的媒体控制(快进、快退等)
  • 字幕
  • 替换完整的媒体播放器

RGB 颜色

colors

在更新字符大小时实时更新

font_size

动态字符映射选择

char_maps

动态调整大小

resize

表情符号

emojis

网络摄像头支持

webcam

入门

以下说明将帮助您在本地机器上安装项目的副本,以便进行开发和测试。

先决条件

由于是一个Rust包,您需要在系统上安装Rust。您可以在这里找到安装说明。

以下也是必需的依赖项

  • OpenCV 4 已与OpenCV 4进行测试。可能与OpenCV 3.4及以上版本兼容。
  • LLVM
  • ffmpeg 目前支持的FFmpeg版本:3.4.x至4.4.x。
  • 用于YouTube播放支持的可选依赖项:yt-dlp
  • 通过MPV播放音频的可选依赖项:MPV

它们可以在Linux上通过您的包管理器简单安装。有关更多详细信息,请参阅下面

Linux上的先决条件安装

如果您使用的是Linux(Ubuntu),可以使用包管理器安装所有依赖项。首先安装Rust

sudo apt install curl
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

然后安装tplay的先决条件依赖项

sudo apt install libssl-dev libopencv-dev libstdc++-12-dev clang libclang-dev ffmpeg libavfilter-dev libavdevice-dev libasound2-dev yt-dlp

Windows上的先决条件安装

该包可以在Windows上运行,所有先决条件(opencv,ffmpeg)都可以使用vcpkg安装。然而,安装/设置过程可能很长,容易出现错误。性能也非常差。节省自己的麻烦:使用WSL并遵循Linux说明

安装

对于用户

Arch Linux

您可以通过运行以下命令在Arch Linux上使用aur安装它(使用paru

paru -S tplay-git

其他发行版

该软件包目前在其他Linux发行版中不可用。通过贡献和支持,它也可以在其他发行版上提供):

使用 Cargo 安装

您可以通过运行以下命令安装tplay命令行工具

# Install the tplay command line tool
cargo install tplay

这样您就可以在任何地方运行它

tplay <media> [options]

对于开发者

# Clone the repository
git clone https://github.com/maxcurzi/tplay.git

# Change to the project directory
cd tplay

# (optional) Build the project
cargo build

# (optional) Run the tests
cargo test

# Run the project (use --release for faster performance)
cargo run --release -- <media> [options]

功能标志

默认情况下,该包使用rodio进行音频播放。如果您希望使用MPV(libmpv1 libmpv1-dev)作为音频播放后端,可以使用以下方式构建/安装包

--features="mpv_0_35"--no-default-features

或者

--features="mpv_0_34"--no-default-features

cargo buildcargo runcargo install命令中。

未来版本可能删除MPV支持。

用法

tplay<media> [options]

参数 描述
media 要处理的文件或流的名称(必需)。
-f--fps 强制使用特定的帧率(--fps 23.976)。
-c--char-map 用于输出的自定义查找字符表(默认: .:-=+*#%@)。
-g--gray 以灰度模式启动
-w--w-mod 某些字符(如表情符号)的实验性宽度修改器(默认:1)。如果您的char_map由表情符号组成,请使用值为2。
-a--allow-frame-skip 实验性帧跳过标志。如果播放太慢,请尝试使用它。
-n--new-lines 实验标志。在每行末尾添加换行符和回车符 \n\r(最后一行除外)。终端会自动换行,不需要手动添加新行,但如果您想将文本复制粘贴到终端外部,您可能希望添加它们。否则,输出将是一个长的单行字符串。这会占用更多的CPU。
-l--loop-playback 循环播放视频/gif(默认:不循环 - 播放一次)

如果您计划从源代码运行,将 tplay 替换为 cargo run --release --

# Run it
tplay <media> [options]

# Example: local image
tplay ./image.png

# Example: local gif
tplay ./image.gif

# Example: local video
tplay ./video.mp4

# Example: remote video (YouTube)
tplay https://www.youtube.com/watch?v=dQw4w9WgXcQ

# Example: remote video (Other)
tplay https://media.developer.dolby.com/Atmos/MP4/shattered-3Mb.mp4

# Example: YouTube video, with different char maps
tplay https://www.youtube.com/watch?v=fShlVhCfHig --char-map " ░▒▓█"

# Example: YouTube video, with different char maps (use w-mod to adjust width when using emoji-based char maps)
tplay https://www.youtube.com/watch?v=FtutLA63Cp8 --char-map "🍎🍏❤️😊" --w-mod 2

# Example: webcam on Linux (YMMV on other OSes)
tplay /dev/video0

播放命令

  • 0-9 - 更改字符映射(0对应0)
  • space - 切换暂停/播放
  • g - 切换灰度/彩色
  • m - 切换静音/取消静音
  • q - 退出

已知问题

  • 通过Konsole终端播放的视频可能会有性能降低。这是由于Konsole处理终端输出的方式造成的。如果您遇到此问题,请尝试使用不同的终端仿真器。我推荐使用Alacritty以获得更好的性能。
  • 媒体播放会占用大量CPU。为了提高性能,请增加字体大小、减小终端窗口大小或使用-a / --allow-frame-skip标志运行。

替代方案

这是我的ASCII媒体播放器:有很多人有类似的,但这个是我的。

有关其他ASCII媒体播放器,请查看:https://github.com/search?q=ascii+player&type=repositories

贡献

欢迎贡献力量!请打开一个问题或提交一个拉取请求。以下是一些建议

  • 减少外部依赖并简化安装过程。
  • 调查从OpenCV迁移到FFmpeg的可能性。
  • 更多媒体控制(快进、快退、循环等)。
  • 在其他操作系统上安装和运行的测试和反馈。
  • 如果您有其他想法,请告诉我!

许可协议

本项目采用MIT许可证 - 有关详细信息,请参阅LICENSE文件。

为什么?

您的科学家们过于关注他们能否做到,而没有停下来思考他们是否应该这么做。

主要是为了乐趣而学习Rust。我还想看看是否有可能制作一个可以在终端中运行的媒体播放器。我认为现在在终端中播放视频非常酷。希望您也喜欢!

致谢

感谢以下人员的贡献和支持

依赖项

~14–48MB
~773K SLoC