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 视频
105KB
1.5K SLoC
终端媒体播放器
在终端中直接以ASCII形式查看图像、视频(文件或YouTube链接)、网络摄像头等。您下面看到的所有图像都只是由终端命令行上的字符制作而成,绘制得非常快。
目录
适合谁?
- 您真的不喜欢图形应用程序,或者在没有图形能力的情况下工作。
- 您正在寻找一种快速将视觉媒体转换为ASCII艺术的方法。
- 您想在终端中观看视频,但不想使用
mpv
或vlc
,因为它们太主流了。 - 您想向您的朋友展示您的终端技能,并让他们认为您是一名黑客。
功能
这个 crate 仍在早期开发阶段,但它已经有很多功能。以下是它能够或不能做什么的列表
- 将任何媒体转换为ASCII艺术并在终端中显示
- 支持图像/gifs/视频/网络摄像头和 YouTube 链接
- 任何分辨率、纵横比和帧速率
- 使用您的终端支持的任何字符集
- 方便的暂停/播放和字符映射选择 控制
- RGB 颜色(在支持RGB颜色的终端上)
- 播放声音
- 带来快乐
- 完整的媒体控制(快进、快退等)
- 字幕
- 替换完整的媒体播放器
RGB 颜色
在更新字符大小时实时更新
动态字符映射选择
动态调整大小
表情符号
网络摄像头支持
入门
以下说明将帮助您在本地机器上安装项目的副本,以便进行开发和测试。
先决条件
由于是一个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 build
、cargo run
或cargo 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