質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

解決済

Pythonを使って動画をアスキーアート化してターミナル上で再生したい。

Tor_15
Tor_15

総合スコア0

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

3回答

0評価

1クリップ

14閲覧

投稿2021/07/28 16:22

前提・実現したいこと

まずPythonを使用して動画をフレームごとに切り分けて保存します。
その後アスキーアート化し、ターミナル上で上書きし続けながら出力するというものです。
###発生している問題
フレーム全てをアスキーアートへと変えることはできましたが、ターミナル上で上書きしながら出力し続けることができません。
そのためアスキーアートがターミナル上で流れるように出力(1枚1枚新しく表示)されてしまい、見づらいものになってしまいました。

特にこの二行が思った通りに動きません。
・sys.stdout.write("\r" + ascii_image)
・sys.stdout.flush()

###該当のソースコード

Pyhon3.7

#指定したファイルから画像を読み込み、アスキーアートに変換し出力するプログラム import PIL.Image import cv2 import sys import time ASCII_CHARS = ["@","#","S","%","?","*","+",";",":",",","."] #リサイズ def resize_image(image,new_width=100): width,height = image.size ratio = height / width new_height = int(new_width * ratio) resized_image = image.resize((new_width,new_height)) return(resized_image) #グレースケール化 def convert_grayscale(image): grayscale_image = image.convert("L") return(grayscale_image) #変換 def pixels_to_ascii(image): pixels = image.getdata() characters = ''.join([ASCII_CHARS[pixel//25] for pixel in pixels]) return(characters) def main(new_width=100): for index in range(6565): path = "frame/frame_" + str(index).zfill(4) +".jpg" image = PIL.Image.open(path) new_image_data = pixels_to_ascii(convert_grayscale(resize_image(image))) pixel_count = len(new_image_data) ascii_image = "\n".join([new_image_data[i:(i+new_width)] for i in range(0,pixel_count,new_width)]) #ascii化 sys.stdout.write("\r" + ascii_image) sys.stdout.flush() time.sleep(0.033) main()

Python3.7

#こちらは動画からフレームごことに切り出すプログラム import cv2 import os def save_all_frames(video_path="動画の名前と拡張子", dir_path="frame", basename="frame", ext='jpg'): cap = cv2.VideoCapture(video_path) if not cap.isOpened(): return os.makedirs(dir_path, exist_ok=True) base_path = os.path.join(dir_path, basename) digit = len(str(int(cap.get(cv2.CAP_PROP_FRAME_COUNT))))#総フレーム数の桁を取得 n = 0 while True: ret, frame = cap.read() if ret: cv2.imwrite('{}_{}.{}'.format(base_path, str(n).zfill(digit), ext), frame)#画像で出力 n += 1 else: return save_all_frames()

####補足
・アスキーアート化させたい画像はカレントディレクトリの一つ下のファイルに保存しています
/frame/frame_0000.jpg (0000から6565までの6566枚)

・1フレームあたりおよそ0.033秒ほどの表示時間で約30fpsほどです。

・参考にした動画 : リンク内容

至らない点も多々あるかと思いますがよろしくお願いします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

dit.
dit.

2021/07/28 23:49

今回の問題と直接関係があるかわからないのでこちらにコメントしますが、 <link href="https://fonts.googleapis.com/css?family=Philosopher"rel ="stylesheet"> の「?」が全角になっているようなので半角に直しておいた方が良いかと思います。
Tor_15
Tor_15

2021/07/29 15:31

ご指摘ありがとうございます。修正させていただきました。ただ、依然としてCSSは反映されない状態です…。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。