#ascii #opencv #image-format #video #image #media-file #output-format

app mediatoascii

将媒体文件(图像/视频)转换为ASCII输出的CLI和实用工具(输出媒体文件或打印到控制台)。支持大多数标准图像格式和视频格式。

4 个版本 (破坏性)

0.6.0 2023年11月6日
0.3.0 2022年9月25日
0.2.0 2022年9月22日
0.1.0 2022年9月21日

#38多媒体

MIT/Apache

2MB
477

Media-To-Ascii

将媒体文件(图像/视频)转换为ASCII输出的CLI和实用工具。
支持大多数标准图像格式和视频格式(取决于OpenCV)。

目前视频的输出格式只有 .mp4

示例

mediatoascii能够生成极其高质量的ASCII图像/视频(点击下方的图像查看全分辨率),或者通常的有趣缩放版本!

视频

(来自 https://www.tiktok.com/@swishanime_/video/7143035431066602794)

或者更高质量版本: https://i.imgur.com/vRJMpA1.mp4

图像

happy_image

discprof

&&&#&&&&GP&&&&&&G&G#&G5J#J#PPP#&JGG7#GPYGGPP5GGPPJGGGP55G5#JGPPP7JJ557JP5JY55JYJPPPY75PJ5PPPPPPP555JJ55JJJJ
&#&&&&&&P5GG&&&&P&#G&&Y5J5JY55YGGJ55#BBBPPG555PPJJJPGG557G5GPP55555YJJYPP5JJ5Y55PYPPPPPPPPPPP555555JJP5JJJ5
P&&#&&&&5JGY#G&#5G&&&&?JJ5?YGG?J5G?BBBBBBBBJ#G5JJJJ5JJY5555JJ55P5J75P?Y?JP75555PP5Y?PPPPPYYJJJ5PY#JJJ55P575
5P#P#&&#5YG7#5&#55&&&&YJPGPPGPPGG5&BBBBBBBBBGGGGJGG5555PP5J555JPJ7GBBBBBBPPY55PYPPPPP?JG@@@@@@@YY5555555557
5J#5P###5Y5JP5P#55GYPPPPPPPPPYJJYGBBBBBBBBBBBBBBBBB&#PJYJGYJJYBBBBBBBBBBBB7PPPYP5PPPJB@@@@@@@B7P5PPP555555P
5YP55GP#PJY5~55GPPPPPPPPPPPPPPPPYBBBBBBBBBBBB7JGBGJYBBBBBBBBBBBBBBBBBBBBBB7JJJ55JYJ?P&@@@@GG?55J777777J5PPP
YJ5JJ5YJG&&&&&J?GJ&#Y5PPPPPPPPPYBBBBBBBBBBBBBBB5YYY7BBG7BBBBBBBBBBBBBBBBBB7JJJPPJ5YP55PPG#~?7YYJJJJJ5PP5557
#&&#######&#######&##7JJ7YJJJ5Y&BBBBBBBBBBBBBB7YYYYYY&BBBBBBBBBBBBBBBBBBBB7PPPPPPGJ5555Y?555555555J###GGGP5
##&&#&&&&&&&GGJJ#GP5PPPPPPPPPP5BBBBBBBBBBBBBBBYYYYYY7BBBBBBBBBBBBBBBBBBBB#??7?JPP75555Y~PPP5JY555575###PJYG
&&&GYPPPPPPPPPPPJYYY77?JPJPPPY&BBBB&&&&&&&&&&&B&&&&&&BBBBBBBBBBBBBBBBBBB&?GPPPPPG~55557PJJPJ5J57#G7PPPPP5#7
&#JPGYJJ575PYPPP5PP5PPPPPPPP7YJ55555555555575555555555YY#&&BB&&&&&&B&&&#PYGGGGGGGY555Y?PPPPPPJYPPP5J5?7P~YY
&&&&&&&&&&&P5#PPJJYYYPPP7?7B?555555JJ55YJ555J5555555J7555555Y7P&&&&&&&G555GGGGGG55555Y?GPPPPPPPPJ5JYP???YYY
BBBBBBBBB&&&&&&&&&&&&&&&&&&P55557@@@@@@@@&J555555555555JYY77555557J##555YJPGGGGGY55557PGGGPPPPPPPPJJPPPPJ5P
BBBBB&BBBBBBBBBBBBBBBBB&&&&75555@@@Y~~~7@@Y5555555555Y@@@@@@@BY5555J7J55?#######?55557#GGGGGGJJPPP55P?P555Y
Y5B&PJ@@BBBBBBBBBBBBBBBBBBBY55Y@@@&~~~~~@@P555555557@@@&~~~?B@@Y5555J7?7&&&&&&#G~555J~GY777Y5J??P7?5PPGGPGY
7JY?7JYGBJ@@@@B@BBBBBBBBBBB5557@@@@@GP#@@@J5555555JB@@B~~~~~5@@@Y555Y7?B&&G5&&PJY55577PPPP5J55PPPPPPP55PPPP
PP?57Y77JJBB@GPJ77JGBB@BBBBJ555P@@@@@@@@@#555555557@@@@&~~~G@@@@Y55577?BBB&&&&&5555575P&P###GPPP77YJ555JP55
YY5&@&?JY&BBB@@@@@@@@@@@@#555P555JJ5P5YY555JJ555555J@@@@@@@@@@@7555J77#BBBBBB&B?555Y?&&&#########5GPG7J7JYY
@GP5@BBBBBBBB@@@@BB@@BB@@Y55G&&#5555555555J~:Y55555557#@@@@@@B?5555777BBBBBBBBG55557&&&###############G###G
BBBBBBBBBBB@@@@@@@@@@@@@@?555555555555555JJ7J55555555555555PP55555J7?BBBBBBBBB7555Y7&&#####################
@@@@@@@@@@@@@@@@@@@@@@@@G5Y?J5J55JJ555JJJ5JJJ77YYJ555555555PGG55JJY?YY5BBBBBB755JJ?&&&&&&&&&&&#############
@@@@@@@@@@@@@@@@@@@@@@@@@@@B?7JJJJJJJJJJJJJJJJJJJJJ55JJ555555JJJJY7:YYYY5BBB55J5Y7#B&&&&&&&&&&&&###########
@@@@@@@@@@@@@@@@@@@@@@@@@JYYYYY7~7JJJJJJJJJJJJJJJJJJJJJJJJJJJJ?Y~:7YYYYYY7&G77Y77#BBBBBBBBB&&&&&&&&&&&&&&&&
@@@@@@@@@@@@@@@@@@@@@@@PYYYYYYYY??JY~?77JJJJJJJJJJJJJJJJJY77??:???YYYYYYYYY~7777GBBBBBBBBBBBBBBBBBB&&&&&&&&
@@@@B@@@@@@@@@@@@@@@@B7YY???755JJJJJJ~?P^::?~~:~::::~~??:Y~~????7YYYYYYYYYYY:7?BB@@@@@@@@@@@BBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBB?Y~J5JJJJJJJJJYJPPPY~:Y^7777?YG77JJJJJJJJY^?YYYYYYYYYYY7GB@B@@@@@@@@@@BBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBJYYY7Y7?~~::::GPPPPP?5&BYG?PPPP57JJJJJJJJJJJJJ77YYYYYYYY7?BBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBB&~YYY77777Y7????:Y#&BBBBBB&?JPPPPP?JJY~YJJJJJJJJJJJ?7Y77Y?~BBBBBBBBBBBBBBBBBBBBBBBBBBBBB
&&&&&&B&&&&&&&&&&&&G~7777777777?~7GJPBBBBBBBBBBB5PPPP7JY77B&??~^YJJJJJJ7?777?:B&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&P:?7777777777~G7J#&&&&BB&&&&&&&&&BY???:&&~~77777~JJ~:777?~7&&&&&&&&&&&&&&&&&##&#########
&&&&&&&&&&&&&&&&&&&&Y:77777777777?5#G7G&&&&&&&&&&&&P5??~7J~~77777777777777?~7&####################GGGGGGGGG
&&&&&&&&&&&&&&&&&&&&PP^?777777777777??5GGG5Y7????~~?YYY~?777777777777777??:YP#############GGGGGGGGGGGGGGGGG
&&&&&#########&&&&#&##J7~?77777777777777777777777777777777777777777777?~~~?#########GGGGGGGGGGGPPPPPPPPPPPP
#######################YP~:?777777777777777777777777777777777777777?~~::5P#########GGGGGGGGGGGGGPPPPPPPPPPP
#########################Y55^~~?7??77777777??7777??????7777777??~~~::P?G#GGGGGGGGGGGGGGGGGGGGGGGGPPPPPPPPPP
#########################G##7YP~::~~~~????????????????????~~~~~::JP?JJJJJGGGGGGGGGGGGGGGGGGGGGGGGGGPPPPPPPP
GGGGGGGGGGGGGGGGGGGGGGGGGJJJJJY7~YPY:::::~~~~~~~~~~~~~~:::::YPY~7:JYYYYYYYPGGGGGGGGGGGGGGGGGPPPPPPPPPPPPPPP
GGGGGGGGGGGGGGGGGGGGGGGGJJJJYYYYJJ?:77?~~7J555JJJJJY7?::::::YYY?YYYYYYYYYYYPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
GGGGGGGGGGGGGGGGGGGGGGGGYJJYYYYYJ:~~~~~~~7JJYYYYYY7:~77777?~^^YYYYYYYYYYYYYPPPPPPPPPPPPPPPPPPPPPPPP55555555
GGGGGGGGGGGGGGGGGGGGGGGPPPYYYYYY^~~~~~~~~YYYYYYYYYYYYYYY~~~~~:YYYYYYYYYYYY5PPPP5555555555555555555555555555
PPPPPPPPPPPPPPPPPPPPPPPPPPPPPYYYYY::~YYYYYYYYYYYYYYYYYY:~~~~~~:YYYYYYYY555555555555555555555555555555555555
PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPJYYYYYYYYYYYYYYYYYYYYYY^~:~:~:777Y5555555555555555555555555555555555JJJJJJJ
PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP55JY777777777777777777YJ55555555555555555555J5JJJJJJJJJJJJJJJJJJJJJJJJJJ

使用方法

基本用法

视频

# Playing videos as ascii art in the console (warning, for large videos, this may cause flickering on certain terminals)
mediatoascii --video-path <FILE_PATH>

# Saving ascii art as a video file (only .mp4 is supported as the output format)
mediatoascii --video-path <FILE_PATH> -o ascii.mp4

# Scale down the video by 2x so file size is smaller in storage and resolution
# For large videos, or if you see some alignment issues, please see the `--help` menu, notably settings `--scale-down`, `--font-size`, and `--height-sample-scale`
mediatoascii --video-path <FILE_PATH> -o ascii.mp4 --scale-down 2.0

图像

# Converting images to ascii in the console
mediatoascii --image-path <IMAGE_PATH>

# Outputting ascii images in an image file
mediatoascii --image-path <FILE_PATH> -o ascii.png

# Outputting ascii images as ascii text in a file
mediatoascii --image-path <FILE_PATH> -o ascii.txt --as-text

要查看完整功能集,请参阅 --help 菜单

$ mediatoascii --help
mediatoascii 0.1.0
spoorn
CLI and utilities for converting media files (images/videos) to ascii outputs (output media file or print to console).  
Supports most standard image formats, and video formats.


Usage: mediatoascii.exe [OPTIONS] <--image-path <IMAGE_PATH>|--video-path <VIDEO_PATH>>

Options:
      --image-path <IMAGE_PATH>
          Input Image file.  One of image_path, or video_path must be populated
      --video-path <VIDEO_PATH>
          Input Video file.  One of image_path, or video_path must be populated
      --scale-down <SCALE_DOWN>
          Multiplier to scale down input dimensions by when converting to ASCII.  For large frames, recommended to scale down more so output file size is more reasonable.  Affects output quality. Note: the output dimensions will also depend on the `font-size` setting [default: 1]
      --font-size <FONT_SIZE>
          Font size of the ascii characters.  Defaults to 12.0.  Affects output quality. This directly affects the scaling of the output resolution as we "expand" each pixel to fit the Cascadia font to this size.  Note: this is not in "pixels" per-se, but will roughly scale the output to a multiple of this [default: 12]
      --height-sample-scale <HEIGHT_SAMPLE_SCALE>
          Rate at which we sample from the pixel rows of the frames.  This affects how stretched the output ascii is vertically due to discrepancies in the width-to-height ratio of the Cascadia font, and the input/output media dimensions. This essentially lets you shrink/squeeze the ascii text horizontally, without affecting output frame resolution. 
If you see text overflowing to the right of the output frame(s), or cut off short, you can try tuning this setting.  Larger values stretch the output. The default magic number is 2.046. See https://github.com/spoorn/media-to-ascii/issues/2 for in-depth details [default: 2.046]
  -i, --invert
          Invert ascii greyscale ramp (For light backgrounds.  Default OFF is for dark backgrounds.)
      --overwrite
          Overwrite any output file if it already exists
      --max-fps <MAX_FPS>
          Max FPS for video outputs.  If outputting to video file, `use_max_fps_for_output_video` must be set to `true` to honor this setting.  Ascii videos in the terminal default to max_fps=10 for smoother visuals
      --as-text
          For images, if output_file_path is specified, will save the ascii text as-is to the output rather than an image file
  -o, --output-file-path <OUTPUT_FILE_PATH>
          Output file path.  If omitted, output will be written to console. Supports most image formats, and .mp4 video outputs. Images will be resized to fit the ascii text.  Videos will honor the aspect ratio of the input, but resolution will be scaled differently approximately to `(height|width) / scale_down * font_size`
      --use-max-fps-for-output-video
          Use the max_fps setting for video file outputs
  -r, --rotate <ROTATE>
          Rotate the input (0 = 90 CLOCKWISE, 1 = 180, 2 = 90 COUNTER-CLOCKWISE)
  -h, --help
          Print help
  -V, --version
          Print version

安装

以下是安装 mediatoascii 的不同方法

⚠️ 注意:如果下载的可执行文件被阻止,您可能需要禁用您的防病毒软件

预编译的二进制文件可供下载和使用,无需编译/构建依赖项,因此安装速度更快。选择适合您系统的版本

  • mediatoascii-x86_64-unknown-linux-gnu 用于 Windows
  • mediatoascii-x86_64-unknown-linux-gnu 用于基于Linux的系统(Ubuntu/WSL2等)
  • mediatoascii-x86_64-apple-darwin 用于 macOS

提取工件后,您可以在终端中像运行任何shell/script文件一样运行二进制文件,例如 ./path/to/mediatoascii <ARGS>|`cd path/to/mediatoascii && ./mediatoascii`,或者您可以将它添加到您的系统PATH中,以便可以从任何目录运行它。您可以在互联网上轻松找到有关如何为您的操作系统系统“将二进制文件添加到系统PATH”的教程。

[可选] Cargo

如果您选择以下涉及 cargo 命令的安装方法,您可能需要安装 Rust 工具链,包括 cargo(如果您还没有安装的话):https://doc.rust-lang.net.cn/cargo/getting-started/installation.html

先决条件:OpenCV

如果您不使用预编译的二进制安装,而是需要系统上安装 OpenCV 4.x,因为预编译的二进制安装将 OpenCV 静态链接到可执行文件中。

mediatoascii 依赖于 OpenCV Rust 绑定,这需要安装 OpenCV C++ 库。

有关不同系统的说明,请参阅 https://github.com/twistedfall/opencv-rust#getting-opencv

以下是一些缩写

Ubuntu/Linux/WSL2

对于 OpenCV 4.x,您需要使用 Ubuntu 20.04 或更高版本。

检查 Ubuntu 版本

lsb_release -a

如果您使用的是较旧的 Ubuntu 版本,请参阅各种 教程以更新您的系统

安装 OpenCV 和相关库

sudo apt install libopencv-dev clang libclang-dev

检查 OpenCV 版本

dpkg -l | grep libopencv

MacOS

安装 OpenCV

brew install opencv

检查 OpenCV 版本

brew info opencv

Windows

直接

遵循 https://github.com/twistedfall/opencv-rust#windows-package(推荐 chocolatey 路径)。

确保您已正确设置环境变量 OPENCV_LINK_LIBSOPENCV_LINK_PATHSOPENCV_INCLUDE_PATHS,根据 https://github.com/twistedfall/opencv-rust/issues/118#issuecomment-619608278

同时,确保 opencv 的 bin/ 目录在您的 PATH 中:https://github.com/twistedfall/opencv-rust/issues/113

如果您看到这个错误(或其他的)

CMake Error at ports/atlmfc/portfile.cmake:7 (message):
  Unable to locate 'afxres.h'.  Ensure you have installed the ATL/MFC
  component of Visual Studio.

确保您已安装带有 桌面开发 C++、ATL 和 MFC 的 Visual Studio。在新版本的 Visual Studio 中,这些可能默认为禁用。您可以在修改 Visual Studio 安装时在 Visual Studio 安装程序中安装它们。您可以在 Visual Studio 安装程序中安装它们,当您修改 Visual Studio 安装时。

WSL

您也可以通过 WSL2 安装 opencv - 允许在 Windows 上运行带有终端的 Linux 子系统:https://learn.microsoft.com/en-us/windows/wsl/install

然后您可以按照上面的 Ubuntu 设置进行操作。

注意:在 WSL2 中,路径中的驱动器以 /mnt/c/ 开头,而不是 C:/

Arch Linux

安装 OpenCV

pacman -S clang qt6-base opencv

Cargo binstall 二进制文件

# Install cargo-binstall
cargo install cargo-binstall

# Install mediatoascii
cargo binstall mediatoascii

# Run
mediatoascii --help
mediatoascii <ARGS>

Crates.io

cargo install mediatoascii

# Run
mediatoascii --help
mediatoascii <ARGS>

Git

# Clone repository and cd into it
git clone ...
cd mediatoascii/

# Install the package into cargo
cargo install --path .

# Run via `cargo run`
cargo run --release -- --help
cargo run --release -- <ARGS>

故障排除

  1. 如果您尝试在 WSL2 中更新 Ubuntu,您可能会在升级过程中遇到静默失败
  2. 错误加载共享库时:libopencv_videoio.so.4.2:无法打开共享对象文件:没有该文件或目录
    • 确保您已安装 OpenCV 4.x
  3. 图片大小 12668x22512 无效 ... global cap_ffmpeg_impl.hpp:3066 open VIDEOIO/FFMPEG: Failed to initialize VideoWriter尺寸太大 对于 MPEG-4
    • mediatoascii 在写入ASCII帧时放大图像,并且对mpeg4有帧大小限制。尝试设置 --scale-down 参数来降低输出分辨率。有关为什么需要放大图像的原因,请参阅https://github.com/spoorn/media-to-ascii/issues/2

依赖关系

~26–35MB
~370K SLoC