Кодирование видео в реальном времени во время загрузки

    Сервис Transloadit.com запустил новую фичу: обработка видеофайла кодеком ffmpeg в процессе его загрузки на сайт. Серверы Transloadit обеспечивают скорость кодирования выше, чем скорость аплоада у большинства пользователей. Таким образом, теперь практически устраняется задержка между загрузкой и публикацией видеоролика.

    Фича realtime-кодирования в некоторых случаях увеличивает «скорость кодирования» (то есть время между окончанием загрузки файла и окончанием кодирования) в 150 раз. Как это работает, показано на видео под катом или можно проверить самому в демо-секции на сайте Transloadit.com.

    Задержка кодирования — очень неприятная штука. Например, на Youtube она раздражает очень многих пользователей. Хорошо, если ребята опыт коллег с Transloadit переймут разработчики других видеохостингов.

    С технической точки зрения функция realtime-кодирования Transloadit сделана с помощью парсера загрузчика файлов. В процессе загрузки парсер записывает на диск маленькие кусочки файлов, которые «скармливаются» ffmpeg. Системы Transloadit базируются на node.js.

    Для зарегистрированных пользователей, чтобы активировать эту функцию, нужно добавить параметр "realtime": true в параметры робота /video/encode.



    Как видим, даже маленькие стартапы могут технологически превзойти таких «монстров», как Youtube/Google.
    Поддержать автора
    Поделиться публикацией

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

      +6
      Думаю что на YouTube такое не очень скоро появится, слишком большой объем видео загружается ежеминутно чтобы выделить процессорные мощности под реалтайм обработку.
        0
        дык кодировать на клиенте надо, и одновременно аплодить
          0
          На YouTube ещё идёт проверка музыки внутри ролика и самого видеоряда. Наверное, из-за этого тоже замедляется обработка или проверка проводиться уже после полной загрузки ролика?
            +2
            Думаю, они могли бы внедрить такое для роликов с низким разрешением (их и кодировать проще, и количественно они только часть от всех составляют). Тогда можно было, находясь на каком-то мероприятии и сняв что-то важное на смартфон, быстрее выложить это на ютюб. А всякие тяжелые 1080p-ролики могли бы по-прежнему ждать — обычно это те, у которых на съемку-монтаж куча времени уходит, так что там задержка на обработку большой роли не играет.
              0
              Дык запустят потихоньку.
              +1
              Ну, теперь-то мы точно узнаем, что дешевле — процессорные мощности или место на диске.
                +4
                С кодированием видео в любом случае нужны очереди и контроль рессурсов.
                Как не крути процесс жимканья съедает много всего и проца и места на диске. Не зря за Carbon Coder просят 150 тыщ рублей — самый дорогой пакет из всех инструментов в видеопроизводстве.

                Еще бы придумали, как фотки ресайзить во время загрузки, цены бы не было ;)
                  0
                  Далеко не самый, MainConcept SDK с лицензиями и ускорением CUDE/OpenCL подороже будет, фотки можно флешем ресайзить.
                    0
                    MainConcept специфичная вещь, я имел ввиду ПО необходимое большей части телестудий.
                    По поводу флэша спасибо за подсказку — надо подумать, как раз решаю задачу ресайза большого кол-ва файлов.
                    0
                    Ресайзить фотки можно вроде canvas'ом.
                    +1
                    а то что будет если процессорной мощности не хватит для кодирования в реалтайме всем и сразу?
                      0
                      неверное будет медленно загружаться…
                        0
                        тогда как то фишка теряется, одно дело загрузить за пару минут и потом чуток подождать и получить результат, а другое дело грузить по паре часов и ждать когда же там остальные накачаются
                        в общем если юзеров мало или вычислительные мощности не ограничены, тогда хорошее решение =)
                          0
                          если они используют, например, Amazon EC2 для перекодирования, то вполне реально обеспечить приемлемую скорость загрузки+перекодирования. Достаточно интересное решение, возьму на заметку :-)
                        +2
                        А медленная загрузка раздражет еще больше медленного постпроцессинга ;)
                          0
                          просто кодирование закончится позже загрузки, но начнется то оно одновременно с загрузкой, значит закончится раньше чем в классическом варианте.
                            0
                            Transloadit работает в облаке.
                            Так что ресурсов должно хватить.

                            +2
                            > С технической точки зрения функция realtime-кодирования Transloadit сделана с помощью парсера загрузчика файлов. В процессе загрузки > парсер записывает на диск маленькие кусочки файлов, которые «скармливаются» ffmpeg. Системы Transloadit базируются на node.js.

                            А как вы справляетесь с тем, можете получить разрезанные на части фреймы? Если справляетесь, то нет ли такого, что если у нас была медленно меняющаяся сцена, которую загрузчик разорвал посередине, то в результирующем файле будет заметно различаться качество изображения?
                              0
                              > А как вы справляетесь с тем, можете получить

                              с тем, что можете
                                0
                                А как вы справляетесь с тем

                                Я думаю автор топика никак не связан с авторами transloadit.

                                Захотите их спросить: вот твиттер Феликса twitter.com/felixge, или на канале #node.js в FreeNode его всегда модно выцепить.
                                  0
                                  ага, я ступил. спасибо за ссылку.
                                  0
                                  Возможно парсер разрезает поток по key frame'ам. Не зря же это именно парсер, а не простой «обрезатель».
                                    0
                                    Как бы извлечение структуры аудио и видео потоков из того же mp4-контейнера — очень сложная задача. А там не только mp4 поддерживается. Потому и интересуюсь.
                                  +2
                                  с помощью парсера загрузчика файлов. В процессе загрузки парсер записывает на диск маленькие кусочки файлов, которые «скармливаются» ffmpeg. Системы Transloadit базируются на node.js.

                                  Йомае

                                  Да тут делов на 10 минут. ffmpeg поддерживает кодирование на лету через pipe. Т.е. можно сделать например
                                  cat original.avi | ffmpeg -i - encoded.avi
                                  А сделать веб-сервер который умеет на лету парсить multipart/formdata запрос и писать результат в пайп ffmpeg-а тоже элементарно.

                                  В том, что их сервер действительно «записывает на диск маленькие кусочки файлов» я ооочень сомневаюсь. Если прям так где-то написано у них на официальном сайте — ткните носом.

                                  Основная проблема тут именно в правильном распределении ресурсов т.к. кодирование видео просит много CPU. Соответственно, если сразу много клиентов к ним начнут загружать видео, придется неплохо разориться на EC2 или какая там у них инфраструктура…
                                    0
                                    Видимо вы толком кодирование не занимались. Поэтому так говорите.
                                    На самом деле подобным образом можно декодировать далеко не все видео файлы.
                                    Например mp4 контейнер некоторую важную информацию хранит в конце файла.
                                      0
                                      Вы правы, плотно не занимался.
                                      Стало быть mp4 потоково невозможно кодировать на этом сервисе?
                                        0
                                        Некоторые можно, а некоторые нет.
                                        Есть хаки для mp4, которые переносят важную инфу в начало файла что бы осуществлять потоковое вещание, но по умолчанию все основные конвертеры формируют эту информацию в конце файла.
                                      0
                                      $ cat /mnt/Films/Fast_Five_trailer_1.mp4 | ffmpeg -i — -acodec libfaac -ar 44100 -ab 128k -vcodec libx264 -s 640x272 -threads 0 -vpre fast -b 2048k out.mp4
                                      // поскипано
                                      [mov,mp4,m4a,3gp,3g2,mj2 @ 0x19a0510] stream 1, offset 0x24: partial file
                                      [mov,mp4,m4a,3gp,3g2,mj2 @ 0x19a0510] Could not find codec parameters (Video: h264, 9305 kb/s)
                                      [mov,mp4,m4a,3gp,3g2,mj2 @ 0x19a0510] Could not find codec parameters (Audio: aac, stereo, s16, 152 kb/s)
                                      pipe:: could not find codec parameters

                                      Вот что бывает :)
                                      0
                                      А чего так дорого то — $4 за гигабайт это вообще нереально.
                                        0
                                        Как потом склеивать кусочки и что делать со звуком этих склеек? Что делать если в середине куочек не захочет конвертироваться? Многопоточная обработка видео лучше, чем такой псевдо-рилтайм. К тому же если аплод быстрый, то вас не спасет и пиление по кусочкам, только замедлит всё.
                                          0
                                          Технологические монстры уже давно кодируют видео во время загрузки, например ютуб — habreffect.ru/files/5b5/f9657a3da/111111111111111.png
                                          (картинкой вставить карма не позволяет)
                                            0
                                            На свой CDNvideo написали API для конвертации на лету при загрузке файла в CDN. Может формировать сразу несколько выходных форматов и разрешений. Возможности аналогичны brightcove. Удобно для SVoD. Может использоваться в пакетном режиме для массовой конвертации с опросом статуса.

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

                                            Самое читаемое