Комментарии 34
Bad apple конечно легенда, и по мне, самое крутое воплощение было на осциллографе.
У вас, реализация - как просто попросить GPT покадрово разбить видео, перевести в ASCI и склеить. И код можно было бы и не писать.
Ну с GPT повторять мне особо не хотелось, потому что у меня уже года 2 были планы написать Bad apple ascii графикой, и портить это удовольствие халявой с нейросеткой я не хотел!
Я под линуксом видел видеопроигрыватели, которые итак могут проигрывать любое видео почти в ASCII-графике
Осциллоскоп это круто, но он лишь средство отображение, вся работа там делалась на обычном ПК. Мне больше понравился вариант на БК-0011М, хотя там тоже без современных средств не обошлось.
Аххахаха, мне еще понравилось, как чел свой мк сделал и на нем запустил (https://www.youtube.com/watch?v=1OfeswjPZuw)
Мои 5 копеек в тему Bad Apple.
Hidden text
Bad Apple на ПЛИС ECP5 и светодиодной матрице HUB-75e
Моя реализация Bad Apple на LEGO EV3 Mindstorms
На Windows Task Manager
Святые небеса... это и сюда попало. Даже на хабре меня преследует это плохое яблоко. Всю ленту в ютубе забило, так ещё и стало из ютуба выбираться... кто-нибудь знает, кто первый решил запустить плохое яблоко "на чём-то" и по какой такой волшебной причине это вдруг стало настолько популярным (запускать видоряд из оригинального видео на разных устрйоствах)? Я пытался найти ответ на этот вопрос и не смог. Никто не знает первоисточник и нулевого пациента.
В таком формате а-ля "дум, только из мира музыки", клип взлетел после того, как в 2010 кто-то сделал stop-motion версию (https://www.youtube.com/watch?v=240Vq6tIxio), которую потом показали на CNN (https://www.youtube.com/watch?v=OeEIteQmpHE).
Что интересно, я "Bad Apple!!" впервые увидел как раз на Хабре 10+ лет назад.
Если начать смотреть другой контент по Тохе, то "Bad Apple!!" постепенно пропадёт из выдачи )))
Это демосцена в лучшем смысле этого слова.
Для оптимизации используйте буфферизацию - рендерим все ASCII в буффер в размер кадра + 1 для символа переноса строки, и уже после рендера делаем
for line in buffer:
sys.stdout.write(''.join(line))
sys.stdout.flush()
А то и вовсе flush убрать из цикла и делать его единожды после цикла.
Как вариант - перейти в Raw Mode и передвигать курсор по терминалу при помощи управляющих последовательностей.
А ещё у этой песенки грустный текст, хотя вроде весёленько
У эмулятора терминала Windows, вроде, есть API, с помощью которого можно устанавливать символы на определённые строки и столбцы, тогда не нужно будет стирать, и вывод будет быстрее. Или просто выводить кадры, но не стирать вывод, так как следующий кадр уже захватывает всю видимую область терминала.
Кто-то уже пытался составить каталог всех вариантов Bad Apple ?
Немного исправил код
import os
import sys
import time
import cv2
import numpy
os.system("title Bad Apple")
string = " `.,-':<>;+!*/?%&98#"
string = list(map(ord, string))
size = len(string)
coef = 256 / size
width = 480 // 3
height = 360 // 5
newline = numpy.array((ord("\n"),)*height, dtype="uint8")
cap = cv2.VideoCapture("img/BadApple.mp4")
start = time.time()
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
frame = cv2.resize(frame, (width, height), interpolation=cv2.INTER_LINEAR)
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
frame = frame / coef
frame = frame.astype("uint8")
for i in range(size):
frame[frame == i] = string[i]
frame = numpy.column_stack((newline, frame))
text = frame.tobytes().decode("ascii")
sys.stdout.write(text)
sys.stdout.flush()
pos = cap.get(cv2.CAP_PROP_POS_MSEC) / 1000
now = time.time()
pause = pos - (now - start)
if pause > 0:
time.sleep(pause)
os.system("cls")
cap.release()
Чтобы в отображалось корректно необходимо установить размер окна 160x72
Получилось вот так
Вставлю свои пять копеек:
Раз:
https://youtu.be/1Af9VKNOYsg
Благодаря использованию псевдографики (▚) разрешение по вертикали и горизонтали увеличено в два раза по ширине и высоте относительно количества столбцов и строк.
Два:
https://youtu.be/FO9yVdUYoPY
Здесь 5 градаций серого, опять же благодаря псевдографике (▓)
Недавно переписал на Go, вертеться стало гооораздо веселее)
Повторяем Bad apple на языке Python ASCII-графикой