成果物
詳細情報
- 日数: 4日
- 言語: Rust
Crate | Version |
---|---|
image | 0.25.1 |
term_size | 0.3.2 |
tokio | 1.37.0 |
rusty_ytdl | 0.7.1 |
FFmpeg | 4.4.2 |
clap | 4.5.4 |
技術選定
Rustを選んだ理由は、下記の理由です。
1. 似たソフトをPythonで実装している方がいたのですが、どうせなら別の言語で実装したかった。(Python経験ほぼ無いし...)
2. 読み書きのIO処理や繰り返し処理を多用するため、処理が早く・安全性が高い言語がいいのでは?と考えた。
3. 1番の理由はやっぱり、Rustが一番書いてて楽しかったから...(笑)
実装方法
- Youtubeから動画をダウンロードし、ファイルを読み込む。
- FFmpegを使用し、動画を画像フレーム&&グレースケール変換・ターミナルサイズに合わせ画像をリサイズする。
- フレームの明度ごとに文字を割り当て、繰り返し処理を使用してターミナルに表示する。
実装にあたってつまずいた部分
FFmpegのRust用Wrapper Crateを使用しようと思ったのですが、Buildにそもそも失敗し、 結局、うまくいかなかったためCommand::newで子プロセスとしてFFmpegを実行する方法に切り替えました。
再生中に、ノイズのようなものが表示されるのを解決できませんでした。
別の実装方法を考慮すべき点
24FPS処理のため、3分40秒の動画で220s*24fで5200枚程度の画像が生成される事になり、
ターミナルサイズが大きいほど解像度が高くなるため、綺麗に描画したい場合は、より容量が必要になります。
IO処理や繰り返し処理を多用しすぎた点も反省...
ソースコード
より良い実装方法ができる方は、是非教えてください! github.com