Однажды у меня родился в голове вопрос о том, как бы выглядело видео, если посмотреть на него «сбоку». То есть, если сложить все кадры видео в стопку один за другим, потом разрезать эту стопку на части вдоль оси времени, получив тем самым кадры для нового видео:



Но в интернете я не нашёл ответа. Наконец, дошли руки проделать такой эксперимент.



Ширина нового видео в таком случае равняется количеству кадров исходного, а количество кадров нового видео — ширине исходного. Я прикинул, что лучше ограничиться небольшим форматом видео (640х360) и отрезком в 640 кадров, чтобы итоговое видео получилось не утомительным по времени и достаточным, для наблюдения эффекта. Экспортировал кадры из VirtualDub в png, набросал программку для Node.js (что первое под руку попалось), обработал, собрал новые кадры обратно в видео. И вот, что получилось.

Исходное видео:



Вид сбоку:



Результат оказался интереснее, чем я ожидал. Я думал меньше распознаваемых деталей будет. Просмотрел несколько раз, чтобы разглядеть каждую сцену, потом решил взглянуть «сверху».

Вид сверху:



Вид сверху получился квадратным, более коротким (360 кадров) и менее забавным. Учитывая полученный опыт, я попытался подобрать сцену, которая смотрелась бы интереснее — с плавно перемещающимися относительно камеры персонажами в полный рост или лицо крупным планом.

Исходное видео:



Вид сбоку:



тут код, если кому интересно
var FRAME_WIDTH = 640;
var FRAME_HEIGHT = 360;
var FRAMES_COUNT = 640;

var fs = require('fs');
var PNG = require('node-png').PNG;

function makeFileName(i, prefix) {
    prefix = prefix || "src2/";
    return prefix + ("000" + i).substr(-4) + ".png";
}

function addStripe(dstFrame, dstFrameIdx, srcFrameIdx, callback) {
    fs.createReadStream(makeFileName(srcFrameIdx)).pipe(new PNG({filterType: 4})).on("parsed", function () {
        for (var p = 0; p < FRAME_HEIGHT; p++) {
            var srcIdx = (FRAME_WIDTH * p + (FRAME_WIDTH - dstFrameIdx - 1)) << 2;
            var dstIdx = (FRAMES_COUNT * p + srcFrameIdx) << 2;

            dstFrame.data[dstIdx] = this.data[srcIdx];
            dstFrame.data[dstIdx + 1] = this.data[srcIdx + 1];
            dstFrame.data[dstIdx + 2] = this.data[srcIdx + 2];
            dstFrame.data[dstIdx + 3] = this.data[srcIdx + 3];
        }

        if (++srcFrameIdx < FRAMES_COUNT) {
            addStripe(dstFrame, dstFrameIdx, srcFrameIdx, callback);
        } else {
            dstFrame.pack().pipe(fs.createWriteStream(makeFileName(dstFrameIdx, "dst2/"))).on("finish", callback);
        }
    });
}

function createFrame(dstFrameIdx) {
    addStripe(new PNG({ width: FRAMES_COUNT, height: FRAME_HEIGHT }), dstFrameIdx, 0, function () {
        console.log("done " + dstFrameIdx);
        if (++dstFrameIdx < FRAME_WIDTH) {
            createFrame(dstFrameIdx);
        }
    });
}

createFrame(+process.argv[2]);



Не старался и не думал об оптимизации, хотел скорее получить хоть какой-то результат. После обработки первых кадров понял, что ждать не много (минут 10-15), если запустить сразу несколько процессов, и успокоился.

YouTube вроде попортил качество видео немного, поэтому прилагаю оригинальные файлы на всякий случай. Кстати, видео «с другого направления» сжимаются хуже при тех же настройках кодека.

Если кто-то уже делал нечто подобное или встречал, или есть другие идеи по необычному представлению видео или звука, делитесь в комментариях. Спасибо за внимание :)
Поделиться с друзьями
-->

Комментарии (78)


  1. Lertmind
    24.07.2016 05:14
    +3

    Это достаточно старая штука — Slit-scan photography (щелевая съёмка или щелевое сканирование). На хабре как минимум три статьи. Вот такое делают:


    1. AllexIn
      24.07.2016 09:05
      +6

      Это не совсем тоже самое.


      1. Lertmind
        24.07.2016 09:25
        +1

        Почему?


        1. rPman
          24.07.2016 09:51
          +7

          в вашем видео ось времени осталась временем, а в статье предложен вариант когда ось времени взята из горизонтальной или вертикальной осей изображений.


        1. vagran
          24.07.2016 09:54

          Тут в центре полоска из исходного видео шириной в один пиксель, положение полоски в кадре исходного видео фиксировано. У автора статьи положение полосок из кадров исходного видео не фиксированы — они движутся одного края кадра к другому.


          1. gaki
            25.07.2016 14:54

            Судя по приведенной иллюстрации метода — это «срез», плоскость которого перпендикулярна плоскости кадра, полоска не будет двигаться. Она будет двигаться только если «резать» «наискосок».


            1. gaki
              26.07.2016 07:36

              А, нет, чушь сморозил, не подумавши — vagran прав.


        1. sajtpro
          24.07.2016 10:50
          -4

          Нельзя увидеть плоскость XYO, и то что там находится с оси Z. Нельзя ничего увидеть сбоку страницы книги.


      1. samodum
        24.07.2016 11:35
        +9

        «то же самое»


  1. NeoCode
    24.07.2016 09:57

    А с чем связаны явно выраженные ветрикальные полосы?


    1. madixi
      24.07.2016 10:00
      +3

      Очевидно, монтажные склейки.


      1. NeoCode
        24.07.2016 10:21

        Точно! Я как-то не подумал о них) Было бы интересно посмотреть в таком виде видео без монтажных склеек… только удастся ли найти такое видео? Разве что самостоятельно снять.


        1. Smi1e
          24.07.2016 12:49

          Можно «делать срез» предварительно разбив видео на сцены. При этом видео будет варьироваться по ширине в зависимости от длительности каждой сцены.


        1. valera5505
          24.07.2016 14:09
          +5

          Бёрдмэн


          1. Grief
            24.07.2016 18:35

            В Бёрдмэне десятки склеек, но они действительно хорошо замаскированы. Есть фильм, снятый совсем без склеек, одним дублем. Это фильм 2015 года Виктория. К сожалению, сам фильм, как по мне, средненький.


        1. Stalker_RED
          24.07.2016 14:30
          +3

          Фрагмент из кф «Самый лучший день»

          Авторы утверждают, что снято без склеек


          1. TheIseAse
            24.07.2016 15:07

            Насчитал четыре :) Но все равно хорошая работа


            1. Stan_1
              24.07.2016 21:50

              Я одну — вылет камеры из автобуса, и тут же показ целого автобуса с того бока, откуда камера вылетела. А не подскажите еще? Видел и раньше этот момент — никогда не понимал, как сделано. :) Хотя круто, конечно.


              1. stifff
                25.07.2016 00:11

                вполне могли «замазать» в редакторе


              1. m0sk1t
                25.07.2016 00:50

                а перед тем как она из окна вылезла? тоже склейка


          1. brdsoft
            24.07.2016 22:58
            +1

            Вот, сделал отрывок из этого клипа. Файл лучше скачать, Яндекс показывает сильно сжатый вариант.


        1. cronk
          24.07.2016 14:49
          +3

          Сокуров — Русский ковчег


        1. AndreyNagih
          24.07.2016 15:54

          https://www.youtube.com/watch?v=G6u-TomcyD4
          И другие творения коллектива.


          1. brdsoft
            24.07.2016 23:02

            Вот отрывок из этого клипа :) (скачать для нормального качества)


        1. pda0
          24.07.2016 17:33
          +3

          Где-то было британское антицензорное видео, 10 часов о том, как сохнет краска. :)


          1. hdfan2
            25.07.2016 10:12
            +2

            Подозреваю, что это видео выглядит одинаково с любой стороны.


        1. mosinnik
          24.07.2016 20:14

          Есть фильм «Виктория» — ~2 часа одним дублем. При этом там достаточно много перемещений как по улице и внутри зданий, даже есть отрезок, когда главные герои в машине едут.


        1. agmt
          25.07.2016 02:36

          Я специально для такого эксперимента поставил камеру на забор и заснял прибытие поезда. Практическое применение? По 1 изображению можно оценить скорость при проходе каждого вагона (чем медленнее, тем длиннее вагон). В случае с разными сценами можно сразу увидеть моменты переключения.
          А вот фантазии на действительно красивое видео не хватило.


        1. CTAPOBEP
          25.07.2016 17:49

          «Глаза змеи» — первые 12 минут одним кадром (причем там целый стадион людей задействован).
          «Миссия Серенити» — с момента входа Серенити в атмосферу следующие 5 минут сняты одним кадром с проходом камеры по всему кораблю.


        1. Wesha
          26.07.2016 03:46


          Русский ковчег — 87 минут без склеек.


        1. Bellicus
          27.07.2016 13:31

          Ну уж, коли начали перечислять.

          Джон Ашер — Кто-нибудь, женитесь на мне
          Мирослав Момчилович — Смерть человека на Балканах
          Линда Вендель — Один кадр
          Юрий Зельцер — Круг
          Майк Фиггис — Тайм-код.


  1. madixi
    24.07.2016 10:02
    +1

    Чуть не сняли с языка про монтажные склейки, которые дают ярко выраженные вертикальные границы.

    Отсюда вывод: подобрать фрагмент без монтажных склеек нужной длины, возможно будет визуально самый интересный результат.


    1. k0ldbl00d
      24.07.2016 11:31
      +1

      Фильм «Birdman» неплохо подойдёт для этого.


    1. ivan386
      24.07.2016 12:54
      +3

      Прошу. 54 минуты без монтажа.


      1. NeoCode
        25.07.2016 00:11

        Ну тут камера неподвижна, картинка почти одна и та же только иногда люди проходят и машины проезжают. Интересно когда съемка непрерывная, но камера плавно движется.


        1. MasMaX
          25.07.2016 09:47

          Как вариант:
          https://www.youtube.com/watch?v=YrdNfX7W38U


  1. sajtpro
    24.07.2016 10:45
    -16

    Название статьи не соответствует содержанию.


  1. Mercury13
    24.07.2016 10:59

    Я тут подумал: а неплохо бы иметь подобный инструмент в видеопрограммах. Без движения, разумеется. Полоса — монтажная склейка, сцены как-то узнаются.


  1. FluffyMan
    24.07.2016 12:43
    +1

    Недавно писал реализацию щелевой фотографии на bash — один кадр для видео в Вашем случае)


  1. AVX
    24.07.2016 12:49

    У меня деважю или эта статья уже была? Я точно читал про это или тут или на GT.


    1. AVX
      24.07.2016 16:18

      * дежавю конечно


  1. stepik777
    24.07.2016 13:25
    +1

    Вращать можно не только на 90°, но и на что-то промежуточное.


    1. brdsoft
      24.07.2016 14:12

      Ага, тоже думал об этом. Кроме поворота оси движения можно еще плоскость сечения наклонять относительно этой оси.


  1. BubaVV
    24.07.2016 13:57
    +3

    Почему-то напомнило
    image


  1. Anisotropic
    24.07.2016 13:59

    попробуйте «Викторию» 2015 года так обработать


    1. brdsoft
      24.07.2016 14:34

      попробую)


      1. NeoCode
        24.07.2016 18:18

        Да, очень хочется продолжения!


        1. brdsoft
          30.07.2016 00:17

          Сцена из магазина https://yadi.sk/i/E80LzICYtkaq6


  1. Survtur
    24.07.2016 14:21
    +1

    Интересно. Это же у вас фотофиниши в видеосклейке по линии среза.

    Если интересно, поделать фотофиниши, то вот простой скрипт, который я набросал после того, как я прочитал пост «Щелевая съёмка: сжатие времени по горизонтали».

    # взять видео v.mp4
    # для первых 10 секунд видео
    # каждый кадр марштабировать в 800х600,
    # вырезать 2х600 с оффсетом 399:0 (средний столбец)
    # и сохранить как кадр temp-aa-00000.png
    ffmpeg -i v.mp4 -t 10 -vf «scale=800:600,crop=2:600:399:0» temp-aa-%5d.png

    # слить столбцы по горизонтали в одну картинку
    # и уменьшить ширину в два раза
    convert +append temp-aa-* -resize 50%x100 out.png

    #удалить лишнее
    rm temp-aa-*


    1. brdsoft
      24.07.2016 14:22

      А почему 2х600, а не 1х600?


      1. Survtur
        25.07.2016 13:17

        Хотелось идеальную середину.



  1. Throwable
    24.07.2016 14:50
    +2

    Просто ассоциация, идея чем-то напомнила Интерстеллар:
    image


    1. kalobyte
      24.07.2016 23:07

      автору надо было в первую очередь этот образец брать


  1. qwerty123123
    24.07.2016 14:57
    -11

    Видео хранится в виде диффов между кадрами.Откуда целиковые кадры? Хуже, чем статьи про собеседования где возмущаются зачем спрашивают сортировки.


    1. Riketta
      24.07.2016 15:32
      +5

      Ну, например, ffmpeg позволяет из видео сделать набор кадров.


  1. Hayate
    24.07.2016 14:59
    -9

    Но… Зачем? Это какая-то интересная и полезная технологическая задача? И тогда причём здесь хабр? Node.js потому что?


  1. NLO
    24.07.2016 15:05

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


    1. brdsoft
      24.07.2016 15:07

      Можно использовать в искусстве, например, как разновидность щелевой съемки. Если снять видео целенаправленно, учитывая то, что получается на выходе, можно добиться интересных результатов.


    1. Survtur
      27.07.2016 07:29

      Террористы так могут шифровать послания. Особо продвинутые смогут шифровать видеообращения.


  1. gorodskih
    24.07.2016 16:01
    +5

    Эх, жалко конечно, что мы ограничены только тремя измерениями и можем видеть четырёхмерные вещи только в проекции.
    А в статье интересный эксперимент получился. Мы видим четырёхмерную реальность в проекции по времени, а как-то так могли бы видеть мир существа, видящие его в проекции на одно из измерений расстояния. Такие существа спокойно могли бы двигаться по времени, но в пространстве они ощущали бы себя лишь в одной плоскости.


    1. ivan386
      24.07.2016 16:44
      +2

      Мы и трёхмерные вещи видим только в проекции)


      1. gorodskih
        24.07.2016 17:18
        +2

        Однако мы ощущаем трехмерность и можем перемещаться в трех измерениях, а в четырех перемещаться не можем сами по себе. Мы не можем взглянуть на объект с «другой стороны» и увидеть его из другого времени.


  1. we1
    24.07.2016 16:02

    А не получится ли улучшить сжатие, как в свое время вышло с BWT?


    1. brdsoft
      24.07.2016 16:02

      Даже если получится, такое видео будет непригодно к потоковому воспроизведению


  1. Tretikona
    24.07.2016 18:03

    Напоминает игрушку из детства Калейдоскоп. Толку от этого помоему столько же — просто прикольные картинки, а тех применения нет.


  1. MichaelBorisov
    24.07.2016 18:49

    Чем-то напоминает идею фотофиниша.


  1. nikitazvonarev
    25.07.2016 01:15

    Я думаю, что примерно так же могли бы наблюдать нашу жизнь трафальмадорцы из «Бойни номер пять...» Воннегута :)


  1. Quiensabe
    25.07.2016 03:28
    +1

    Теперь можно попробовать сделать щелевое сканирование для полученного видео :)


  1. gaki
    25.07.2016 04:10

    Круто. А нельзя это как-то приспособить для программ видеомонтажа, ну вот там показывать смены планов и т. п. (вертикальные линии)? Хотя есть, наверное, и проще способы…


  1. entomolog
    25.07.2016 05:59

    Напомнило Line Scan Camera от Elm Chan.

    Пару картинок
    поезд:
    image
    кукла:
    image


  1. LoadRunner
    25.07.2016 08:37

    А что будет, если полученное «видео сбоку» обработать таким же алгоритмом?


    1. brdsoft
      25.07.2016 09:32

      Получится исходное видео, только в зеркальном отображении и задом наперёд


  1. defecator
    25.07.2016 10:20

    А что если не фильмы брать, а реальные съёмки камерой?
    Например, камера снимает за один день улицу, никаких склеек, реальные данные.


  1. silvansky
    25.07.2016 11:03
    +10

    Приветствую собрата по сумасшедшей обработке видео! =)


    Я делал похожую штуку, жёсткий программный rolling shutter. В совокупности с замедленной съёмкой даёт интересные результаты.



    Конечно, по сути то срез "по диагонали слева направо" Вашего прямоугольного параллелипипеда на схеме. Но можно делать срезы в принципе под разными углами, например, "диагональ сверху вниз", будет интересный эффект. ;)


    1. brdsoft
      25.07.2016 11:43
      +1

      Отличная идея и реализация)


  1. AndreySemikMironov
    25.07.2016 11:42

    Возможно, автору будет интересна моя система получения подобного рода изображений:
    7act.ru/ekspozzer.php


    1. deNULL
      28.07.2016 03:24

      Стало интересно: в той части, где вы «усредняете» изображения, чтобы убрать людей с фото — вы именно среднее арифметическое используете? Кажется, что медиана подойдёт лучше — не будет «призраков» от долго стоящих на одном месте людей (но могут появиться отдельные случайные артефакты).

      Кстати, в Photoshop есть аналогичный инструмент для этого (File–Scripts–Statistics...).