Как стать автором
Обновить

Комментарии 34

Bad apple конечно легенда, и по мне, самое крутое воплощение было на осциллографе.

У вас, реализация - как просто попросить GPT покадрово разбить видео, перевести в ASCI и склеить. И код можно было бы и не писать.

Ну с GPT повторять мне особо не хотелось, потому что у меня уже года 2 были планы написать Bad apple ascii графикой, и портить это удовольствие халявой с нейросеткой я не хотел!

Я под линуксом видел видеопроигрыватели, которые итак могут проигрывать любое видео почти в ASCII-графике

Воу, это прикольная тема!

mplayer -vo caca

или mplayer -vo aa раньше

Спасибо, протестирую))

VLC это умеет лет 8, кажется.
VLC \ Preferences \ Video \ Output > Colour ASCII

Осциллоскоп это круто, но он лишь средство отображение, вся работа там делалась на обычном ПК. Мне больше понравился вариант на БК-0011М, хотя там тоже без современных средств не обошлось.

Да, автору респект за RISC-V на Logisim.

Мои 5 копеек в тему Bad Apple.

Hidden text

Bad Apple на ПЛИС ECP5 и светодиодной матрице HUB-75e

Хорооооош, легенда))

Моя реализация Bad Apple на LEGO EV3 Mindstorms

Ого! Вот это Вы крутой!!!))

Легендарное видео, мне оно тоже понравилось))

Отрыв башки. Как это сделано ? Как автор управляет загрузкой ядер да еще так динамично ?

Было предположение, по-моему даже здесь, на Хабре, что автор перехватывал вызовы WinAPI

Никак - он инжектит код в taskmanager и подменяет там данные.

Святые небеса... это и сюда попало. Даже на хабре меня преследует это плохое яблоко. Всю ленту в ютубе забило, так ещё и стало из ютуба выбираться... кто-нибудь знает, кто первый решил запустить плохое яблоко "на чём-то" и по какой такой волшебной причине это вдруг стало настолько популярным (запускать видоряд из оригинального видео на разных устрйоствах)? Я пытался найти ответ на этот вопрос и не смог. Никто не знает первоисточник и нулевого пациента.

В таком формате а-ля "дум, только из мира музыки", клип взлетел после того, как в 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 и передвигать курсор по терминалу при помощи управляющих последовательностей.

Спасибо за информацию, сейчас попробую улучшить код!

А ещё у этой песенки грустный текст, хотя вроде весёленько

НЛО прилетело и опубликовало эту надпись здесь

Мммм, звучит интересно, сейчас почитаю про это, спасибо за информацию!

Кто-то уже пытался составить каталог всех вариантов 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, вертеться стало гооораздо веселее)

НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации